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:
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ä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]%'";
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144190
Url: https://administrator.de/contentid/144190
Ausgedruckt am: 16.11.2024 um 19:11 Uhr
5 Kommentare
Neuester Kommentar
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):
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...
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');
Und dann schauen wir mal weiter...
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:
Gruß
Günni
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
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
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