2015-02-02 1 views
0

데이터베이스 삽입을 실행하는 간단한 html 양식과 PHP 파일이 있습니다. 내가 겪고있는 문제는 제출 버튼을 누르면 데이터베이스 테이블에 동일한 제출물의 사본이 3 개나 있는데 그 중 하나만 필요하다는 것입니다. 아래는 코드입니다.내 양식이 여러 데이터베이스 항목을 제출하고 싶지 않습니다.

HTML :

<!DOCTYPE html> 
<html> 
    <form action="demo.php" method="post"> 
     <p> 
      Input 1: <input type="text" name="input1" /> 
      <input type="submit" value="Submit" /> 
     </p> 
    </form> 
</html> 

PHP :

<?php 
define('DB_NAME', 'phpmyadminName'); 
define('DB_USER', 'phpmyadminUser'); 
define('DB_PASSWORD', ''); 
define('DB_HOST', 'localhost'); 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 

if (!$link){ 
    die('Could not connect: ' . mysql_error()); 
} 

$db_selected = mysql_select_db(DB_NAME, $link); 

if (!$db_selected){ 
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error()); 
} 

$value = $_POST['input1']; 

$sql = "INSERT INTO demo (input1) VALUES ('$values')"; 

if (!mysql_query($sql)){ 
    die('Error: ' . mysql_error()); 
} 

mysql_close(); 
?> 

의 DB_NAME, DB_USER 및 DB_PASSWORD 모든 분명한 이유 변경되었지만, 코드 작업을 수행합니다.

양식 데이터를 너무 많이 데이터베이스 테이블에 제출하기 만하면됩니다. 내가 학교에 있었을 때, 나는이 문제가 있었지만 문제는 서버의 끝이었고 우리의 코드가 아닌 것처럼 보였다. 여기에 사용 된 서버는 제 것이고 그것을 완전히 제어 할 수 있습니다. 서버가 잘못되면 문제가되는 경우이를 수정하는 데 도움이됩니다 (이 도구를 관리하는 방법을 배우기 위해이 작업을 수행함에 따라 기본적인 수준의 관리 이상의 것을 알지 못합니다).

답변

2

케네스, 솔직히 여기에 제공된 몇 가지 작업을 필요로 한 코드를보십시오 할 수 있습니다. 우선 mysql API를 더 이상 사용하지 마십시오. 더 이상 사용되지 않으며 향후 PHP 버전에서 더 이상 지원되지 않으며 안전하지 않습니다. 모든 데이터베이스 작업에 대해 mysqli 또는 PDO API를 사용하십시오. 준비된 명령문을 사용하는 것이 더 바람직합니다.
두 번째로, 다른 사람이 데이터를 삭제하거나 전체 데이터베이스를 악화시킬 수 있으므로 변수를 데이터베이스에 직접 입력하지 않고 INSERT$_POST 또는 $_GET 변수를 데이터베이스에 직접 입력하지 마십시오. PHP에는 데이터 유형에 따라 ctype과 같이 매우 쉽게 만들 수있는 많은 기능이 있습니다.

아마 코드에서이 같은 시도 : 나는 또한 당신의 변수 이름은 위의 수정 된 달랐다 것으로 나타났습니다

if (!empty($_POST['input1'])) { //checks if data was received// 
    $value = $_POST['input1']; 
    mysql_real_escape_string($value); 
    $sql = "INSERT INTO demo (input1) VALUES ('$value')"; 
} else { 
    echo "form was not received"; 
    exit; 
} 

.

편집 :
실수로 PHP ctype 기능에 잘못된 구문이 사용되었습니다.

+0

ctype을 살펴보면. 코드를 그대로 사용하면 '예기치 않은 값'오류가 발생합니다. 그 문제를 해싱 할 때 업데이트를 게시 할 것입니다. 귀중한 통찰력을 가져 주셔서 감사합니다. – Kenneth

+0

좋아, 이건 틀린 회신에 게시 된 초,하지만 내 오류 문제를 알아 냈어. 입력 한 문자열이 오류를 일으켰습니다. 나는 "test 1"라는 문구를 타이프했고, 그 공간은 물에 불을 질주하는 것처럼 저에게 오류를 던졌습니다. 이 코드는 의도 한대로 작동합니다. – Kenneth

+0

위의 정보는 처리중인 데이터 유형을 알지 못했기 때문에 일반적인 권장 사항이었습니다. 비어 있는지 확인한 것처럼 보입니다. 그러면 준비된 명령문을 사용하면 모든 입력이 이스케이프되므로 괜찮을 것입니다. 이 경우, mysql_real_escape_string은 데이터베이스에 삽입하기 전에 사용하고자하는 것이다. 나는 나의 대답을 업데이트 할 것이다. – EternalHour

0

당신은 $value라는 변수에 POST 입력 값을 복용하고 쿼리에서 내가 코드를 수정 한 $values

을 보내고있다.

당신은 아래의 코드를

<?php 
define('DB_NAME', 'phpmyadminName'); 
define('DB_USER', 'phpmyadminUser'); 
define('DB_PASSWORD', ''); 
define('DB_HOST', 'localhost'); 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 

if (!$link){ 
    die('Could not connect: ' . mysql_error()); 
} 

$db_selected = mysql_select_db(DB_NAME, $link); 

if (!$db_selected){ 
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error()); 
} 

$value = $_POST['input1']; 
if($value!=''){ 
    $sql = "INSERT INTO demo (input1) VALUES ('".$value."')"; 
} 

if (!mysql_query($sql)){ 
    die('Error: ' . mysql_error()); 
} 

mysql_close(); 
?> 
+0

예, 문제가 해결되었습니다. 고맙습니다. – Kenneth

+0

@Kenneth 답장을 보내 주셔서 감사합니다. 문제가 해결되면 답이 무응답으로 분류되지 않도록 답변을 수락하십시오. – Veerendra

0

다음은 문제의 올바른 코드입니다. 나는 당신이 당신의 페이지를 새로 고침 할 때 데이터베이스에 새로운 빈 항목을 만들고 변수 이름도 잘못되었음을 확인했다.

요청 방법을 확인해야합니다. 이

$ _SERVER [ 'REQUEST_METHOD'] === 'POST'

양식 방법을 확인하고이 데이터베이스에 빈 항목을 방지 할 수 있습니다.

<?php 
     define('DB_NAME', 'test'); 
     define('DB_USER', 'root'); 
     define('DB_PASSWORD', 'mysqldba'); 
     define('DB_HOST', 'localhost'); 

     $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 

     if (!$link){ 
      die('Could not connect: ' . mysql_error()); 
     } 

     $db_selected = mysql_select_db(DB_NAME, $link); 

     if (!$db_selected){ 
      die('Can\'t use ' . DB_NAME . ': ' . mysql_error()); 
     } 
     //Test for request method 
     if($_SERVER['REQUEST_METHOD'] === 'POST') { 
      $value = $_POST['input1']; 

      $sql = "INSERT INTO demo (input1) VALUES ('$value')"; 
      //echo $sql;die; 
      if (!mysql_query($sql)){ 
       die('Error: ' . mysql_error()); 
      } 
     } 
     mysql_close(); 
     ?> 
+0

이것은 의도 한대로 작동했습니다. – Kenneth

관련 문제