Str_replace funktioniert nicht

Hallo,

ich würde gerne „Array ( [0] =>“ mit „(’“ von diesem Array ersetzen:

Array ( [0] => [email protected];m;Oliver;Zehner ) Array ( [0] => [email protected];m;Oliver;Zehner ) Array ( [0] => [email protected];m;Oliver;Zehner )

Es funktioniert leider nur mit 4 Schritten:
$csv_data = str_replace(„Array“,"",$csv_data);
$csv_data = str_replace("[0]","",$csv_data);
$csv_data = str_replace("=>","",$csv_data);
$csv_data = str_replace("(","(’",$csv_data);

Wie kann man es mit einen Schritt ersetzen?

Besten Dank,
Minion

Mit regulären Ausdrücken geht sowas. Aber warum willst du das tun? Mal abgesehen davon, dass ich nicht wirklich verstehe, was du machen willst (du willst den Text „array[0]…“ ersetzen???) hast du doch eine Lösung. Die mag nicht sonderlich elegant sein aber sie funktioniert und ist zudem lesbar und damit auch wartbar. Bei regulären Ausdrücken geht die Lesbarkeit in den Keller und damit auch die Wartbarkeit.

Und… Das jetzt SICHER(!) in reguläre Ausdrücke umzusetzen wird dich minimum ein paar Stunden kosten. Das ist Zeit, die du unnütz einsetzt, weil du etwas reparierst, was nicht kaputt ist.

Beachte bitte immer das KISS-Prinzip. Das ist aus meiner Sicht wichtiger als die Anzahl Zeilen zu reduzieren.

Hab gerade in deinem letzten Beitrag geantwortet. Das was du vorhast ist absolut falsch, auch wenn ich oben etwas anderes sage. Dein Fehler liegt nämlich nicht im str_replace, sondern schon bei dem Laden der CSV.

Du behandelst scheinbar den var_dump des CSV-Arrays als String, den du dann von den ganzen PHP-Sachen befreien willst. Das ist absoluter Murks. Lass das unbedingt sein und mach das richtig, wie ich bereits in dem anderen Baum beschrieb:

Ziel ist es eine CSV Datei über ein Query in eine DB zu speichern.

Das wäre der gesamte Code. Mit str_getcsv geht der Code leider gar nicht. Wieso?
$fh = fopen($_FILES[‚file‘][‚tmp_name‘], ‚r+‘);

$csv_data ="";
while(! feof($fh)) { $csv_data.= print_r(fgetcsv($fh),true); }
echo$csv_data;
$csv_data = str_replace(";","’,’",$csv_data);
$csv_data = str_replace(„Array“,"",$csv_data);
$csv_data = str_replace("[0]","",$csv_data);
$csv_data = str_replace("=>","",$csv_data);
$csv_data = str_replace("(","(’".$user_id."’,’",$csv_data);
$csv_data = str_replace(")","’),",$csv_data);
$csv_data = substr($csv_data,0,strlen($csv_data)-2);

	$query="INSERT INTO `Mailinglist` (`email`, `ms`, `firstname`, `lastname`) VALUES ".$csv_data;

fclose($file);

Wie ich oben vermutete

machst du genau das:

Du missbrauchst print_r() für etwas, wofür es gar nicht gemacht wurde.

print_r() zeigt Informationen über eine Variable in menschenlesbarer Form an.

Das ist überhaupt nicht dafür gedacht, dass du ein Array in einen String umwandelst und dann diesen String irgendwie zerpflückst. Sowas geht viel einfacher, viel schneller und viel sicherer. Wo hast du denn diese Herangehensweise her?

Ist das dein erstes PHP-Projekt? Ich vermute mal ja. Mein Tipp: Schau dir mal das hier an:

und

Hast du dir die Dokumentation und vor allem die Kommentare auf php.net zu str_getcsv() mal angesehen? Ich hatte dazu Links in der Antwort auf deine andere Frage geliefert. Du kannst auch fgetcsv() nehmen, wenn du es richtig anstellst. Ein recht vernünftig aussehendes Beispiel ist hier:

Versuch das mal - nach Lektüre der von mir gelieferten Links. Wenn es immernoch Fehler gibt, dann schick mal deinen Quelltext mit.

Zu der Datenbank muss ich dich auf die Gefahr der SQLinjection hinweisen. Du musst unbedingt (!) Maßnahmen ergreifen, um nicht auch den häufigsten Programmierfehler der Welt zu machen.

Bitte beachte dazu unbedingt die folgenden Informationen
http://php.net/manual/de/security.database.php

Danke für die Erklärung. :wink:

und klappt das jetzt? Wie sieht denn dein Quelltext jetzt aus? Wäre nett, wenn du ihn postest, dann haben spätere Generationen auch noch was von deinem Erkenntnisgewinn.

1 Like