2014-10-23 5 views
1

데이터베이스에서 양식의 데이터를 데이터베이스에 삽입하는 데 문제가 있습니다. ENCAPSED STRING 오류가 표시되지만 오류가 발견되지 않습니다. 누구든지 문자열에 오류가있는 곳을 표시 할 수 있습니까?데이터베이스에 데이터를 삽입하는 데 문제가 있습니다.

$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role "', '" .$logged_in ."', '" .$registered ."')"; 

$insert = "INSERT INTO '" .$user_table ."'(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')"; 

은 이제 더 이상 해요 변경 사항 없음 오류 (모두 감사합니다)를 받고 있지만, 데이터가 데이터베이스에 입력되지 않는 나는 오류를받지 못했습니다 . 다음은 전체 스크립트입니다. 이에

$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role "', '" .$logged_in ."', '" .$registered ."')"; 

을 :

$insert = "INSERT INTO `".$user_table."`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role "', '" .$logged_in ."', '" .$registered ."')"; 

을하고이 변경 :

if($_SERVER["REQUEST_METHOD"] == "POST"){ 
     $p_num = $_POST["p_number"]; 
     $first_name = $_POST["first_name"]; 
     $last_name = $_POST["last_name"]; 
     $email = $_POST["email"]; 
     $password = $_POST["pw"]; 
     $verify_password = $_POST["pw_verify"]; 
     $program = $_POST["program"]; 
     $role = $_POST["role"]; 
     $logged_in = 0; 
     $registered = 0; 

     $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'"; 
     $result = mysqli_query($connect, $query); 
     while($row = mysqli_fetch_assoc($result)){ 
      $user_id = "{$row['user_id']}"; 

      if($user_id == $p_num){ 
       echo "User already exists."; 
      } 
      else{ 
       $registered = 1; 
       $insert = "INSERT INTO '" .$user_table ."'(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')"; 
       $success = mysqli_query($connect, $insert); 
       if($success){ 
        echo "Done"; 
       } 
       else{ 
        echo "Error"; 
       } 
      } 
     } 
    } 
+0

'. $ p_num. "사용자 ID가 – dyachenko

+0

이기 때문에 따옴표없이 사용해야합니다. $ user_table은". $ user_table "이어야합니다. –

+0

현재이 시점에서 스크립트를 작동 시키려고합니다. –

답변

-1

이를 변경해야합니다 (단순 따옴표를 삭제) 이것에 대한

'" .$p_num ."' 

을 :

". $p_num ." 
0

좋아, 다른 답변은 다음과 같이 넓은 SQL 주입 열려, 내가 ... 모자에 답을 던져 당신이 잘못된 시간이있을 때이

$SQL = "INSERT INTO `".$user_table."`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES(?,?,?,?,?,?,?,?,?)"; 

$MySQLI = new mysqli($connect); 

$Statement = $MySQLI->prepare($SQL); 

$Statement->bind_param("sssssssss", $p_num, $first_name, $last_name, $password, $email, $program, $role, $logged_in, $registered); 

$Statement->execute(); 

printf("Error: %s.\n", $Statement->error); 
-1

같은 것을 시도 할 것이다 오류가없는 SQL 문을 작성하고 PHPmyadmin을 사용하여 데이터를 삽입 한 다음 phpMyAdmin에서 생성 한 SQL 문을 복사 한 다음 PHP 파일에서 변수 값을 편집하십시오.

0

나는 이것을 실제로 알아 냈습니다. SELECT 문을 기반으로 연결 했으므로 while 루프 내에 분명한 충돌이있었습니다. 여기에 해결책이 있습니다.

$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')"; 
$success = mysqli_query($connect, $insert); 
if($success){ 
    $registered = 1; 
    mysqli_query($connect, "UPDATE `$user_table` SET `registered` = 1 WHERE `user_id` = '$p_num'"); 
    echo "Done"; 
} 
else{ 
    $registered = 0; 
    echo "This user already exists."; 
} 

그리고 레코드에 대한

는, 그래, 나는이 SQL 인젝션에 취약 이해하지만 이것은 여전히 ​​(보안 문제 포함), 생산에없는, 살 것에 근무하고 있습니다 무언가이다.

+0

거의 같지만 원래 구문이 정확합니다 (내가 테스트 한 것처럼).하지만 제가 말했던 것처럼 문제는 그 while 루프 내에 있었기 때문입니다. 당신의 대답에 아무런 문제가 없었습니다. 문제는 여전히 당신의 대답을 그 반복문에 통합하는 것이 었습니다. 당신이 왜 그렇게 많은 표를 얻었는지 확신 할 수 없습니다. –

+0

그래, 나는 혼란 스럽다. 찾은 것이 있으면 알려주세요. –

관련 문제