2017-01-25 14 views
0

$ _postを使用してinsert.phpページにアクセスするフォームがあります。私がしますprint_r質問が挿入されていない列を挿入する

Array ( 
    [extension] => Array ( 
     [0] => 100 
     [1] => 101 
     [2] => 102 
     ) 
    [secret] => Array ( 
     [0] => a467ca4044f298eff15a26e59f39fe21 
     [1] => 0c4275de171ef363b77aa6aae27afff1 
     [2] => c1951bfb07ed6a833d6d785ff4e19123 
     ) 
    [phone] => Array ( 
     [0] => 80828703658A 
     [1] => 80828703D858 
     [2] => 80828703F866 
     ) 
    [template] => Array ( 
     [0] => Another 600 Template 
     [1] => Another 600 Template 
     [2] => Another 600 Template 
     ) 
) 

insert.phpページのみを拡張し、秘密のデータを挿入を行う際に$ _POST情報は、次のようになります。電話機やテンプレートのデータではありません。電話機とテンプレートのデータは、元の形式のドロップダウンボックスによって配列に格納されます。ここに私が使用しているコードがあります

// Escape user inputs for security 
$ext = mysqli_real_escape_string($link, $_POST['extension']); 
$secret = mysqli_real_escape_string($link, $_POST['secret']); 
$macaddress = mysqli_real_escape_string($link, $_POST['phone']); 
$templatename = mysqli_real_escape_string($link, $_POST['template']); 

// attempt insert query execution 
$sql = "INSERT INTO assignments 
       (id, extension, secret, macaddress, template) 
     VALUES (null,'$ext', '$secret', '$macaddress', '$templatename')"; 

if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 

どこが間違っていますか? おかげ

+0

あなたのスクリプトは、[SQLインジェクション攻撃](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)の危険にさらされている はを見てください[Little Bobby Tables](http://bobby-tables.com/)にも何が起こったのですか?Even [あなたが入力をエスケープしている場合、それは安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) [準備されたパラメータ付きステートメント](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

答えて

0

1)あなたはループ

2) Your script is at risk of SQL Injection Attack Have a look at what happened to Little Bobby Tables Even if you are escaping inputs, its not safe! Use prepared parameterized statements

3でそれらを処理する必要があるので、彼らが配列されている)あなたは、その自動インクリメントは、mysqlは自動的に後

になります場合は、id列にNULLを渡す必要がいけません
// attempt insert query execution 
$sql = "INSERT INTO assignments 
       (extension, secret, macaddress, template) 
     VALUES (?,?,?,?)"; 

$result = $link->prepare($sql); 

foreach ($_POST['extension'] as $idx => $extention) { 
    $result->bind_param('ssss', 
         $extension, 
         $_POST['secret'][$idx], 
         $_POST['phone'][$idx], 
         $_POST['template'][$idx] 
         ); 

    if($result->execute()) { 
     echo "Records $idx added successfully."; 
    } else{ 
     echo "ERROR: Could not execute $sql. " . $result->error; 
     exit; 
    } 
} 

// close connection 
mysqli_close($link); 
?> 
+0

ありがとうございましたRiggsFollyあなたの提案を使用して、私は「ページが機能しません」というエラーを受け取ります –

+0

http://stackoverflow.com/help/誰かが回答しました – RiggsFolly

+0

私はエラー報告を有効にしましたが、これを取得しています致命的なエラー:定義されていないメソッドを呼び出す/var/www/html/cqadmin/Assign/temp_update.php 15行目のmysqli_stmt :: bind_parm() - > bind_parm変数型をssssからssiiに変えようとしましたが、dbに拡張子と秘密を挿入します。 RiggsFolly、あなたはサニタイズについてのコメントを投稿しましたか?あなたがしたら、私はそれを簡単に読んで、今は消えているようです。 –

関連する問題