php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.07.2005, 12:01  
Gast
 
Beiträge: n/a
Standard string splitten

Ich habe einen string ($anweisung), wo einige sql-anweisungen hintereinander enthalten sind. Nun will ich diesen string so splitten, dass die einzelnen sql-anweisungen einzeln oder als array zurückgegeben werden. Mein Ansatz dazu ist
PHP-Code:
<?php
$statements 
preg_split("/insert/ | /update/ | /select/ | /delete/",$anweisung);
?>
Das gibt aber leider nichts zurück.

Hat jemand eine Idee wie ich das machen kann? Der Gedanke dahinter ist, dass ich zu Doku-Zwecken alle sql-Anweisungen einer Datei auslesen will.
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.07.2005, 12:04  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 721
suendesizer
Standard

PHP-Code:
<?php
$statements 
explode(";",$anweisung);
?>
__________________
If you read this message backward, Satan will force you to smoke marijuana.
Gute Tutorials
suendesizer ist offline  
Alt 21.07.2005, 12:06  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von suendesizer
PHP-Code:
<?php
$statements 
explode(";",$anweisung);
?>
Geht leider nicht, da einige Vorgänger an diesem Projekt nicht jedes statement mit einem Semikolon angeschlossen haben
 
Alt 21.07.2005, 12:08  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

das bringt nichts.

Es ist nämlich nicht sicher, ob alle sql anweisungen am stück vorliegen, manchmal werden die auch in schleifen generiert, z.b. wenn man ein "Nachrichten-löschen-script" hat:
PHP-Code:
<?php
$array 
= array();
foreach(
$_POST["del"] AS $msgid) {
$array[] = "'".$msgid."'";
}
$WHERE implode(" OR ID = ");
$sql "DELETE FROM messages WHERE ID= ".$WHERE.";";
mysql_query($sql);
?>
Da würdest du höchstens

"DELETE FROM messages WHERE ID = ".$WHERE.";"

rausbekommen.

Oder was ist, wenn sich eine sql Abfrage in einem Kommentar befindet?

Oder wenn die wörter DELETE, INSERT usw. in einem anderen Zusammenhang befinden?:

PHP-Code:
<?php
if(isset($_GET["mode"])) {
switch(
$_GET["mode"]) {
case 
"DELETE":

break;
case 
"INSERT":

break;
}
}
?>

oder so...
Buhmann ist offline  
Alt 21.07.2005, 12:09  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 721
suendesizer
Standard

Tja, dann hast du ein Problem. Bau doch eine Überprüfung ein, ob ein SQL-Statement mit einem Semikolon abgeschlossen wurde, wenn nein dann füge eins hinzu und schon funktioniert explode();.
__________________
If you read this message backward, Satan will force you to smoke marijuana.
Gute Tutorials
suendesizer ist offline  
Alt 21.07.2005, 12:14  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Buhmann
das bringt nichts.

Es ist nämlich nicht sicher, ob alle sql anweisungen am stück vorliegen, manchmal werden die auch in schleifen generiert, z.b. wenn man ein "Nachrichten-löschen-script" hat:
PHP-Code:
<?php
$array 
= array();
foreach(
$_POST["del"] AS $msgid) {
$array[] = "'".$msgid."'";
}
$WHERE implode(" OR ID = ");
$sql "DELETE FROM messages WHERE ID= ".$WHERE.";";
mysql_query($sql);
?>
Da würdest du höchstens

"DELETE FROM messages WHERE ID = ".$WHERE.";"

rausbekommen.

Oder was ist, wenn sich eine sql Abfrage in einem Kommentar befindet?
Zitat:
"DELETE FROM messages WHERE ID = ".$WHERE.";"
Das würde ich in diesem Fall ja rauskriegen wollen. Und Abfragen, die auskommentiert sind, will ich gar nicht haben, nur die aktuellen
 
Alt 21.07.2005, 12:21  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

dann mach halt n preg_match_all regex, der nach sowas sucht:

!"(DELETE)|(INSERT)|(UPDATE)|(SELECT).+"(;|\) !
Buhmann ist offline  
Alt 21.07.2005, 12:25  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Grundsätzlich geht das schon auf die Art, wie du es probiert hast, nur musst du alle Schlüsselwörter in einem regulären Ausdruck angeben:
PHP-Code:
<?php
$statements 
preg_split('/(insert|update|select|delete)/i'$anweisung, -1PREG_SPLIT_DELIM_CAPTURE);
?>
Allerdings hast du dabei das Problem, dass das Schlüsselwort und der Rest der Abfrage in zwei verschiedenen Array-Elementen abgelegt werden. Einfacher gehts mit
PHP-Code:
<?php
preg_match_all
('/(insert|update|select|delete).*/i'$anweisung$found);
?>
Dann hast du alle Befehle als Array-Elemente in $found[0].
__________________
Gruss
L
lazydog ist offline  
Alt 21.07.2005, 13:02  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von lazydog
Einfacher gehts mit
PHP-Code:
<?php
preg_match_all
('/(insert|update|select|delete).*/i'$anweisung$found);
?>
Dann hast du alle Befehle als Array-Elemente in $found[0].
Ich bekomme in diesem Fall aber nur ein Ergebnis mit dem kompletten String?
 
Alt 21.07.2005, 13:38  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Du hast recht, das hat nur funktioniert, weil ich vor jedem Schlüsselwort einen Zeilenumbruch drin hatte. Da fällt mir auch nicht viel mehr ein, als vor jedes Schlüsselwort ein bestimmtes Zeichen zu setzen, und dann mit explode zu zerteilen, z.B:
PHP-Code:
<?php
$text 
preg_replace('/(insert|update|select|delete)/i'"§$1"$anweisung);
$array explode('§'substr($anweisung1));
?>
__________________
Gruss
L
lazydog ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Event abfangen Ambience JavaScript, Ajax und mehr 4 30.08.2007 14:36
String auslesen Shaira PHP Tipps 2006 11 01.12.2006 17:52
string splitten und nach bestimmten wörtern durchsuchen PHP Tipps 2005-2 5 11.09.2005 13:05
In allen Tabellen nach String suchen Jacks Rache Datenbanken 0 05.08.2005 11:18
String in allen Spalten suchen Jacks Rache Datenbanken 0 05.08.2005 09:43
Alle Spalten nach String durchsuchen Jacks Rache Datenbanken 0 05.08.2005 09:41
string -> int, nur wenn string zahl ist PHP Tipps 2005-2 3 06.06.2005 12:33
String splitten! PHP Tipps 2005 4 03.05.2005 15:24
where string von einer funktion zu anderen transportieren PHP Tipps 2005 5 03.03.2005 16:29
php code als string umwandeln PHP Tipps 2005 8 23.02.2005 18:03
String auf bestimmte Breite (Pixel) kuerzen... mudo PHP-Fortgeschrittene 25 28.01.2005 19:07
String suchen und tauschen PHP Tipps 2005 13 08.01.2005 22:00
string in mehrere tiele splitten nach zeichenzahl PHP Tipps 2004-2 2 25.12.2004 20:00
[Erledigt] String mit Leerzeichen auffüllen HTML, Usability und Barrierefreiheit 2 27.10.2004 18:47
bekomme string nicht in mysql-tabelle PHP Tipps 2004 6 26.07.2004 11:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array splitten von rechts, zeilenwechsel zu dokuzwecken

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.