Skriptsprachen (PHP, Javascript, etc.) - Forum

Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.

Diskutieren Sie hier über die serverseitige Skriptsprachen PHP und Python und über dynamische Webseitenerstellung mit Javascript und Ajax.


astihome
Beiträge: 16

PN schreiben
Profil ansehen
User ist offline

String aus Array wird mit " in die DB geschrieben, Warum?

Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von astihome astihome, am Freitag den 11.04.2008 um 11:39:36

Hi@all

Habe folgendes Problem. Ich lasse ein Array mittels foreach Schleife auslesen. Die extrahierten Strings werden in einem File zwischengespeichert und danach in eine DB geschrieben. Der Haken an der Sache ist nun das die einzelnen Strings wie folgt in die DB geschrieben werden -> "Test1" oder "Strasse". Die Strings werden komplett mit Gänsefüßchen gespeichert, dies soll aber so nicht sein. Mit str_replace werden vorher auch schon Nicht-DB konforme Zeichen entfernt. Woher kommt dieses Problem und wie kann man es abstellen.

Danke im Vorraus


David Danier
Beiträge: 1677

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von David Danier David Danier, am Freitag den 11.04.2008 um 11:40:49

Kannst du etwas Quelltext posten? Ohne ist der Fehler denke ich nicht zu finden.

Insgesamt 1 mal bearbeitet, zuletzt am 11.04.2008 um 11:41:12
Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von Fabian "q-rios" Krause-Willenberg Fabian "q-rios" Krause-Willenberg, am Freitag den 11.04.2008 um 11:44:05
Zitat von: David Danier

Kannst du etwas Quelltext posten? Ohne ist der Fehler denke ich nicht zu finden.

+

Anstatt str_replace einfach mysql_real_escape_string verwenden.


astihome
Beiträge: 16

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von astihome astihome, am Freitag den 11.04.2008 um 11:47:03

Ja kein Problem, hier der Quellcode:

$array = file("upload/flatfile.zip"); foreach($array as $pointer) { $fields=explode("\t",$pointer); if(substr($fields[0], 0,15 ) != "payments-status" && substr($fields[0], 0,1 ) != " "){ $search=array("'","+","‘","’"); $replace=array(" "," "," "," "); $cleantitel=str_replace($search,$replace,$fields[4]); $cleanmail=str_replace($search,$replace,$fields[13]); $newprice = str_replace(",",".",$fields[7]); $street = $fields[16].$fields[17]; $new_id = "736".$fields[0]; $check = mysql_query("SELECT * FROM db_test WHERE `LISTID`='".$fields[5]."'")or die( mysql_error() ); if( mysql_num_rows($check) == 0 ){ mysql_query("INSERT INTO db_test VALUES('','".$cleantitel."','$new_id','$fields[5]','$fields[6]','$newprice','$fields[8]','$fields[11]','$cleanmail','$fields[15]','$street','$fields[18]','$fields[20]','$fields[21]','','','','0')") or die(mysql_error()); } } }


David Danier
Beiträge: 1677

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von David Danier David Danier, am Freitag den 11.04.2008 um 11:48:05

Anstatt str_replace einfach mysql_real_escape_string verwenden.

So wie ich das verstanden hab macht er das genau andersrum: Statt zeichen zu maskieren, damit sie sicher in die DB geschrieben werden entfernt er alle Zeichen, die Probleme bereiten könnten. Da hilft mysql_real_escape_string() wenig. Grundsätzlich wäre es aber natürlich evtl. sinnvoller den String sauber zu maskieren, anstatt Informationen (einzelne Zeichen) zu entfernen.

Zum Thema: Wirkt magic_quotes eigentlich auch beim Lesen aus Dateien? Ansonsten: Werden die Strings evtl. dank magic_quotes schon vorher maskiert in die Datei gespeichert?


David Danier
Beiträge: 1677

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von David Danier David Danier, am Freitag den 11.04.2008 um 12:05:00

Hab den Code mal in eine Code-Box gepackt und eingerückt, so ist der weitaus besser lesbar:

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$array = file("upload/flatfile.zip");
foreach($array as $pointer)
{
    $fields = explode("\t", $pointer);
    if (substr($fields[0], 0, 15 ) != "payments-status" && substr($fields[0], 0, 1 ) != " ")
    {
        $search = array("'", "+", "‘", "’");
        $replace = array(" ", " ", " ", " ");
        $cleantitel = str_replace($search, $replace, $fields[4]);
        $cleanmail = str_replace($search, $replace, $fields[13]);
        $newprice = str_replace(",", ".", $fields[7]);
        $street = $fields[16].$fields[17];
        $new_id = "736".$fields[0];
        $check = mysql_query("SELECT * FROM db_test WHERE `LISTID`='".$fields[5]."'") or die(mysql_error());
        if (mysql_num_rows($check) == 0)
        {
            mysql_query("INSERT INTO db_test VALUES('','".$cleantitel."','$new_id','$fields[5]','$fields[6]','$newprice','$fields[8]','$fields[11]','$cleanmail','$fields[15]','$street','$fields[18]','$fields[20]','$fields[21]','','','','0')") or die(mysql_error());
        }
    }
}

Mehrere Punkte:

  • Du solltest wirklich mysql_real_escape_string() verwenden, der Code lässt SQL-Injections zu.
  • Lass dir die Variablen, die du in die DB einfügen willst mal ausgeben, evtl. macht wirklich irgendein magic_quotes Probleme o.ä. Seh jetzt derzeit nicht, wo die Anführungszeichen herkommen sollten.
  • Schau mal, ob du ein magic_quotes-Problem hast, siehe http://docs.php.net/magic_quotes , laut Dokumentation betrifft das unter anderem Text-Dateien.

astihome
Beiträge: 16

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von astihome astihome, am Freitag den 11.04.2008 um 12:14:02

Danke für die Codebox, hatte ich wohl nicht gefunden :)!

Also, es wird ja vorher eine Art Excel Datei erzeugt mit Tabstopps zwischen den Werten. Wenn ich die Datei nun per Excel öffne erscheint alles normal. Sobald ich es per Skript auslesen lasse werden die Gänsefüßchen mitgeschrieben. Die Datei ist übrigens nicht im TXT Format sondern wird als ZIP Datei abgelegt. Vielleicht kommt der Fehler durch Tabstopps! Ich werd mir die Daten mal manuell ausgeben lassen, veilleicht seh ich ja woran es liegt.

Link zur Antwort auf "String aus Array wird mit " in die DB geschrieben, Warum?" von Fabian "q-rios" Krause-Willenberg Fabian "q-rios" Krause-Willenberg, am Freitag den 11.04.2008 um 12:26:34

Öffne mal die Datei in der die Daten stehen mit einem Texteditor.
Schau mal, ob du da " hast.