Avatar billede broe05101984 Nybegynder
14. april 2009 - 20:02 Der er 14 kommentarer

Funktion i PHP der gør <option> inaktiv når 4 (vilkårligt tal) mennesker har tilmeldt sig et tidspunkt.

Mangler en Funktion i PHP der gør <option> inaktiv når 4 (vilkårligt tal) mennesker har tilmeldt sig et tidspunkt.

Formen er lavet med MySQL database.

<SELECT name="tid" style="font-size:20px">
<option value="" selected>
<option value="08.00">08.00
<option value="09.00">09.00
<option value="10.00">10.00
<option value="11.00">11.00
<option value="12.00">12.00
<option value="13.00">13.00
<option value="14.00">14.00
</SELECT>


Casper Broe
Avatar billede jakobdo Ekspert
14. april 2009 - 21:16 #1
Hvad tænker du på inaktiv ?
Du skal vel lave noget ala:

query = mysql_query("SELECT * FROM tabel WHERE tidspunkt = '10:00'");
if(mysql_num_rows($query) >= 4){
echo '<option>Inaktiv</option>';
}else{
echo '<option>10:00</option>';
}

Dette:

<option value="10:00">10:00</option>
giver samme resultat som:
<option>10:00</option>
Avatar billede Schouweb Nybegynder
14. april 2009 - 21:24 #2
Skal tidpunktet stadig kunne ses men ikke vælges ? eller skal din select helt forsvinde ? eller hvordan ?
Avatar billede broe05101984 Nybegynder
14. april 2009 - 21:49 #3
Den melder fejl på semi-colon og lighedstegn??
Avatar billede jakobdo Ekspert
14. april 2009 - 21:52 #4
Her:
query = mysql_query("SELECT * FROM tabel WHERE tidspunkt = '10:00'");
mangler der $

$query = mysql_query("SELECT * FROM tabel WHERE tidspunkt = '10:00'");

Der skal selvfølgelig laves meget mere.
Det var bare simpelt eksempel.
Avatar billede broe05101984 Nybegynder
14. april 2009 - 22:15 #5
Dette burde vel virke??:

<SELECT name="tid">
<?include('../config.php');
$query = mysql_query ("SELECT * FROM optagelse_sat WHERE tid = '08:00'");
if (mysql_num_rows($query) >= 4){
?>
<option value="" selected>
<?echo "<option value='08.00' disabled='disabled'>08.00</option>";
}else{
echo "<option value='08.00'>08:00</option>";?>
</SELECT><br><br>
<?}?>
Avatar billede fant0mas Nybegynder
14. april 2009 - 22:36 #6
I dens reneste form:

SELECT t.tidspunkt, COUNT(tl.id) as tilmeldinger
FROM tid t
LEFT JOIN tilmeld tl on tl.fk_tid_id = t.id
group by t.id
order by t.tidspunkt

Den kræver måske du omstrukturerer lidt, men det bør du :D
Avatar billede broe05101984 Nybegynder
14. april 2009 - 22:54 #7
jakobdo??, forstår dig en del bedre!
Avatar billede showsource Seniormester
15. april 2009 - 00:23 #8
fant0mas's sql betyder blot at du har tilmeldingerne i en tabel, og hvilke tidspunkter man kan tilmelde sig i en anden tabel.
Og vil mnee at hvis der puttes en HAVING tilmeldinger < 4 henter den kun tidspunkter hvor der endnu ikke er fire tilmeldte

Og som jakobdo skrev, var hans kode simpel, og skulle udbygges.
Avatar billede fant0mas Nybegynder
15. april 2009 - 00:36 #9
Prøv det her:
Kør det her under sql fanen i phpmyadmin:

CREATE TABLE IF NOT EXISTS `tid` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `tidspunkt` time NOT NULL,
  PRIMARY KEY (`id`)
);


INSERT INTO `tid` (`id`, `tidspunkt`) VALUES
(1, '22:00:00'),
(2, '23:00:00'),
(3, '21:00:00');

CREATE TABLE IF NOT EXISTS `tilmeld` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `fk_tid_id` int(9) NOT NULL,
  PRIMARY KEY (`id`)
);


INSERT INTO `tilmeld` (`id`, `fk_tid_id`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 1),
(5, 2),
(6, 1);


Og scriptet:
Du kan jo tilføje et felt med dato i tilmeld og checke på den også, så kan det også bruges på andre dage - SMART!

if(isset($_POST['pony'])){
echo 'Jeg vil indsaettes i tilmeld: '.$_POST['pony'];
}


$sql = "SELECT t.id, TIME_FORMAT(t.tidspunkt, '%H:%i') as tidspunkt, COUNT(tl.id) as tilmeldinger
FROM tid t
LEFT JOIN tilmeld tl on tl.fk_tid_id = t.id
GROUP BY t.id
ORDER BY t.tidspunkt";

$query = mysql_query($sql) or die(mysql_error());

echo '<form method="post"><select name="pony">';
while($res = mysql_fetch_assoc($query)){
   
$disabled = ($res['tilmeldinger'] >= 4)? 'disabled="disabled"' : '';
printf('<option value="%1$s" %3$s>%2$s</option>', $res['id'], $res['tidspunkt'], $disabled);
}
echo '</select><br /><input type="submit" /></form>';
Avatar billede jakobdo Ekspert
15. april 2009 - 08:36 #10
broe05101984: Er du kommet videre ?
Som fantomas skriver, så er det bestemt en god ide at overveje 2 tabeller.
En med tider og en med tilmeldinger.
Avatar billede broe05101984 Nybegynder
15. april 2009 - 12:06 #11
Jeg kan bare ikke få fantOmas's funktion til at virke!
Avatar billede jakobdo Ekspert
15. april 2009 - 12:12 #12
broe: Det er jo ikke meget info du giver.
Kan du få vist din select ?
Kan du få sql'en til at virke ?
Og hvad virker ikke ?
Du må gerne være lidt mere præcis.
Avatar billede broe05101984 Nybegynder
15. april 2009 - 12:19 #13
Ikke helt sikker på database strukturen. Kan sagtens indsætte den efter FantOmas's skema, men vil også gerne lige være sikker på jeg forstår!

Det script du lavede virkede meget godt og simpelt, men som sagt, det skulle udbygges lidt.
Men hvor meget skal det udbygges??
Avatar billede jakobdo Ekspert
15. april 2009 - 12:21 #14
Det skal jo udbygges, så det løber alle tiderne igennem en for en.
Og hver tid skal den så tjekke mod din database med tilmeldinger.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester