SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 23.01.2014, 09:45:11
Sunny94 Sunny94 ist offline
Anfänger
 
Registriert seit: Jan 2014
Alter: 29
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>
Mit Zitat antworten
  #2  
Alt 23.01.2014, 10:14:38
Ckaos Ckaos ist offline
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!
Mit Zitat antworten
  #3  
Alt 23.01.2014, 10:27:28
Sunny94 Sunny94 ist offline
Anfänger
 
Registriert seit: Jan 2014
Alter: 29
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?
Mit Zitat antworten
  #4  
Alt 23.01.2014, 19:41:52
Benutzerbild von vt1816
vt1816 vt1816 ist offline
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!
Mit Zitat antworten
  #5  
Alt 24.01.2014, 08:28:57
Sunny94 Sunny94 ist offline
Anfänger
 
Registriert seit: Jan 2014
Alter: 29
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.
Mit Zitat antworten
Antwort

Stichworte
mysql problem, suchfunktion


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Oder mit mehreren Möglichkeiten - vereinfacht eUncle PHP Grundlagen 2 26.02.2008 23:21:51
WOL (Wake on LAN) mit Hilfe von PHP bei Server mit mehreren NICs HBNuke PHP für Fortgeschrittene und Experten 0 02.08.2007 08:50:16
Problem mit mehreren gleichnamigen Checkboxen Tis PHP Grundlagen 1 31.05.2006 15:19:15
Wie programmiere ich mein eigenes Suchformular? Zonk PHP Entwicklung und Softwaredesign 9 10.02.2004 13:36:58
Dynamisches Füllen von mehreren Auswahllisten thomasf PHP Grundlagen 1 11.07.2003 15:23:02


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:59:57 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt