CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
23.01.2014, 08:45:11
|
Anfänger
|
|
Registriert seit: Jan 2014
Alter: 30
Beiträge: 11
|
|
Suchformular mit mehreren Feldern
Hallo zusammen,
ich habe mir eine Datenbank angelegt, inder Server angelegt werden, mit Kunden etc.
Nun möchte ich eine Suche dafür anfertigen. Dies ist mir auch ganz gut gelungen doch nun ergibt sich ein Problem:
Da ich keine Lust habe, für evtl freie Felder immer if-Abfragen zu machen, definiere ich am Anfang arrays, in denen Alle Datensätze abgespeichert werden und diese ggf. geändert werden. So müsste bei einer Suche ohne Parameter die ganze Tabelle ausgegeben werden.
Dies geschieht aber nicht.
Wo liegt da mein Denkfehler?
Vielen Dank schonmal für die Hilfe.
Code:
PHP-Code:
<?php
include ("db.php");
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
$id=$_POST["u_ID"];
$servername=$_POST["u_Servername"];
$ip=$_POST["u_IP"];
$mac=$_POST["u_MAC"];
$SN=$_POST["u_SN"];
$status=$_POST["u_Status"];
$typ=$_POST["u_Typ"];
$kunde=$_POST["u_Kunde"];
$ort=$_POST["u_Ort"];
$abruf=$_POST["u_Abruf"];
$a = 0;
$ids_1 = array();
$ids_2 = array();
// Array für alle Suchoptionen anlegen um diese mit allen möglichen Inhalten zu füllen.
$id_arr = array();
$ip_arr = array();
$name_arr = array();
$sn_arr = array();
$mac_arr = array();
$status_arr = array();
$typ_arr = array();
$kunden_id_arr = array();
$beschaffung_id_arr = array();
// füllen der Arrays
$abfrage = "SELECT * FROM Server";
$ergebnis = mysql_query($abfrage) or die(mysql_error());
while($row=mysql_fetch_object($ergebnis)){
$id_arr[] = $row->Server_ID;
$ip_arr[] = $row->IP_Adresse;
$sn_arr[] = $row->Seriennummer;
$mac_arr[] = $row->Hardware_MAC;
$status_arr[] = $row->Status;
$typ_arr[] = $row->Server_Typ;
$kunden_id_arr[] = $row->Kunden_ID;
$beschaffung_id_arr[] = $row->Beschaffung_ID;
$name_arr[] = $row->Servername;
}
$id_arr = implode(',', $id_arr);
$ip_arr = implode(',', $ip_arr);
$sn_arr = implode(',', $sn_arr);
$mac_arr = implode(',', $mac_arr);
$status_arr = implode(',', $status_arr);
$typ_arr = implode(',', $typ_arr);
$kunden_id_arr = implode(',', $kunden_id_arr);
$beschaffung_id_arr = implode(',', $beschaffung_id_arr);
$name_arr = implode(',', $name_arr);
//Änderungen werden ab jetzt vorgenommen sofern danach gesucht wurde
//Kunden ID Abändern
If($kunde == ""){
//nichts
}else{
$a=1;
}
If($ort== ""){
//nichts
}else{
If( $a==1){
$a=3;
}else{
$a=2;
}
}
switch ($a) {
case 0:
//Nichts, da keine Kundendaten angegeben wurde
break;
case 1: // Nur Kundenname suchen
$abfrage_1 = "SELECT * FROM Kunde WHERE Name LIKE '$kunde'";
$kunden_abfrage = mysql_query($abfrage_1) or die(mysql_error());
$kunden_id = array();
//Schreibe Alle Kundenid's mit dieser Abfrage in ein Array
while($row=mysql_fetch_object($kunden_abfrage)){
$kunden_id[] = $row->Kunden_ID;
}
$ids_2 = implode(',',$kunden_id);
$kunden_id_arr = array();
$kunden_id_arr = ids_2();
break;
case 2: // Nur Ort suchen
$abfrage_1 = "SELECT * FROM Kunde WHERE Ort LIKE '$ort'";
$kunden_abfrage = mysql_query($abfrage_1) or die(mysql_error());
$kunden_id = array();
//Schreibe Alle Kundenid's mit dieser Abfrage in ein Array
while($row=mysql_fetch_object($kunden_abfrage)){
$kunden_id[] = $row->Kunden_ID;
}
$ids_2 = implode(',',$kunden_id);
$kunden_id_arr = array();
$kunden_id_arr = ids_2();
break;
case 3: // Kundenname und Ort suchen
$abfrage_1 = "SELECT * FROM Kunde WHERE Name LIKE '$kunde' AND Ort LIKE '$ort'";
$kunden_abfrage = mysql_query($abfrage_1) or die(mysql_error());
$kunden_id = array();
//Schreibe Alle Kundenid's mit dieser Abfrage in ein Array
while($row=mysql_fetch_object($kunden_abfrage)){
$kunden_id[] = $row->Kunden_ID;
}
$ids_2 = implode(',',$kunden_id);
$kunden_id_arr = array();
$kunden_id_arr = $ids_2;
break;
}
//Beschaffung Abfrage
If($abruf == ""){
//nichts
}else{
$abfrage_2 = "SELECT * FROM Beschaffung WHERE Abruf LIKE '$abruf'";
$beschaffung_abfrage = mysql_query($abfrage_2) or die(mysql_error());
while($row=mysql_fetch_object($beschaffung_abfrage)){
$beschaffung_ids[] = $row->Beschaffung_ID;
}
$ids_1 = implode(',',$beschaffung_ids);
$bschaffung_id_arr = array();
$beschaffung_id_arr = $ids_1;
}
print_r($ids_1);
echo "<br>";
print_r($ids_2);
$server_abfrage = "SELECT * FROM Server WHERE ((Server_ID IN ($id_arr)) AND (IP_Adresse IN ('$ip_arr')) AND (Seriennummer IN ('$sn_arr')) AND (Hardware_MAC IN ('$mac_arr')) AND (Status IN ('$status_arr')) AND (Server_Typ IN ('$typ_arr')) AND (Kunden_ID IN ($kunden_id_arr)) AND (Beschaffung_ID IN ($beschaffung_id_arr)))";
?>
<table border="1" id="Servertabelle">
<tr>
<td><b>ID</td>
<td><b>IP_Adresse</td>
<td><b>Servername</td>
<td><b>Hardware_MAC</td>
<td><b>Seriennummer</td>
<td><b>Status</td>
<td><b>Server_Typ</td>
<td><b>Kunde</td>
<td><b>Ort</td>
<td><b>Abruf</td>
<td><b>Bemerkung</td>
</tr>
<?php
$ergebnis = mysql_query($server_abfrage) or die(mysql_error());
echo("Ich bin vor der While schleife");
while($row = mysql_fetch_object($ergebnis))
{
echo("Ich bin in der While schleife");
$abfrage_kunde = "Select * From Kunde WHERE Kunden_ID LIKE '$row->Kunden_ID'";
$kunde = mysql_query($abfrage_kunde) or die(mysql_error());
$row_2 = mysql_fetch_object($kunde);
$abfrage_bestellung = "Select * From Beschaffung WHERE Beschaffung_ID LIKE '$row->Beschaffung_ID'";
$bestellung = mysql_query($abfrage_bestellung) or die(mysql_error());
$row_3 = mysql_fetch_object($bestellung);
echo("<tr>");
echo("<td>".$row->Server_ID."</td>");
echo("<td>".$row->IP_Adresse."</td>");
echo("<td>".$row->Servername."</td>");
echo("<td>".$row->Hardware_MAC."</td>");
echo("<td>".$row->Seriennummer."</td>");
echo("<td>".$row->Status."</td>");
echo("<td>".$row->Server_Typ."</td>");
echo("<td>".$row_2->Name."</td>");
echo("<td>".$row_2->Ort."</td>");
echo("<td>".$row_3->Abruf."</td>");
echo("<td>".$row->Bemerkung."</td>");
echo("<td><a href='Server_Details.php?ID=" . $row->Server_ID . "'>Details anzeigen</a></td>");
echo("</tr>");
}
?>
</table>
|
23.01.2014, 09:14:38
|
Member
|
|
Registriert seit: Nov 2007
Beiträge: 843
|
|
AW: Suchformular mit mehreren Feldern
Hi,
über SQL injects solltest du auch nachdenken!
Was für Fehler kommen denn?
Ich verstehe nicht warum du 2mal den Server abfragst?
Code:
$abfrage = "SELECT * FROM Server";
//....
$server_abfrage = "SELECT * FROM Server WHERE ((Server_ID IN ($id_arr)) AND (IP_Adresse IN ('$ip_arr')) AND (Seriennummer IN ('$sn_arr')) AND (Hardware_MAC IN ('$mac_arr')) AND (Status IN ('$status_arr')) AND (Server_Typ IN ('$typ_arr')) AND (Kunden_ID IN ($kunden_id_arr)) AND (Beschaffung_ID IN ($beschaffung_id_arr)))";
MfG
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
|
23.01.2014, 09:27:28
|
Anfänger
|
|
Registriert seit: Jan 2014
Alter: 30
Beiträge: 11
|
|
AW: Suchformular mit mehreren Feldern
Danke für die schnelle Antwort.
Ich frage erst einmal Server ab um die Defaults in die Arrays zu setzten und beim zweiten mal Frage ich die "Suche" ab mit den geänderten Werten.
Das Problem ist, es kommt keine Fehlermeldung.
Die Tabelle ist leer. Der Fehler muss daher in der Zeile liegen:
PHP-Code:
$server_abfrage = "SELECT * FROM Server WHERE ((Server_ID IN ($id_arr)) AND (IP_Adresse IN ('$ip_arr')) AND (Seriennummer IN ('$sn_arr')) AND (Hardware_MAC IN ('$mac_arr')) AND (Status IN ('$status_arr')) AND (Server_Typ IN ('$typ_arr')) AND (Kunden_ID IN ($kunden_id_arr)) AND (Beschaffung_ID IN ($beschaffung_id_arr)))";
Da ich die Arrays schonmal habe ausgeben lassen und die Werte dadrin stehen.
D.h. der Fehler ist iwo in der Zeile, oder?
Weil der kommt in die While-Schleife nicht rein um die Tabelle auszugeben.
Und ich bin noch nicht so erfahren mit PHP und MYSQL daher kann ich mit injects noch nicht wirklich was anfangen.
Sind das Sicherheitslücken durch die ID übergabe?
|
23.01.2014, 18:41:52
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: Suchformular mit mehreren Feldern
Dann lass Dir mal
PHP-Code:
echo $server_abfrage;
ausgeben. Was erhältst Du - sieht wie Abfrage so aus wie Du sie erwartest?
Schalte die Fehleranzeige ein bzw. höher.
Lesen: SQL-Injection
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
24.01.2014, 07:28:57
|
Anfänger
|
|
Registriert seit: Jan 2014
Alter: 30
Beiträge: 11
|
|
AW: Suchformular mit mehreren Feldern
Danke habe den Fehler gefunden.
Dies war die Ausgabe
PHP-Code:
SELECT * FROM Server WHERE ((Server_ID IN (1,2,3,4,5,6,7,8,9,10)) AND (IP_Adresse IN ('neue ipzuzu,192.168.2.2,192.168.2.3,lö45,192.168.2.1,192.168.2.2,192.168.2.3,192.168.2.1,192.168.2.2,192.168.2.3')) AND (Seriennummer IN ('Serienfdfzuzu,Seriennummer_2,Seriennummer_3,44,Seriennummer_1,Seriennummer_2,Seriennummer_3,Seriennummer_1,Seriennummer_2,Seriennummer_3')) AND (Hardware_MAC IN ('Hardware_MAC_1uzu,Hardware_MAC_2,Hardware_MAC_3,54543,Hardware_MAC_1,Hardware_MAC_2,Hardware_MAC_3,Hardware_MAC_1,Hardware_MAC_2,Hardware_MAC_3')) AND (Status IN ('dsfzuzu,Status_2,Status_3,453443643,Status_1,Status_2,Status_3,Status_1,Status_2,Status_3')) AND (Server_Typ IN ('server_typ,Server_Typ_2,Server_Typ_3,server_typ,Server_Typ_1,Server_Typ_2,Server_Typ_3,Server_Typ_1,Server_Typ_2,server_typ')) AND (Kunden_ID IN (1,2,3,4,1,2,3,1,2,3)) AND (Beschaffung_ID IN (22,2,3,4,1,2,3,1,2,1)))
.
Bei den String arrays Fehlen die '..' . Durch kleine Änderungen im Code habe ich dies behoben:
PHP-Code:
id_arr = implode(',', $id_arr);
$ip_arr = implode("','", $ip_arr);
$sn_arr = implode("','", $sn_arr);
$mac_arr = implode("','", $mac_arr);
$status_arr = implode("','", $status_arr);
$typ_arr = implode("','", $typ_arr);
$kunden_id_arr = implode(',', $kunden_id_arr);
$beschaffung_id_arr = implode(',', $beschaffung_id_arr);
$name_arr = implode("','", $name_arr);
Danke für den Tipp und ich werde mir SQL-Injection noch angucken.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:28:42 Uhr.
|