pt-tech
Goto Top

Variable aus radio buttons für SQL Select Abfrage

Hallo allerseits,

ich bin dabei ein script zu programmieren, welches eine Datenbank abfragt.
Dabei soll auswählbar sein, was angezeigt werden soll.
Das ist im moment über radiobuttons getan.
Das Problem ensteht nun dadurch, dass falls radiobuttons nicht gesetzt sind, überflüssige Kommata vorhanden sind und der Code zur SQL Abfrage somit fehlerhaft wird.
Weiß jemand, wie man das umgehen kann ?

Liebe grüße, pt-tech

P.S.: Die relevanten Ausschnitte meines Quellcodes:

		Ausgabe:
		<input type="radio" name="ausgabe1" value="name">Name  
		<input type="radio" name="ausgabe2" value="Region">Region  
		<input type="radio" name="ausgabe3" value="Flaeche">Fl&auml;che  
		<input type="radio" name="ausgabe4" value="Einwohner">Einwohner  
		<input type="radio" name="ausgabe5" value="BIP">BIP<br/>  

		Suchbegriff: <input type="text" name="Suchbegriff">   

		<input type="submit" value="Suchen"> <br>  

		</form>';  

// Wurden Daten über POST gesendet

	if ($_POST) {

 // Wurde ein Suchbegriff eingegeben

 	if ($_POST["Suchbegriff"] != "") {  


$array = array($_POST[ausgabe1], $_POST[ausgabe2], $_POST[ausgabe3], $_POST[ausgabe4], $_POST[ausgabe5]);
$ausgabe = implode(",", $array);  

      		$sql="SELECT $ausgabe FROM db WHERE $_POST[suche] LIKE '%$_POST[Suchbegriff]%'";  

Content-Key: 144190

Url: https://administrator.de/contentid/144190

Printed on: April 25, 2024 at 20:04 o'clock

Member: ikmam78
ikmam78 Jun 04, 2010 at 15:28:12 (UTC)
Goto Top
$ausgabe = str_replace(",,",", ",$ausgabe);

?
Member: dog
dog Jun 04, 2010 at 15:40:07 (UTC)
Goto Top
Na hoppala, das geht ja wieder drüber und drunter.
Zuerst liest du dir den Artikel mal durch: http://de.wikipedia.org/wiki/SQL-Injection
Nein, nicht überfliegen - richtig lesen und verstehen!

Dann fügst du den Code in dein Script ganz oben ein (aber nur solange du den Code veränderst, wenn du fertig bist muss der wieder raus):
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors','On');  
Darauf wird dein Script auseinander fliegen, was auch gut so ist. Da sind so viele Fehler drin, die du nur nicht siehst, weil PHP immer versucht es jedem recht zu machen.

Und dann schauen wir mal weiter...
Member: Guenni
Guenni Jun 04, 2010 at 16:49:26 (UTC)
Goto Top
Hi pt-tech,

ich würde anstatt Radio's Checkboxen verwenden, weil nicht angewählte

Checkboxen garnicht erst gesendet werden.

Dein SQL-Statement "$sql="SELECT $ausgabe FROM db WHERE $_POST[suche] LIKE '%$_POST[Suchbegriff]%'";"

habe ich etwas abgeändert, weil $_POST[suche] (für mich) irgendwie sinnfrei ist.

Script:

<html>
<head>
<title>Untitled</title>
</head>
<body>
<form action="<?php echo $_SERVER[PHP_SELF];?>" method="post">  
<input type="checkbox" name="spalten" value="namen"> Namen<br>  
<input type="checkbox" name="spalten" value="region"> Region<br>  
<input type="checkbox" name="spalten" value="flaeche"> Flaeche<br>  
<input type="checkbox" name="spalten" value="einwohner"> Einwohner<br>  
<input type="checkbox" name="spalten" value="bip"> BIP<br><br>  
<input type="text" name="suchbegriff"> Suchbegriff<br>  
<input type="submit" name="cmd" value="Los gehts">  
</form>
<?php
if(isset($_POST['spalten'])){  
 $spalten=implode(",",$_POST['spalten']);  
 /*
 * Select-Statement
 */
 $query="select $spalten from tabelle ";  
}else{
		 echo "Sie müssen mindestens 1 Checkbox anwählen";  
		 exit;
		 }
$suchbegriff=trim($_POST['suchbegriff']);  
if(strlen($suchbegriff)==0){
 echo "Geben sie einen Suchbegriff ein";  
 exit;
}
/*
* Where-Clausel "zusammenbauen" 
*/
$spalten=$_POST['spalten'];  
$where_clausel="where ";  
$where_clausel.="$spalten like '%$suchbegriff%'";  
$i=1;
while($spalte=$spalten[$i++]){
 $where_clausel.=" or $spalte like '%$suchbegriff%'";  
}
/*
* Where-Clausel an Select-Statement anhängen
*/
$query.=$where_clausel;
/*
* Ausgabe der Abfrage
*/
echo $query; 
?>
</body>
</html>


Gruß
Günni
Member: Arano
Arano Jun 04, 2010 at 22:53:43 (UTC)
Goto Top
Hallo pt-tech.

Zuerst folgen wir den Anweisungen von Dog, das ist __wirklich__ wichtig !

Dan siehst du dir am besten auch noch einmal an wie so ein "Radio-Button" funktioniert / funktionieren kann: selfHTML input radio und wie du selbiges mit deinem Vorhaben verbinden kannst.
Daraus sollte sich dann schon eine gute und einfache Möglichkeit ergeben wie du dein jetzt genanntes Problem abfangen und verarbeiten kannst.

Und zu guter letzt noch zwei schöne PHP-Funktionen: PHP-Manual - isset() und PHP-Manual - empty()


~Arano

Edit:
Ups... kleiner Fehler meiner Seits:
Ein Teil dessen worauf ich bei den Radiobuttons hinaus wollte steht auf der selfHTMl-Seite gar nicht, lies dazu das hier: PHP-Manual - PHP-HTML-Array
Member: pt-tech
pt-tech Jun 05, 2010 at 16:28:31 (UTC)
Goto Top
Zuerst einmal vielen lieben Dank an alle für die schnelle Hilfe.

Vielleicht noch eine kleine Erklärung dazu,
oben das ist nur der relevante Codeausschnitt für das Problem, was Günni mir sehr gut gelöst hat.
Vielen Dank dafür.

Zur Erklärung des Projekts:
Unser Informatiklehrer kam auf die tolle Idee uns ein solches Script als Hausarbeit schreiben zu lassen, weil ihm noch eine note fehlt.
Das ganze in knapp 2 Wochen und ohne jegliche php Vorkenntnisse, deshalb mag das ganze auch sehr fehlerhaft sein.

Da es allerdings nur dazu gedacht ist, ihm fortgeführt zu werden, muss es nur innerhalb gewisser Grenzen funktionieren und es gibt keinen Sicherheitsaspekt.
Durch den Zeitmangel sind dann einzelne Fehler zu ignorieren, so lange das grobe und ganze läuft.

Nochmals vielen Dank und liebe Grüße,

pt-tech