Forum
Tipps
News
Menu-Icon

SQL & html <option>

Hey,

ich habe vor, eine Anmeldung zu schreiben. Bei der Anmeldung soll man Name + Datum angeben. Beim Datum werden verschiedene verfügbare Daten vorgegeben, die aus einer Datenbanktabelle (cur_brandschutz_datum) gelesen werden sollen.

Die angemeldeten User werden in einer weiteren Tabelle (cur_brandschutz) gespeichert. Dort wird eine ID, der Name und das Datum gespeichert, für welches sich ein User angemeldet hat.

Nun zu meinem Problem. Für ein Datum sollen sich nur 20 User anmelden können. Daher sollen auch nur die Termine angezeigt werden, bei denen noch Plätze frei sind. Ich habe versucht, das ganze so zu lösen:

<html>
      <head>
         <link rel='stylesheet' type='text/css' href='style.css' >
      </head>
   <body>
      <h1>Anmeldung zur Brandschutzunterweisung</h1>
      <form action="anmelden.php" method="POST">
Anmeldung (bitte Name, Vorname eintragen) <br><input type="text" name="name"><br>
Datum + Uhrzeit: <br>
<select size = "1" name="Datum">
   <?php
   
   while($array = mysql_fetch_assoc($datumergebnis))
   {
   //Prüfen, ob ein Datum schon mit 20 Teilnehmern voll ist.
   $zuviele = mysql_query('SELECT * FROM cur_brandschutz Where Datum = '.$array['Datum'].'');
   $anzahl = mysql_num_rows($zuviele) ;
      if ($anzahl >= "20")
         {   
         
         }
         else
         {
         echo '<option value="'.$array['Datum'].'">'.$array['Datum'].'</option>';
         }
   }
   ?>
   </select>
      </form>
   </body>
</html>

Dieser Versuch funktioniert allerdings nicht, es werden trotzdem alle in der Tabelle eingetragenen Daten angezeigt - auch die, wo schon 20 User angemeldet sind.

Wenn mir jemand meinen Fehler aufzeigen kann, wäre das toll ;)

Gruß
ands04


Antworten zu SQL & html <option>:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Vielleicht die 20 ohne Anführungszeichen? Und warum schreibst du nicht einfach:

if($anzahl 20)
         {
         echo &
#39;<option value="&#39;.$array[&#39;Datum&#39;].&#39;">&#39;.$array[&#39;Datum&#39;].&#39;</option>&#39;;
         
}

Hallo,
mit Anführungszeichen geht auch.
Welches Format hat Dein Datum in der Tabelle?

hey

@ harmageddon
danke für das if...total verpeilt :P

Es geht sowohl mit als auch ohne anführungszeichen nicht richtig.

Das Datum hat in beiden Tabellen das Format varchar(255), ein Eintrag sieht so aus:
17.09.2010 - 10:00 Uhr
Natürlich in beiden Tabellen gleich.
danke euch 2en schonmal

Die Abfrage die nachher im array gespeichert wird lautet so:

$datum = "SELECT * FROM cur_brandschutz_datum Order by Datum" ;
$datumergebnis = mysql_query($datum) ;

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Vielleicht die 20 ohne Anführungszeichen? Und warum schreibst du nicht einfach:

if($anzahl 20)
         {
         echo &#39;<option value="&#39;.$array[&#39;Datum&#39;].&#39;">&#39;.$array[&#39;Datum&#39;].&#39;</option>&#39;;
         }


Dies sollte eigentlich schonmal funktionieren. Allerdings mit <= 20 - um auch 20 Teilnehmer auszugeben.

Bei Deinem ersten Thread hattest Du >= 20 stehen. Dann spuckt er auch alles was 20 und aufwärts ist aus.^^

mfg saffi

if ($anzahl < "20")
         {   
         echo '<option value="'.$array['Datum'].'">'.$array['Datum'].'</option>';
         }
         
So siehts ja derzeit aus - mit der Folge, das dennoch alle Einträge ausgespuckt werden. <20 ist schon richtig, da man sich ja sobald 20 angemeldet sind nicht mehr anmelden können soll.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

für mich liegt dein fehler darin, dass mit deiner abfrage gar nciht prüfst ob schon 20 anmeldungen vorhanden sind. Woher du den Wert für $array['Datum'] beziehst ist mir auch ein Rätsel falls ich nix übersehen habe.
mein denkansatz wäre:
//check wo noch keine 20 Anmeldungen vorhanden
$result=mysql_query("SELECT Datum FROM cur_brandschutz Where count(Datum)<20");
//restlichen Termine ausgeben
while($row mysql_fetch_object($result))
{
  echo &#39;<option value="&#39;.$row->Datum.&#39;">&#39;.$row->Datum.&#39;</option>&#39;; 
}

aber keine ahnung obs funktioniert, hatte ca ein jahr nix mehr mit mysql zu tun. evtl. hilfts ja.
@sqlfreak, order asc funzt gar nicht bei varchar, oder ist mysql da so gutmütig?

@strough
order asc und order desc funktionieren bei VARCHAR.
Gibt kaum was Gutmütigeres als MySql :)

 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

meine frage war eher ob mysql hellsehen kann udn bei einem varchar eintrag von z.b. "17.09.2010 - 10:00 Uhr" sich da was datetimemässiges zusammenreimt, und das im sinne von ands04 passend ordnen würde. nciht wirklich oder?
... okay, hab mir die frage ja jetzt quasi selbst beantwortet xD *gg
meinst mein code da oben funzt?

//check wo noch keine 20 Anmeldungen vorhanden
$result=mysql_query("SELECT Datum FROM cur_brandschutz Where count(Datum)<20");
//restlichen Termine ausgeben
while($row mysql_fetch_object($result))
{
  echo &#39;<option value="&#39;.$row->Datum.&#39;">&#39;.$row->Datum.&#39;</option>&#39;; 
}


Hey

ORDER funktioniert genauso, wie ich es mir vorgestellt habe - es sortiert vom ältestem zum neuestem Datum + Uhrzeit - hatte ich selbst nicht ganz erwartet.

Nun zu deinem Vorschlag. Das Problem ist, ich habe 2 Tabellen. In der 1. (cur_brandschutz_datum) sind die Termine gespeichert, für die man sich anmeldet. In der 2. (cur_brandschutz) sind die Benutzer gespeichert, die sich schon angemeldet haben mit zugehörigem Datum, für das sie sich angemeldet haben.

Das Ziel was ich jetzt also habe, ist, das normalerweise erstmal ALLE in der 1. Tabelle eingetragenen Termine ausgegeben werden. Das klappt ja auch soweit. Nun will ich aber die Einschränkung haben, das wenn in der 2. Tabelle schon 20 Einträge bestehen, die in der Spalte "Datum" z.B. "22.09.2010 - 10:00 Uhr" stehen haben, das dann dieses Datum nicht ausgegeben wird.

Selbstverständlich haben BEIDE Tabellen eine Spalte mit "Datum", die beide mit Varchar funktionieren und bei denen ein und dasselbe Datum natürlich auch mit ein und derselben Syntax gespeichert ist (TT.MM.JJJJ - HH:MM Uhr)

Hoffe das ist verständlich & danke für eure Mühe...vielleicht hat ja einer ne Idee :)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Soweit ich das sehen kann, hast Du keine direkte Verbindung zwischen beiden Tabellen. Hast Du einen Zähler in der ersten Tabelle zu jedem Termin? Dann solltest Du das vllt. so machen. Wenn der Zähler 20 auf dem Tacho hat, dann kannst Du ihn über die Abfrage ausblenden.

Anders wäre mir das zu aufwendig bei jedem Teilnehmer zuschauen, wer an welchen Termin teilnimmt.

Warum speicherst Du die Teilnehmer in der ersten Tabelle zu jedem Termin? Du hast doch bereits in der 2.Tabelle hinter jedem Teilnehmer seinen individuellen Termin schon hinterlegt. Das ist eigentlich doppelt gemobbelt. ;) Es würde ein einfacher Zähler hinter jedem Termin in Tabelle 1 genügen. Wenn Du dann eine Liste zu einem Termin haben möchtest, dann kannst Du gezielt auf den Termin bezogen eine Abfrage in Tabelle 2 vornehmen.

Oder habe ich jetzt einen Denkfehler.^^

Danke für den Tipp mit dem Zähler - habe jetzt einfach in Tabelle 1 nen Zähler eingebaut der jedesmal + 1 zählt wenn sich einer anmeldet. Jetzt funktioniert es so wie es soll :)

Danke euch!

Wenn Du die SQL-Query änderst in:

$result=mysql_query('SELECT count(*) as anzahl,Datum from cur_brandschutz group by Datum HAVING anzahl < 20');gehts auch ohne zusätzlichen Zähler.
Du kannst dann auf 'Datum' zugreifen, Anzahl ist durch Having beschränkt.
Entschuldigt, habe gestern nicht mehr reingeguckt. :-[

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Diese Option war mir auch noch nicht bekannt. Man lernt eben nie aus.^^

Danke auch dafür!

gruß saffi

Obwohl, die Sache mit 2 Tabellen hat Vorteile, er könnte neue Termine problemlos einfügen, wäre mit nem Join zu lösen.
Aber dazu soll er sich nochmal melden, wenn er das will. :D
SQL kann fast alles "mundgerecht" liefern ... :D


« Widget einbindenweb-tv »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Hostname
Ein Hostname ist der eindeutige Name, der einem Gerät in einem Netzwerk zugewiesen wird. Dieser Name wird (parallel zu der IP Adresse) verwendet, um das Gerät i...

Datenbank
Eine Datenbank (DBS), im englischen database, ist eine strukturierte Datensammlung und fungiert wie ein "digitales Archiv". Datenbanken dienen der effizienten Aufbewahrun...

Datenkompression
Siehe komprimieren. ...