Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Variable aus radio buttons für SQL Select Abfrage

Frage Entwicklung PHP

Mitglied: pt-tech

pt-tech (Level 1) - Jetzt verbinden

04.06.2010, aktualisiert 06.06.2010, 5973 Aufrufe, 5 Kommentare

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:

01.
		Ausgabe: 
02.
		<input type="radio" name="ausgabe1" value="name">Name 
03.
		<input type="radio" name="ausgabe2" value="Region">Region 
04.
		<input type="radio" name="ausgabe3" value="Flaeche">Fl&auml;che 
05.
		<input type="radio" name="ausgabe4" value="Einwohner">Einwohner 
06.
		<input type="radio" name="ausgabe5" value="BIP">BIP<br/> 
07.
 
08.
		Suchbegriff: <input type="text" name="Suchbegriff">  
09.
 
10.
		<input type="submit" value="Suchen"> <br> 
11.
 
12.
		</form>'; 
13.
 
14.
// Wurden Daten über POST gesendet 
15.
 
16.
	if ($_POST) { 
17.
 
18.
 // Wurde ein Suchbegriff eingegeben 
19.
 
20.
 	if ($_POST["Suchbegriff"] != "") { 
21.
 
22.
 
23.
$array = array($_POST[ausgabe1], $_POST[ausgabe2], $_POST[ausgabe3], $_POST[ausgabe4], $_POST[ausgabe5]); 
24.
$ausgabe = implode(",", $array); 
25.
 
26.
      		$sql="SELECT $ausgabe FROM db WHERE $_POST[suche] LIKE '%$_POST[Suchbegriff]%'";
Mitglied: ikmam78
04.06.2010 um 17:28 Uhr
$ausgabe = str_replace(",,",", ",$ausgabe);

?
Bitte warten ..
Mitglied: dog
04.06.2010 um 17:40 Uhr
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):
01.
error_reporting(E_ALL|E_STRICT); 
02.
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...
Bitte warten ..
Mitglied: Guenni
04.06.2010 um 18:49 Uhr
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:

01.
<html> 
02.
<head> 
03.
<title>Untitled</title> 
04.
</head> 
05.
<body> 
06.
<form action="<?php echo $_SERVER[PHP_SELF];?>" method="post"
07.
<input type="checkbox" name="spalten[]" value="namen"> Namen<br> 
08.
<input type="checkbox" name="spalten[]" value="region"> Region<br> 
09.
<input type="checkbox" name="spalten[]" value="flaeche"> Flaeche<br> 
10.
<input type="checkbox" name="spalten[]" value="einwohner"> Einwohner<br> 
11.
<input type="checkbox" name="spalten[]" value="bip"> BIP<br><br> 
12.
<input type="text" name="suchbegriff"> Suchbegriff<br> 
13.
<input type="submit" name="cmd" value="Los gehts"
14.
</form> 
15.
<?php 
16.
if(isset($_POST['spalten'])){ 
17.
 $spalten=implode(",",$_POST['spalten']); 
18.
 /* 
19.
 * Select-Statement 
20.
 */ 
21.
 $query="select $spalten from tabelle "
22.
}else
23.
		 echo "Sie müssen mindestens 1 Checkbox anwählen"
24.
		 exit
25.
26.
$suchbegriff=trim($_POST['suchbegriff']); 
27.
if(strlen($suchbegriff)==0){ 
28.
 echo "Geben sie einen Suchbegriff ein"
29.
 exit
30.
31.
/* 
32.
* Where-Clausel "zusammenbauen" 
33.
*/ 
34.
$spalten=$_POST['spalten']; 
35.
$where_clausel="where "
36.
$where_clausel.="$spalten[0] like '%$suchbegriff%'"
37.
$i=1; 
38.
while($spalte=$spalten[$i++]){ 
39.
 $where_clausel.=" or $spalte like '%$suchbegriff%'"
40.
41.
/* 
42.
* Where-Clausel an Select-Statement anhängen 
43.
*/ 
44.
$query.=$where_clausel
45.
/* 
46.
* Ausgabe der Abfrage 
47.
*/ 
48.
echo $query;  
49.
?> 
50.
</body> 
51.
</html>

Gruß
Günni
Bitte warten ..
Mitglied: Arano
05.06.2010 um 00:53 Uhr
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
Bitte warten ..
Mitglied: pt-tech
05.06.2010 um 18:28 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst IF Abfrage im SELECT Oracle SQL (2)

Frage von Roadrunner777 zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Datenbanken
SUM oder AVG in SQL Abfrage dauert viel zu lange warum? (5)

Frage von samet22 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...