Abfrage will nicht (2 dropdown 1 Texefeld)

chenjung

Benutzer
Beiträge
10
Hallo ihr lieben,

erstmal, ich bin der Michael, wohne in Frankfurt am Main und bin auf dem Gebiet MySQL / PHP ein Anfänger. Ich hatte zwar während meiner Ausbildung zum IT SE kurz einen Kurs in MySQL/PHP aber dieser war wohl zu kurz. Daher hänge ich zur Zeit wohl an einer "einfachen" Sache.

Mein Projekt: Verwaltung von Kundendaten + Erstellung von Angeboten und Aufträgen (wird in ein HTML Dokument übergeben und kann somit als .pdf ausgedruckt werden.)

Was habe ich bis jetzt?
Das grobe Gerüst steht (Weboberfläche + Links) und die ersten Formulare (Kunden erstellen mit Anschrift, Name, Straße usw.) Datenbank welche die Daten Speichert. Als Webserver auf meinem Notebook verwende ich XAMPP 3.2.1 und Windows 7 HE 64 Bit.

Alles läuft wie es soll, das Script wurde soweit von mir angepasst. Nun möchte ich, dass ich über den Link "Angebot erstellen" die Daten, Kundennamen und Pakte (welche für die Fahrzeuge gelten) auswählen.

Als Vorlage nahm ich das Formular "Kunden Suchen" und wollte dies um eine weiteres DropDown Menü erweitern. Da über dieses Dokument "Angebot erstellen" der Kunde gesucht wird und das KFZ Paket, habe ich auf meinem Testformular wie schon angemerkt, 2 dropdown Menüs, 1 Textbox für die Suche nach dem Kundennamen. DropDown Box1 hat mehrere Auswahlmöglichkeiten um einen Kunden zu suchen, daher ist das Textfeld vorhanden, um zusammen mit dem Menü die Eingaben durchzuführen. Die 2. Box soll keinen Text als Eingaben haben, sondern soll nur durch auswählen einen Wert übergeben auf das Angebot Muster.

Der Code für die Kundensuche ohne 2. DorpBox sieht so aus (läuft Einwandfrei, übergibt die Daten ins Angebot Formular).

<?php
include("db.php"); // Einbinden der Verbindungsdaten

// Verbindung zum Datenbankserver herstellen
$link=mysql_pconnect($dbserver, $dbuser, $dbpasswd);
if ($link == FALSE)
{
echo "<p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden. Bitte
versuchen Sie es später noch einmal.\n";
echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
exit (); // PHP-Script beenden
}
// Datenbank auswaehlen
$dblink=mysql_select_db($dbname);
if ($dblink == FALSE)
{
echo "<p><b>Leider kann die Datenbank nicht geöffnet werden. Bitte
versuchen Sie es später noch einmal.\n";
echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
exit (); // PHP-Script beenden
}
$suchfeld=$_POST['suchfeld'];
$suchbegriff=$_POST["suchbegriff"];

$query = "SELECT * FROM kunden where $suchfeld = '$suchbegriff'";
$result = mysql_query($query);
$num = mysql_Num_Rows($result);
if ($num != 0):
?>

Alles so wie es soll. Wenn ich nun versuche, die 2. DropBox einzufügen, erhalte ich den Fehler:
mysql_num_rows() expects parameter 1 to be resource, boolean given

Ich schreibe im Textfeld den Kunden Namen, wähle aus Box1 den Wert Name und in Box2 das Paket Nano. Obiger Fehler erscheint. Hier der Code:

<?php
include("db.php"); // Einbinden der Verbindungsdaten

// Verbindung zum Datenbankserver herstellen
$link=mysql_pconnect($dbserver, $dbuser, $dbpasswd);
if ($link == FALSE)
{
echo "<p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden. Bitte
versuchen Sie es später noch einmal.\n";
echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
exit (); // PHP-Script beenden
}
// Datenbank auswaehlen
$dblink=mysql_select_db($dbname);
if ($dblink == FALSE)
{
echo "<p><b>Leider kann die Datenbank nicht geöffnet werden. Bitte
versuchen Sie es später noch einmal.\n";
echo "</BODY></HTML>\n"; // HTML Dokument abschliessen
exit (); // PHP-Script beenden
}
$suchfeld=$_POST['suchfeld'];
$suchfeld2=$_POST['suchfeld2'];
$suchbegriff=$_POST["suchbegriff"];

$query = "SELECT * FROM kunden where $suchfeld2 AND $suchfeld = '$suchbegriff'";
$result = mysql_query($query);
$num = mysql_Num_Rows($result);
if ($num != 0):
?>

Ich kann mir denken, dass diese Fehler durch $result ausgelöst wird, weiß aber nicht genau warum?

Ähnlichen Code wurde auch schon abgeändert gefunden:
$sql = "SELECT * FROM tabelle";
$result = mysql_query($sql);
$anzahl = mysql_num_rows($result);

Ruft allerdings das selbe hervor. Ich stehe wie der Ochse vor dem Berg und sehe den Wald vor lauter Bäumen nicht mehr.

Habt ihr einen Tipp für mich? Über jede Art von Hilfe bin ich dankbar.
 
Werbung:
Du hast vermutlich ein PHP Problem, dein SQL Code ist ja sehr überschaubar.
Code:
SELECT * FROM kunden where $suchfeld = '$suchbegriff'
Wenn du die Variablen richtig einsetzt wird das SQL funktionieren. Zu PHP kann ich dir nicht helfen.
 
Die MySQL-Extension von PHP ist deprecated und fleigt in der kommenden PHP-Version raus. Select * ist böse (warum, wurde hier schon oft erklärt), Dein Code ist massiv anfällig für SQL-Injection.

Was willst Du mit

Code:
where $suchfeld2 AND $suchfeld = '$suchbegriff'"

exakt testen?
 
Danke für eure Antworten!

Was PHP angeht werde ich da nochmal nachsehen, danke für den Hinweis.

@akretschmer: Testen will ich folgendes: Bedingt durch die beiden Checkboxen (1. für Name, Nachname, Straße usw.) gilt somit als Suchmuster und die 2. für die Auswahl an den KFZ Paketen. Also will ich z.b. über die Box1 den Namen suchen (im Textfeld wir dann z.b. Mustermann eingeben) und zugleich ein Paket auswählen (dient zur Angebotserstellung). Und genau da, hängt das ganze :)
 
Ich glaube eher die Gleichung ist unvollständig, womöglich ist $suchfeld einfach leer. Keine gültige Gleichung kein True oder False.

Abgesehen davon musst du eventuell nicht mit = '$suchbegriff' sondern mit LIKE '%$suchbegriff%' arbeiten wenn du nach Text suchen willst.
 
Der Fragesteller wäre übrigens schlauer, wenn er auf Fehler prüfen und diese gegebenenfalls ausgeben würde. Wie das geht ist hinreichend oft dokumentiert.
 
Was die Suche mit dem Textfeld angeht, die geht ja, es gibt erst diesen Fehler, mit der 2. DropBox, daher gehe ich davon aus, dass diese dann mit meinem bearbeiteten Code den Fehler ausgibt.

Suchfeld (DrobBox) hat 2 Werte: Wachs und Nano (als Wert sind die paname (jene welche in der Datenbank hinterlegt sind und die Namen der Pakte führen, eingetragen) benannt und sollen so die Namen der Pakete dann ins Muster laden.

Ich denke nicht, das die Werte in Box 2 ein boolischer Wert ist, weil True / false erscheint mir da nicht ganz richtig (bin aber kein Meister, vielleicht liege ich völlig falsch) da in der Box ja einfach nur mehrere Möglichkeiten ausgewählt werden sollten. Daher wäre und / oder am besten denke ich. Oder irre ich?

@akretschmer : Meinst du die mysql error wie etwa so, zb? -> $ergebnis = mysql_query($sql) or die(mysql_error());

Update: Error sieht aus wie folgt: Unknown column 'paname' in 'where clause'
 
Sorry für Doppelposten, aber ich kann meinen Beitrag wohl nur 1mal abändern?

Fehler ist gefunden, liegt daran, dass meine jetzige Config nur den Zugriff auf die Datenbank "Kunden" zu lässt mit der Tabelle "Kunden". Allerdings liegen meine Pakte zwar in der Datenbank "Kunden" aber in der Tabelle "pakete" daher denke ich, muss ich es irgendwie schaffen, die Tabelle "kunden" und "pakete" zu verbinden.
 
Werbung:
Erstmal Danke für eure Hilfe, mit Like und euren anderen Tipps. Thema JOIN bin ich schon dran, leider noch keinen Erfolg. Aber ich denke, die Richtung stimmt.
 
Zurück
Oben