Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 6119 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 ..
Ähnliche Inhalte
JavaScript
gelöst Javascript - Speichern Zustand radio-buttons in localStorage (3)

Frage von internet2107 zum Thema JavaScript ...

VB for Applications
gelöst HTML, VBScript: Bei Drop-Down-Auswahl bestimmte Radio-Buttons einblenden (3)

Frage von Yauhun zum Thema VB for Applications ...

Datenbanken
gelöst SQL-Abfrage mit MAX() (9)

Frage von FrAmEr zum Thema Datenbanken ...

Datenbanken
SQL - Abfragen Nachfrage (2)

Frage von PronMaster zum Thema Datenbanken ...

Neue Wissensbeiträge
Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Sicherheit

Eventuell neue Lücke in Intels ME

Information von sabines zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Humor (lol)
Freidach Beitrag (36)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Windows 7
SSD - Win7 Lags (19)

Frage von ph5555 zum Thema Windows 7 ...