2009-07-01 2 views
0

Ich versuche, einen Datensatz mit den Informationen aus einer Mehrfachauswahlbox zu aktualisieren, ich hatte es funktioniert gut, wenn ich INSERT INTO verwendete, um eine neue Zeile hinzuzufügen, aber jetzt versuche ich, es zu diesem Code hinzuzufügen, der verwendet mysql_real_escape_string() gibt die Fehlermeldung am Ende dieses Posts zurück. Ich nehme an, es stimmt etwas nicht mit dem Wert, den ich versuche, in es zu übergehen, aber ich weiß nicht, wie man es formatiert, um PHP glücklich zu machen!MySQL PHP mysql_real_escape_string() - ist dieser Wert keine Zeichenfolge?

$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'; 
} 

Warning: mysql_real_escape_string() erwartet Parameter 1 Zeichenfolge, Array auf der Leitung 100 gegeben werden (das ist die Linie über das beginnt SET Strategien = '“.....)

+2

Können Sie den Code eingeben, der $ strategies und $ id zuweist? –

+1

Ich denke, Sie müssen den Code überprüfen, der $ id und $ strategies Variablen setzt. Ansonsten ist es schwer zu sagen, welcher von ihnen einen Fehler auslöst. Sie sollten vor der Generierung der Abfragezeichenfolge relevanten Code eingefügt haben. –

+0

Da es schneller ist, versuchen Sie, den Operator (int) $ id oder intval ($ id) anstelle von mysql_real_escape_string ($ id) zu verwenden. – merkuro

Antwort

0

i denken

$ id nicht String ist

mysql_real_escape_string($id) 
0

Es ist, dass $ Strategien/$ id beschweren ist ein Array und sollte ein String sein.

3

Sieht aus wie $ strategies ist ein Array und keine Zeichenfolge. Da Sie ein Mehrfachauswahlfeld haben, wenn Sie mehrere Elemente auswählen, werden $ -Strategien als Array zurückgegeben.

Es kommt darauf an, wie Sie mehrere Auswahlen in dieser einzelnen Datenbankspalte speichern möchten. Wenn Sie nur die Auswahl zusammen in eine große Zeichenfolge anhängen wollen, dann verwenden Sie implodieren():

// 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:

Als beiseite, was machen Sie denn hier wirklich beängstigend aussieht. Sie haben eine HTML-Verknüpfung für einen Wert in einer Auswahlboxoption, die Sie dann in der Datenbank speichern (vermutlich, um sie später anzuzeigen?).

Dies ist wirklich öffnen Sie sich für eine triviale XSS-Attacke, wo jemand ein gefälschtes Formular mit ihren eigenen Optionen mit Links zu einer Angriffsseite, die Sie gerne in Ihrer DB speichern und später auf Ihrer Website anzeigen.

Speichern Sie eine ID (oder eine Liste von IDs in Ihrem Fall) oder etwas in Ihrer Datenbank, und erstellen Sie die Links später, wenn Sie sie anzeigen müssen.