DropDown per ID non assegnati
DropDown per ID non assegnati postato il 18/10/2012 23:08:44 nel forum programmazione, open source e hosting
Buonasera a tutti :-)
Sto tentando di creare una pagina nella quale è possibile selezionare mediante un DropDown gli ID Disponibili in database.
Mi spiego:
Per creare una stanza, piuttosto che dover controllare SE un ID nella tabella "Stanze" è già occupato o meno, e utilizzarlo SOLO se è libero, volevo mettere, al posto della textbox attuale (nella quale scrivere l'ID della nuova stanza) un dropdown menu nel quale compaiono SOLO gli ID disponibili (quindi NON presenti in database).
Qualcuno ha un'idea di come popolare le "options" di questo DropDown menu?
Grazie a tutti :-)
18/10/2012 23:32:34 e modificato da leoblacksoul il 18/10/2012 23:33:01
Non è una buona pratica quella di assegnare gli ID manualmente.
Gli ID devono venire assegnati automaticamente dalla macchina, neanche l'amministratore dovrebbe venir caricato di questo compito.
Perchè, invece di volerli mettere a mano, non imposti il campo del database con la caratteristica "AUTO_INCREMENT"? Così ci pensa il database a generare ogni volta un ID nuovo valido senza che tu gli specifichi niente.
Per fare questo, nel form devi togliere completamente la parte di inserimento dell'ID e nella query "INSERT INTO......" devi togliere la parte in cui l'ID viene assegnato. Se l'ID non viene assegnato esplicitamente allora intreviene l'AUTO_INCREMENT che genere da solo un ID
18/10/2012 23:38:47 e modificato da darkabe il 18/10/2012 23:41:25
Vediamo se riesco a dire qualcosa di vagamente corretto, altrimenti potete linciarmi, offro io le pietre aguzze 😝
Do per scontato che ci sia un limite massimo a queste "stanze", una lista infinita non è decisamente qualcosa di carino a vedersi o anche solo da pensare di visualizzare!
Tramite una query io selezionerei tutte le stanze private e scorrendo l'array analizzerei di volta in volta l'id, ripetendo lo stesso controllo che attualmente viene fatto dopo che l'utente inserisce uno specifico ID. Logicamente simile a questo:
if (StanzaOccupata)
non scrivi nulla
else
crea un nuovo punto alla dropdown
EDIT: la mia risposta presuppone una lista di stanze con id definito, qualora non vi fosse basterebbe fare come dice leoblacksoul, un auto_increment e non c'è più problema
18/10/2012 23:53:40
Allora...
l'auto increment, non è percorribile in quanto gli ID in questione non sono "tutti" ma hanno dei parametri specifici (invero: Dovrebbero essere 1) Multipli di 100 2) Maggiori o uguali di 5000 3) Minori o uguali di 7000.
Quindi gli ID "validi sono solamente:
5000
5100
5200
5300
...
7000
L'idea di selezionarli e poi di eseguire un controllo non è male, il problema è... a livello di codice, come scrivo quel controllo?
19/10/2012 00:12:05
SELECT * FROM Table WHERE MOD(IDStanza,100)=0
così dovrebbe tirarti fuori tutti gli id multipli di 100. Il verificare che siano dentro l'intervallo puoi benissimo farlo via codice o con la funzione BETWEEN di mysql
19/10/2012 00:16:23
darkabe ha scritto: SELECT * FROM Table WHERE MOD(IDStanza,100)=0
così dovrebbe tirarti fuori tutti gli id multipli di 100. Il verificare che siano dentro l'intervallo puoi benissimo farlo via codice o con la funzione BETWEEN di mysql
OK, e questa era la parte "un po' più semplice"...il problema mio è popolare il menu dropdown, ovvero, come scrivere il <option...> includendo anche il controllo sulla non esistenza di quei ID...
19/10/2012 00:26:27
<select name="stanze">
<?php
//query
while ($row=mysql_fetch_array($query))
{
if (Stanzalibera($row['IDStanza']))
{ ?>
<option value="<?php echo $row['IDStanza'] ?>"><?php echo $row['IDStanza'] ?></option>
<?php
}
}
?>
</select>
non l'ho riletto, ma grossomodo è simile
19/10/2012 00:52:39
Hmmm...
ma la condizione del if
if (Stanzalibera($row['IDStanza']))
quale sarebbe?
19/10/2012 01:00:54 e modificato da darkabe il 19/10/2012 01:02:31
È una funzione che dovresti crearti tu, e che non posso scriverti perché non ho abbastanza informazioni sulla struttura del database.
caso 1)
Se nella tua tabella c'è un campo per indicare che la stanza è libera o meno, allora basterà scrivere
if ($row['Occupata']==0) { //. . .}
o qualcosa di analogo.
caso 2)
se invece hai una tabella a parte che tiene salvate tutte le stanze occupate, ti tocca fare una seconda query dove cerchi in questa tabella la stanza. Se trovi dei risultati
if (mysql_num_row($query2)>0)
vorrà dire che è occupata
In qualsiasi caso è lo stesso codice che mi sembra di capire utilizzi attualmente per il controllo. Ora come ora gli passi un ID, lui fa i controlli e capisce se è libero o meno, no? Perfetto, qua è la stessa identica cosa ma l'id viene passato automaticamente da $row['IDStanza']. Il controllo di fondo è sempre quello..
19/10/2012 01:04:58
Ahhh OK!
Credo di aver capito.
Smanetto un po' e ti(vi) faccio sapere :-)
Grazie ^^
19/10/2012 01:19:49
niet...
O meglio, va tutto bene, ma il controllo sul "esiste, quindi non mettercela" non va...
pensavo ad una cosa del genere
<select name="ID" id="ID2">
<?php
$MySql = 'SELECT ID FROM Mappa WHERE ID>=5000 AND ID<=5300 ORDER BY ID ';
$Result = mysql_query($MySql);
// while ($rs=mysql_fetch_array($Result))
//{
if (($rs['ID']) != 5100) ?>
<option value="5100">5100</option>
<?php if (($rs['ID']) != 5200) ?>
<option value="5200">5200</option>
<?php if (($rs['ID']) != 5300) ?>
<option value="5300">5300</option>
<?php // } ?>
</select>
ma ovviamente le varie ID soddisfano tutte o la prima, o la seconda o la terza condizione... ergo le "sputa" sempre tutte.
Inoltre, dovrei scrivere dei if separati per ogni ID... ma quello poi non sarebbe un problem, si potrebbe sempre mettere un ciclo...
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Raja Dunia ↗
Exclusive Villa GdR ↗
RAID Shadow Legends ↗
Seconda Era ↗
Tibia ↗
Sea of Conquest ↗
Tiles Survive ↗
Enlisted ↗
Cafuné ↗
Foundation Galactic Frontier ↗