[PHP] Warum funktioniert dieser Code nicht ?

micha

Erfahrenes Mitglied
Hallo Leute,

ich habe diese PHP Datei geschrieben.
Sie soll aus einer geladenen Datei bestimme Strings suchen und ersetzen.

1) Alle Zeilen, die mit # beginnen, müssen entfernt werden.
2) Alle Backtips ( ` ) sollen entfernt werden
3) Alle int(1) sollen durch Integer ersetzt werden
4) Alle int(11) sollen durch Integer ersetzt werden
5) Alle TYPE=MYISAM; sollen durch "" ersetzt werden
6) Alle Zeilenumbrüche sollen entfernt werden
7) Überall, wo CREATE und INSERT steht, soll ein Zeilenumbruch und danach ein CREATE oder INSERT eingefügt werden.

Als erstes entfernt dieses Script nun weder die gesamte Zeile, die mit " # " startet, noch irgendwelche Zeilenumbrüche, noch das Semicolon hinter TYPE=xxxx :/

Was er macht ist: ausschließlich das # entfernen und die Int(1x) durch Integer ersetzen. Das TYPE=xxxx entfernt er auch, lässt jedoch das Semicolon stehen.

Mir ist nicht klar warum.
Das Syntax von preg_replace ist meiner Meinung nach korrekt.

Hilfe !

PHP:
    if($action=='insert'){ // alfred alt auf 
        echo "<table class='font'><tr><td>"; 
        $file = file($csv_url); //array: einträge sind die zeilen der datei 
        echo "sql_connect TESTUSER,Test<br>";
        for($i=1;$i<count($file);$i++){ // alfred auf 
        $geparstezeile = str_replace("/#./i","","$file[$i]");
        $geparstezeile2 = str_replace("/`/i","","$geparstezeile");
        $geparstezeile3 = str_replace("/int\(1\)/i","integer",$geparstezeile2);
        $geparstezeile4 = str_replace("/int\(11\)/i","integer",$geparstezeile3);
        $geparstezeile5 = str_replace("/TYPE=MyISAM;/i","integer",$geparstezeile4);
        $geparstezeile6 = str_replace("/\\15\\12|\\15|\\12/i","",$geparstezeile5); // (
        $geparstezeile7 = str_replace("/CREATE/i","\\15 CREATE",$geparstezeile6);
        $geparstezeile8 = str_replace("/INSERT/i","\\15 INSERT",$geparstezeile7);
        echo "sql_execute ".$geparstezeile8."<br>";
     } // alfred zu
 
Zuletzt bearbeitet:
Hallo!

Ich würde die Syntax nicht als richtig ansehen.
Mal ein Beispiel für das Entfernen der Zeilen, die mit einem "#" beginnen:

PHP:
$p = preg_replace('=^#.*$=i', "", $string);

Ich denke, so sollte es funktionieren (nicht getestet).
 
Zuletzt bearbeitet:
Ich weiss nicht, aber auf jedenfall wird nur die 1. Zeile nach der if-Bedingung nur unter Bedingung ausgeführt...Ein kleiner Fehler nebendurch, denke mal das sollte nicht so sein, laut deinen Kommentaren ;)
 
Da man die Raute # auch als Delimiter nutzen kann würde ich schätzen, man muss sie escapen oder?
Also
Code:
$string = preg_replace("/\#.*/","",$zeile);
Außerdem
PHP:
$geparstezeile2 = str_replace("/`/i","","$geparstezeile");  // FALSCH
$geparstezeile2 = str_replace("/`/i","",$geparstezeile); // RICHTIG
 
Danke Jungs, habe das Projekt nun komplett fertig gestellt.
Riesen Dankeschön nochmal an alle, die geholfen haben, insbesondere an Tim, der trotz anfänglicher Meinungsverschiedenheiten mir geholfen hat den Grundstein zu meinem Script zu legen.
 
Zurück