2014-01-04 5 views
2

Как использовать mysqli_real_escape_string в моем скрипте, чтобы предотвратить SQL-инъекцию. Я работал над некоторым кодом и задавал несколько вопросов здесь, и мне было рекомендовано использовать mysqli_real_escape_string вместо mysql_real_escape_string, проблема в том, что мой код не устанавливает соединение до тех пор, пока не будут сохранены переменные, которые я хочу защитить. Было высказано предположение, что я должен был использовать подготовленные заявления, но после некоторого поиска http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php я чувствую себя более смущенным. Прямо сейчас, если делать то, что он не должен делать, он вставляет пустые значения/строки в мою таблицу, что из моего чтения, вероятно, связано с использованием mysqli_real_escaape_stringmysqli real escape string issues

Любые мысли или помощь приветствуются, я так расстроен и смущен, но все еще пытается учиться. Вот код:

<?php 
//Form fields passed to variables 
$manu = mysqli_real_escape_string($_POST['inputManu']); 
$model = mysqli_real_escape_string($_POST['inputModel']); 
$desc = mysqli_real_escape_string($_POST['inputDesc']); 

//Connect to database using $conn 
include ('connection.php'); 

//Insert record into table 
$sql = "INSERT INTO gear (`id`,`manu`,`model`,`desc`) 
     VALUES (NULL,'$manu','$model','$desc')"; 

//Check for empty fields 
if (isset($_POST['submit'])) 
{ 
    foreach($_POST as $val) 
    { 
     if(trim($val) == '' || empty($val)) 
     { 
     die('Error: ' . mysqli_error()); 
     echo "Please complete all form fields!"; 
     echo "<meta http-equiv='Refresh' content='3; URL=../add.php'>"; 
     } 
    } 

    if (!mysqli_query($conn,$sql)) 
    { 
    die('Error: ' . mysqli_error($conn)); 
    } 
    else 
    { 
     //echo "1 record added"; 
     echo "Success, You added the ".$manu." ".$model.""; 
     echo "<meta http-equiv='Refresh' content='3; URL=../index.php'>"; 
    } 
} 
else 
{ 
echo "some error"; 
} 

mysqli_close($conn); 
?> 

ответ

5
<?php 
//Connect to database using $conn 
include ('connection.php'); 

//Form fields passed to variables 
$manu = mysqli_real_escape_string($conn, $_POST['inputManu']); 
$model = mysqli_real_escape_string($conn, $_POST['inputModel']); 
$desc = mysqli_real_escape_string($conn, $_POST['inputDesc']); 
+0

Это имеет смысл, и я вижу разницу в использовании от старого использования mysql. Спасибо – user3146788

0

Надежда Ниже кода поможет вам.

<?php 
    //Connect to database using $conn 
    /*in connection.php 
    $link = mysqli_connect("localhost", "root", "", "test"); 
    */ 
    include ('connection.php'); 


    //Check for empty fields 
    if (isset($_POST['submit'])) 
    { 
      //Form fields passed to variables 
    $manu = mysqli_real_escape_string($link,$_POST['inputManu']); 
    $model = mysqli_real_escape_string($link,$_POST['inputModel']); 
    $desc = mysqli_real_escape_string($link,$_POST['inputDesc']); 


    if($manu!='' && $model!="" && $desc!="") 
    { 

    //Insert record into table 
     $sql = "INSERT INTO gear (`id`,`manu`,`model`,`desc`) 
      VALUES (NULL,'$manu','$model','$desc')"; 
     $r=mysqli_query($link,$sql) ; 
      //echo "1 record added"; 
      if($r) 
      {  
      echo "Success, You added the ".$manu." ".$model.""; 
      // echo "<meta http-equiv='Refresh' content='3; URL=../index.php'>"; 
      } 
     } 
     else 
     { 
      echo "Please complete all form fields!"; 
     } 

    } 

    ?> 
+0

Хорошо, каково главное преимущество этого метода по сравнению с вышеуказанным методом? Я просто смотрю, как это отличается, спасибо, – user3146788

+0

раньше я думаю, ур, используя две страницы для выполнения этой задачи один с html и другие с php.in мой код, я использовал только одну страницу для этой задачи. форма submit. все это. –