2009-07-01 20 views
0

複数の選択ボックスから情報を含むレコードを更新しようとしていますが、新しい行を追加するためにINSERT INTOを使用していましたが、このコードに追加しようとしています。 mysql_real_escape_string()このポストの最後にエラーメッセージが返されます。私はそれに渡そうとしている値に何か間違っていると推測しますが、PHPを幸せにするためにそれをどのようにフォーマットするのか分かりません!MySQL PHP mysql_real_escape_string() - この値は文字列ではありませんか?

$query = "UPDATE studies 
      SET strategies = '" . mysql_real_escape_string($strategies) . "' WHERE id = '" . mysql_real_escape_string($id) . "'"; 



while($row = mysql_fetch_array($result)) { 
    $strategylist = $row['name']; 
    $strategyname = htmlspecialchars($row['name']); 
$pagelink = str_replace(" ","_",$strategylist); 

    echo '<option value="<a href=&quot;strategies.php?strategy=' . $pagelink . '&quot;>'.$strategyname.'</a>" >' . $strategyname . '</option>' . '\n'; 
} 

警告:mysql_real_escape_stringの()は、パラメータ1は、ライン100上で与えられた文字列、配列であることを期待

+2

$ strategと$ idに割り当てるコードを投稿できますか? –

+1

$ idと$ strategies変数を設定するコードをチェックする必要があると思います。それ以外の場合は、エラーの原因を特定するのは難しいです。クエリ文字列生成の前に、関連するコードをいくつか含める必要があります。 –

+0

mysql_real_escape_string($ id)ではなく、キャスト演算子(int)$ idまたはintval($ id)を使用する方が高速です。 – merkuro

答えて

0

iは

を考える(つまり、その上の行は.....「'= SET戦略を開始します)

$ idは文字列

mysql_real_escape_string($id) 
0

ではありません$戦略/ $ idは配列であり、文字列でなければならないことを不平を言っている。

3

$ strategのように見えるのは文字列ではなく配列です。複数選択ボックスがあるので、複数のアイテムを選択すると、$ strategyは配列として返されます。

これは、その単一のデータベース列に複数の選択肢をどのように格納するかということになります。あなたがここでやっていることは本当に怖い見え、余談として

// Sets strategies to a comma-separated list of selected strategies. 
$query = "UPDATE studies 
      SET strategies = '" . 
      mysql_real_escape_string(is_array($strategies) ? implode(',', $strategies) : $strategies) . "' 
      WHERE id = '" . mysql_real_escape_string($id) . "'"; 

ETA:あなただけの一つの大きな文字列に合わせて選択項目を追加したい場合は、破()を使用します。選択ボックスオプションの値のhtmlリンクがあり、それをデータベースに格納します(おそらく後で表示されるでしょうか?)。

これは実際には、誰かが攻撃サイトへのリンクを含む独自のオプションを使って偽のフォームを送信する簡単なXSS攻撃のために自分自身を開いています。あなたはDBに保存して後であなたのサイトに表示します。

ID(またはあなたのケースにIDのリスト)などをデータベースに格納し、後でそれらを表示する必要があるときにリンクを構築します。