2016-08-31 2 views
0

MySQL 데이터베이스에 실제 행과 함께 공백 행이 삽입됩니다. 왜 이런거야?MySQL 데이터베이스의 새 데이터 행 앞에 공백 행이 삽입되었습니다.

여기 Mysql database Structure

는 "빚"이름 데이터 입력하기 전에 빈 항목과 함께 테이블 :

여기
<?php 

define('DB_NAME','my_db_name'); 
define('DB_USER','my_db_user'); 
define('DB_PASSWORD','my_db_pass'); 
define('DB_HOST','localhost'); 

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

if (!$link){ 
die('Could no connect'.mysql_error()); 

} 

$db_selected = mysql_select_db(DB_NAME, $link); 

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

} 

$name = $_POST['name']; 

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

if(!mysql_query($sql)){ 

    die('Error:'.mysql_error()); 
} 

mysql_close(); 

?> 
<html> 
<body> 
<form action="demo2.php" method="post"> 
<input id="name" name="name" type="text" placeholder="" class="form-control input-md" required=""> 
<input type="submit" class="btn btn-success" value="Add Client"> 
</form> 
</body> 
</html> 

내 MySQL 데이터베이스 구조입니다 : 여기

내 코드입니다

enter image description here

성공적인 데이터베이스 연결을 통해이 문제를 하나의 양식 입력으로 분리하고 데이터가 추가되었습니다. 그 전에 빈 행이 추가되었습니다.

데이터베이스에 새 데이터 행 앞에 빈 행이 삽입되는 이유는 무엇입니까?

+6

위의 코드는 한 행만 삽입합니다. 두 행을 얻으면 위의 코드가 두 번 호출됩니다. 양식 제출 여부를 확인하지 않으므로 가능성이 가장 높습니다. 따라서 코드는 원래 GET에 대해 한 번 실행되고 POST는 양식 제출 POST에 대해 다시 실행됩니다. [SQL 주입 공격] (http://bobby-tables.com) –

+2

에 취약하다는 점에주의하십시오. [mysql_'] (http://stackoverflow.com/questions/12859942/why- shouldnt-i-use-mysql-functions-in-php) _mew_code의 데이터베이스 확장 ** 키튼은 세계 어딘가에서 교착 상태에 빠졌습니다 ** PHP는 수년간 사용되어 왔고 영원히 사라졌습니다. PHP를 배우려는 분이라면'PDO' 또는'mysqli' 데이터베이스 확장을 배우는 데 많은 시간을 할애하십시오. [여기에서 시작하십시오] (http://php.net/manual/en/book.pdo.php) – RiggsFolly

답변

1

동일한 스크립트를 사용하여 양식을 표시하고 양식 제출을 처리하고 있습니다. 그러나 DB에 삽입 할 때 처음 양식을 열거 나 제출하는 사용자에 대한 응답으로 실행되는지 여부는 확인하지 않습니다. 처음 URL로 이동하면 $_POST이 비어 있으므로 공백 값을 삽입합니다. 이것에 대한 점검을 추가하십시오.

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $link = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD); 

    if (!$link){ 
    die('Could no connect'.mysql_error()); 

    } 

    $db_selected = mysql_select_db(DB_NAME, $link); 

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

    } 

    $name = $_POST['name']; 

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

    if(!mysql_query($sql)){ 

     die('Error:'.mysql_error()); 
    } 

    mysql_close(); 

} 
0

코드를 리팩토링해야합니다 ... 페이지에서 삽입 쿼리가 실제로 실행되고 있습니다! 이렇게하면 빈 행이 삽입됩니다. 양식 제출시 게시 된 데이터가 삽입됩니다. 리팩토링 :

<?php 

    if (!empty($_POST)) { 

     // all of your php here 

    } 

?> 
0

당신은 당신이 존재하는 경우 확실하지 않은 데이터로 MySQL의 쿼리를하고있어! <?php?> 내부
는 할이

if(isset($_POST['name'])){ 
    if(!empty($_POST['name'])){ 
     //do your stuff 
    } 
} 

그래서 그냥 그 페이지가 바로 (POST 요청도오고있다)
다음은 사용자가 name 입력
을에 무언가를 삽입 않았는지 확인로드되어 있지 않은지 확인

1

양식을 제출할 때뿐만 아니라 모든 요청에 ​​대해 삽입 작업이 실행되므로 페이지에 처음 액세스 할 때 빈 행이 데이터베이스에 삽입됩니다. 그러나 당신은 또한 살균 또는 사용자 입력의 유효성을 검사 같은 코드에서 몇 가지 추가 단계를 포함해야

if (isset($_POST['name'])) { 
    // Your insert command here 
} 

위의 코드가 작동 :이 문제를 해결하는 쉬운 방법은 다음과 같은 조건을 사용하는 것입니다.

관련 문제