mySQL-Abfrageprobleme in PHP

Hallo und frohe Weihnachten,

ich hänge da an einem Problem, welches ich für eine Hausarbeit für eBusiness lösen muss:

Ausgangssituation:
mySQL-DB mit zwei Tabellen (member, vorl) angelegt und mit Daten befüllt. Es handelt sich um eine An-/Abmeldemöglichkeit für Studenten für verschiedene Veranstaltungen. member beinhaltet die bei der Anmeldung hinterlegten Studentendaten (z. B.Matrikelnr, Nname, Vname usw.) und vorl beinhaltet die Vorlesungsdaten (z. B. Vorlesungsnr, Bezeichnung usw.)

Problem:
Für jede Vorlesung (member.ve, vorl.ve) ist eine maximale Teilnehmerzahl (vorl.max) hinterlegt. Wenn der Student das Anmeldeformular ausgefüllt hat und submitted, soll im anschließend angezeigten member_input.php (INSERT Befehl in DB) mitgeteilt werden, ob er für die angemeldete Vorlesung ‚zugelassen‘ oder da die maximale Teilnehmerzahl überschritten ist, nur auf der ‚Warteliste‘ steht.

Ich bin leider nicht so versiert und hab schon mit diversen Befehlen rumprobiert, aber die gewollten Verbesserungen waren meistens Verschlimmbesserungen. Also wenn jemand mir helfen kann, wär echt super.

hier meine (nicht funktionierende Version):


$meld = „A“;
$sql = „insert into member(mat, nname, vname, mail, pass, meld, ve)
values (’$mat’, ‚$nname‘, ‚$vname‘, ‚$mail‘, ‚$pass‘, ‚$meld‘, ‚$ve‘)“;

echo "
Matrikelnummer: ", $mat;
echo "
Nachname: ", $nname;
echo "
Vorname: ", $vname;
echo "
Email: ", $mail;
echo "
Pass: ", $pass;
echo "
Meld: ", $meld;
echo "
Ve : ", $ve;

If ($res=send_sql($sql)) {
echo "

Datenbank wird befüllt…";
}

/* DB wird ordnungsgemäß befüllt, aber die Abfrage nach der Anzahl der Datensätze haut nicht hin; wenn die Anzahl für die entsprechende Vorlesung bekannt ist, dann müsste sie noch mit vorl.max verglichen werden und bei Überschreitung der maximal zulässigen Teilnehmerzahl die Meldung „Warteliste“ erscheinen, im anderen Fall „zugelassen“ */

$result = mysql_query(„select count(*)
from member
where member.ve=$ve“);
$count = mysql_num_rows($result);
echo "
$result";
echo "
$count";

?>

Hai, Daniel,

wenn der Rotwein zum Gulasch nicht zuviel war, dann liegt der Fehler hier:

$result = mysql_query(„select count(*)
from member
where member.ve=$ve“);
$count = mysql_num_rows($result);
echo "
$result";
echo "
$count";

Du zählst sozusagen zweimal: select count gibt als Ergebnis eine Zeile mit der Anzahl der Datensätze aus und mit mysql_num_rows zählst Du dann nach, wieviele Zeilen in $result stehen und das sind eben - na? - genau! - eine…

Gruß
Sibylle
*Fröhöliche Weeiiiinacht üüüberalll…*

geänderte Version:

$result = mysql_query(„select * from member where member.ve=$ve“);
$num_rows = mysql_num_rows($result);
echo " $result";
echo " $num_rows Rows\n";

Output:
Warning: Supplied argument is not a valid MySQL result resource in …

Ohne die where-Bedingung klappt die Abfrage, aber ich will ja nicht alle Datensätze sondern nur die, für die man sich gerade aktuell gerade angemeldet hat.

Beispielsweise hat sich ein Student für die Vorlesung ‚V002‘ gerade angemeldet ($ve) und nun soll die Anzahl der erfolgten Anmeldungen für diese Vorlesungsnummer abgefragt werden, aber meine where-Bedingung hat da wohl noch n Denkfehler.

Wenn obiges mal klappt, wird dieser Wert dann in einer bisweilen noch nicht definierten Abfrage mit vorl.max, also der in der DB hinterlegten maximalen Teilnehmerzahl der relevanten Vorlesung verglichen. Wenn $result > vorl.max, dann ist folglich die maximale Teilnehmerzahl überschritten, u. u. - dem Student kann somit mitgeteilt werden, ob er zugelassen ist bzw. auf der Warteliste steht.

Steht in $ve ein String? dann solltest du ’ drumrummachen. Das „supplied argument is …“ deutet ziemlich sicher auf nen syntaxfehler im sql statement hin.

Grüße
Bruno

P.S.
Die Count-Lösung war ansich schon besser (glaub ich, kenne die mySQL Implementierung nciht so genau), allerdings kannst du dann nicht mit mysql_num_rows den Wert verarbeiten sondern musst das ergebnis aus der einen Zeile mit einen Spalte wo der Wert drinsteht auslesen

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

thx @ bruno - ja mit auslesen hab ich als Grünschnabel noch so meine Probleme…

…als nächstes wollte ich den in $num_rows ermittelten Wert (=Zeilen- bzw. Teilnehmerzahl für die gerade angemeldete Vorlesung) mit der für diese Vorlesung maximal zulässigen Teilnehmerzahl vergleichen. Die maximale Teilnehmerzahl für jede Vorlesung ist in der DB in der Tabelle ‚vorl‘ im Feld ‚max‘ hinterlegt. Eigentlich ist die Aufgabe simpelst. Zuerst muss ich ja nur den entsprechenden Wert in vorl.max auslesen und danach in der weiter unten definierten Abfrage mit $num_rows vergleichen.

Mein (hoffentlich richtiger) Gedankengang für ist $a, dass ich eben die Spalte ‚max‘ der Tabelle ‚vorl‘ abfrage, wo die aktuelle Vorlesung $ve mit der hinterlegten ‚ve‘ übereinstimmt. Aber irgendwo in den drei untenstehenden Zeilen, hat sich wieder der php-Anfänger-Teufel eingeschlichen, da in $max kein Wert hinterlegt wird (siehe Output)

$a = "select max from vorl where ve = ‚$ve‘ „;
$res3 = send_sql($a);
$max = mysql_result($res3);
echo " $max“; --> Output: Warning: Wrong parameter count for mysql_result() in …

Der richtige Wert in $num_rows wird nun mit dem (noch nicht) richtigen Wert in $max verglichen…

if ($max > $num_rows)
{
echo " Sie sind für die Vorlesung zugelassen!";
}
else
{
echo " Sie stehen für die gewählte Vorlesung auf der Warteliste!";
}

Hallo,

die Funktion mysql_result sagt mir nun nicht gerade viel, aber laut online doku. auf www.php.net hat sie zumindest zwei Parameter (der zweite die Zeilennummer im Ergebnis), müsste also

mysql_result($res3, 0);

heissen!?

Hilft das evtl.?

Grüße
Bruno

Mein (hoffentlich richtiger) Gedankengang für ist $a, dass ich
eben die Spalte ‚max‘ der Tabelle ‚vorl‘ abfrage, wo die
aktuelle Vorlesung $ve mit der hinterlegten ‚ve‘
übereinstimmt. Aber irgendwo in den drei untenstehenden
Zeilen, hat sich wieder der php-Anfänger-Teufel
eingeschlichen, da in $max kein Wert hinterlegt wird (siehe
Output)

$a = "select max from vorl where ve = ‚$ve‘ „;
$res3 = send_sql($a);
$max = mysql_result($res3);
echo " $max“; --> Output: Warning: Wrong parameter
count for mysql_result() in …

Der richtige Wert in $num_rows wird nun mit dem (noch nicht)
richtigen Wert in $max verglichen…

if ($max > $num_rows)
{
echo " Sie sind für die Vorlesung zugelassen!";
}
else
{
echo " Sie stehen für die gewählte Vorlesung auf der
Warteliste!";
}

@ Bruno

ich sag nur, ich stoß um Mitternacht mit auf dein Wohl an. Solltest du dich zufälligst in Süd-Vorarlberg aufhalten, bist auch auf ein Glas Sekt eingeladen.

mit der 0 als zweiten Parameter hat’s auf Anhieb geklappt

ich werd künftig auch öfter die doku konsultieren :smile:

Hehe, war leider nicht zufällig in Südvorarlberg :wink: eher in Nordwest-Vorarlberg, also Süd-Baden-Württemberg :wink:

Frohes Neues

Grüße
Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]