2016-04-06 5 views
0

Der folgende ist ein Bericht, den ich versuche, an die Datenbank zu senden. Der PHP-Code funktioniert gut, glaube ich, wie die Zeile erstellt wird. Die Spalte reportdata ist jedoch immer leer. Der Säulentyp ist varchar. Liegt es daran, dass der Bericht mit # beginnt? Der folgende Aufruf erstellt eine Zeile, aber nichts in der Berichtsdatenspalte. Die Autoinkrement-ID wird angegeben.Wohin ging der Bericht? php to mysql

http://www.someaddress.com/savereport.php?reportdata=#98#1#4#14#3#48#8#88#04/06/2016%2008:05:54%20PM 

Wenn ich den Bericht in Basistext ändern, funktioniert es. Was ist los?

http://www.someaddress.com/savereport.php?reportdata=basictext 

Hier ist der PHP-Code, der das Zeug hat:

mysqli_set_charset($dbc, 'utf8'); 

$reportdata = mysqli_real_escape_string($dbc, $_GET['reportdata']); 

$query = "INSERT INTO `onwordreports`(`reportdata`) VALUES ('$reportdata')"; 

$result = mysqli_query($dbc, $query) or trigger_error("Veri yükleme başarısız: " . mysqli_error($dbc)); 

echo $result; 

mysqli_close($dbc); 
+1

[Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://StackOverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) Erfahren Sie mehr über [prepared] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). –

+0

Danke für die Warnung .. Es tut mir weh, mein Gehirn versucht, das zu tun, weil ich es nicht wirklich verstehe. Wenn jemand nicht so nett wäre, zu zeigen, wie ich meinen Code wirklich in einen sichereren umwandeln kann, bleibe ich in Gefahr. – Ugur

Antwort

1

ich mit den Warnungen zustimmen werde, dass dies ein sehr schlechter Weg, dies zu umgehen. Selbst mit mysql_real_escape_string haben Sie immer noch deutliche Bedenken für die Injektion.

Da Sie bereits mysqli verwenden, ist der Wechsel zu vorbereiteten Anweisungen fairly trivial.

Jetzt, mit dem gesagt ... Ich würde einfach eine echo ("$reportdata"); machen, um zu sehen, welchen Wert es tatsächlich versucht einzufügen. Nehmen Sie diesen Wert und führen Sie die Abfrage manuell aus - erhalten Sie Fehler? Sie können sehen, wie mysqli_real_escape_string die Eingabe bereinigt und Sie sehen können, ob dies die Abfrage unterbricht.

+0

'INSERT INTO onwordreports (reportdata) VALUES (12);' Der Code funktioniert ohne die '#', aber die folgende nicht. Irgendwelche Ideen? 'INSERT INTO onwordreports (reportdata) VALUES (# 12)' – Ugur

+0

In welche Art von Spalte möchten Sie einfügen? Varchar, Int, usw.? – csyria

+0

Hallo. Ich versuche, in ein Varchar einzufügen. – Ugur