2016-12-13 4 views
-1

MySQLデータベースに値の配列を格納したいとします。ここで、grade変数は、html select要素の値を含む配列です。現在は動作していません。ここに私のPHPコードは次のとおりです。配列を持つ選択ボックスの値を渡してデータベースに格納する方法

<?php 
if (isset($_POST["sub"])) { 
    $query = "UPDATE course_reg set grade="; 
    $values = $_POST['grade']; 
    $valuesArr = array(); 
    foreach ($values as $a){ 
     $valuesArr[] = mysql_real_escape_string($a); 
     //$valuesArr[] = $a; 
    } 
    $query .= implode(',', $valuesArr); 
    $grade_upp = mysqli_query($con,$query); 
} 
?> 
+0

コードをHTMLコードで更新します – Gulshan

+0

クエリにはWHERE句が含まれておらず、 'course_reg'テーブルのすべての行が変更されます。 – axiac

答えて

1

あなたは、文字列の周りに'が必要になります。

<?php 
if (isset($_POST["sub"])) { 
$query= "UPDATE course_reg set grade="; 
$values = $_POST['grade']; 
$valuesArr = array(); 
foreach ($values as $a){ 
$valuesArr[] = mysql_real_escape_string($a); 
//$valuesArr[] = $a; 
} 
$query .= "'".implode(',', $valuesArr)."'"; 
$grade_upp=mysqli_query($con,$query); 
} 
?> 

注:prepared statementを使用する代わりにmysqli_queryを使用して停止します。それは安全ではありません。

-1

正確に何をしますか?あなたのテーブル構造は何ですか?データベース内の行を更新(=変更)しています。これは、あなたの望むことですか? MySQLの更新クエリは、複数の値を同じフィールドに設定するために使用することはできません。あなたの質問から、これはあなたがやっているように見えます。そして、あなたの更新には条件がありません。したがって、常にすべての行を更新します。

if (isset($_POST["sub"])) { 
    $query= "UPDATE course_reg set grade="; 
    $values = $_POST['grade']; 

    foreach ($values as $a){ 
    $valuesArr[] = mysql_real_escape_string($a); 

    $grade_upp=mysqli_query($con,$query.mysql_real_escape_string($a)); 
    // if your values are strings, you need to put them into ' 
    // and you might want to add a WHERE clause to your update 
} 

ところで、POST変数を直接使用することは安全ではないと考えられます。 @Frzadで説明されているように準備されたステートメントを見てください

+0

データベース内の値を更新したい。私はループの中で