String zwischen zwei bestimmten Zeichen ausgeben

schleckerbeck

Erfahrenes Mitglied
Hallo,

ich möchte aus einer SQL Abfrage die ungefähr so lautet
PHP:
Select id, name, titel from artikel where id='1' and category='test'
alles zwischen den beiden ' ' (oder alternativ auch " ") herausfilter, um diese Werte zu überprüfen.
Hat jemand ne Idee, wie man das lösen könnte? Kenn mich mit RegExp nicht so richtig aus, und auch sonst hab ich noch keine Funktionen gefunden, die mir weiterhelfen könnten.

Danke,
sc.
 
Danke für die Antwort, auf explode bin ich auch schon gestoßen.
Aber was ist, wenn in den Werten, also id='1', auch Anführungszeichen, oder Hochkommata sind? Wie z.B. id='1';DROP DATABASE test'.
Will damit SQL Injections verhindern. Ich bräuchte einfach den Wert, der der Spalte id übergeben wird, also nur 1';DROP DATABASE test
Das ganze sollte auch genauso mit Anführungszeichen funktionieren.

Hat wer ne Idee?

Danke,
sc.
 
Die Funktion mysql_real_escape_string will ich auch anwenden. Bloß wird der SQL Funktion die Abfrage "am Stück" übermittelt, also ungefähr so:
checksql("Select * from test where id='".$_GET['test']."');
und in der checksql funktion will ich dann den Teil rausfiltern, der in der GET Variable (oder Post o.ä.) steht, und per mysql_real_escape_string maskieren.
Weil wenn ich mysql_real_escape_string auf die komplette Abfrage anwenden, maskiert er mir ja auch die beiden Hochkomma bei id=' ', was er nicht tun soll.

Also muss ich den String doch irgendwie zerlegen, sodass ich an die Werte von GET in der Abfrage ran komme.
Es sollte auch funktionieren, dass z.B. bei Insert oder Update, wo mehrere Werte übergeben werden, auch alle anderen überprüft werden (also name='$_GET[name]', titel='$_GET[titel]' usw.)

Danke,
sc.
 
Hallo,

wenn Du so vorgehen möchtest musst Du das Ganze mit Javascript vor dem Submitten machen . So zum Beispiel:
PHP:
if(isFinite(document.getElementById(Element).value))
											{
												 chknum=document.getElementById(Element).value;
												var find= /\W/;
											 	 if(chknum.search(find)==-1){mybool=true;}
											  	else {
											  	filled=window.prompt('This field "'+Element+'" is an integer one !\r\nPlease fill in a number without fragmental parts of number',document.getElementById(Element).value);
													document.getElementById(Element).value=filled;
													}
											 
											 }else {
											  	filled=window.prompt('This field "'+Element+'" is an integer one !\r\nPlease fill in a number without fragmental parts of number',document.getElementById(Element).value);
													document.getElementById(Element).value=filled;
													}

Viele Grüße
 
Wie währe es damit:

PHP:
$sql = "Select * from test where id='".mysql_real_escape_string($_GET['test'])."';"

Aber generell könntest du es so in etwa machen:

PHP:
function checksql($str){

        return preg_replace_callback("%'(.*)'%Us",    create_function(
      '$treffer',
      'return mysql_real_escape_string($treffer[1]);'
    ),$str);

}
 
Danke,
also die erste Variante kommt leider nicht in Frage. Wär natürlich die einfachste.

Die zweite Variante find ich ganz interessant. Hätte bloß noch ne Bitte, ob du mir die ganze Funktion ein wenig erklären könntest, da ich mit RegExp nicht so viel am Hut hab.

Danke,
sc.
 
Danke für den Link, aber so richtig helfen tut er mir nicht.
Naja, werd mich dann mal in die RegExp reinlesen. Vielleicht kapier ich's dann.
Außer natürlich jemand erklärt mir den Ausdruck. :)

Danke,
sc.
 
Zurück