DropDown per ID non assegnati
19/10/2012 10:22:41
Non credo di aver capito cosa devi fare, hai definito delle stanze e devi fare questo menu per attribuire id stanza in che senso? qual'è la funzione finale che vorresti presentare all'utente (a prescindere dalla parte tecnica e sul come mi spieghi solo un attimo quale risultato finale avresti in mente così vediamo se capisco meglio cosa vuoi fare)
19/10/2012 11:46:17 e modificato da darkabe il 19/10/2012 11:50:02
Diciamo che se vuoi metterti a scrivere tutti i controlli a mano non te ne esci più..
<select name="ID" id="ID2">
<?php
$MySql = 'SELECT ID FROM Mappa WHERE ID>=5000 AND ID<=5300 ORDER BY ID ASC';
$Result = mysql_query($MySql);
/*questo ciclo continua fin quando ci sono risultati da mostrare. Se la select seleziona 30 ID, il ciclo si ripeterà 30 volte*/
while ($rs=mysql_fetch_array($Result))
{
/*passo l'id in una variabile per rendere più facile la lettura*/
$stanza=$rs['ID'];
/*con questo divido l'id per 100 e controllo il suo resto. Se il resto è 0 l'id è un multiplo di 100*/
if ($stanza%100 == 0)
{
/*se quindi l'id è "buono" lo metto nel menù*/
?>
<option value="<?php echo $stanza ?>">~<?php echo $stanza ?></option>
<?php
}
} ?>
</select>
Ho anche messo qualche commento sparso per renderlo più chiaro. Il codice che ho scritto dovrebbe funzionare perfettamente tranne per un dettaglio.. non differenzia le chat occupate da quelle libere. Se mi posti l'attuale codice di controllo e assegnamento stanza ti posso modificare l'if in modo che stampi solamente gli id liberi
PS: Un consiglio. Abituati ad usare dei nomi per la chiave primaria (o in generale per tutte le colonne) che abbiano un minimo di 3/4 caratteri. Scrivere 'ID' non è sbagliato, ma la probabilità che mysql lo legga come un operatore a parte è alta, quindi sempre meglio andare sul sicuro allungando qualche carattere ed evitandoci il rischio che da un giorno all'altro salta tutto quanto!
19/10/2012 12:42:13
quelle query ricordano molto la struttura del database di gdrcd3. Se così fosse, gli ID che ci sono nel db sono quelli delle stanze esistenti. Quindi per avere gli id delle stanze libere, bisogna prendere tutti gli ID tranne quelli restituiti dalla query.
19/10/2012 14:10:19
leoblacksoul ha scritto: quelle query ricordano molto la struttura del database di gdrcd3. Se così fosse, gli ID che ci sono nel db sono quelli delle stanze esistenti. Quindi per avere gli id delle stanze libere, bisogna prendere tutti gli ID tranne quelli restituiti dalla query.
Ma nel GDRCD 3.0 però non c'era la tabella "albergo" per fare le chat private o ricordo male?
19/10/2012 15:03:24
Credo di si. Ma non so se stiamo parlando di alberghi
19/10/2012 15:22:42 e modificato da sgc carter il 19/10/2012 15:23:44
Intanto grazie mille a dark, per "lo sbattimento" di scrivere il codice...
Poi, quello che dici sul nome dei campi (ID et simili) mi sembra abbastanza logico e corretto...quindi sicuramente in futuro vedrò di ricordarmelo).
Inoltre ha ragione leo, la struttura è quella di GdRCD :-)
Però non parliamo di alberghi/stanze private... Si tratta di un progetto che si allontana un po' (un bel po') da quello che era GdRCD ;-)
19/10/2012 15:29:40
sgc carter ha scritto: Poi, quello che dici sul nome dei campi (ID et simili) mi sembra abbastanza logico e corretto...quindi sicuramente in futuro vedrò di ricordarmelo).
Figurati, parlo per esperienza personale xD Mi sono ritrovato a metter mano ad un database dove il campo "Moderatori" è stato genialmente chiamato "MOD", e se ricordi quanto ti ho scritto due o tre post sopra.. MOD (scritto anche %) è un operatore a tutti gli effetti. Ci ho perso una settimana per accorgermi che non era un problema di codice php xD
Piccole esperienze a parte, non ho ancora capito come vengono differenziate le chat occupate da quelle libere! C'è un campo creato appositamente? Oppure è una tabella che racchiude solo gli id occupati? Se mi fai capire bene come è impostato potrei sistemare quell'abbozzo di codice che ho scritto prima. Se non ti crea difficoltà potresti anche postare l'attuale codice per intero, almeno mi faccio un'idea specifica di come lavora
19/10/2012 15:33:11
leoblacksoul ha scritto: quelle query ricordano molto la struttura del database di gdrcd3. Se così fosse, gli ID che ci sono nel db sono quelli delle stanze esistenti. Quindi per avere gli id delle stanze libere, bisogna prendere tutti gli ID tranne quelli restituiti dalla query.
Sni, perché la query restituisce tutti i multipli di 100 da 5000 in poi, SE le ID sono occupate.
Prendendo quelle che NON restituisce prenderei i valori NON multipli di 100 ergo 5001,5002,5003... e non gli ID 5100,5200,5300 liberi (non presenti in DB).
In definitiva, forse mi sono espresso male.
In DB c'è la tabella Mappe.
Una colonna di questa tabella è chiamata ID.
Ogni volta che si crea una stanza si crea una nuova riga con ID "unico" (ID è anche chiave primaria della tabella).
Trovare quindi gli ID, che rientrano nell'intervallo, e che sono presenti e che sono multipli di 100, ok...il codice di darkabe è perfetto...
"Trovare" gli ID che non sono presenti, è più difficile.
Certo, ora che ci penso, potrei:
- Creare quelle ID "manualmente" (parliamo di inserire 20 stanze in DB).
- Aggiungere il campo "libera" alla tabella con default =0.
- Aggiungere all'IF la condizione che libera debba essere (ad esempio) 0.
- Modificare la query di inserimento per fare un UPDATE delle variabili contenute nella riga ID richiesta piuttosto che un SET (visto che non dovrei creare una nuova riga ma sovrascrivere quelle esistenti).
E' un po' macchinoso, anche se semplice... Però mi sembra strano che non si possa scrivere una query che restituisce degli ID non presenti...
19/10/2012 15:51:23
La soluzione è molto più facile di quanto non sembri, l'avevo appunto accennata prima
<select name="ID" id="ID2">
<?php
$min=5000;
$max=7000;
while ($min<=$max)
{
$stanza=$min;
$MySql = 'SELECT * FROM Mappa WHERE ID=$stanza';
$Result = mysql_query($MySql);
if (mysql_num_rows($Result)==0)
{
?>
<option value="<?php echo $stanza ?>">~<?php echo $stanza ?></option>
<?php
}
$min=$min+100;
} ?>
</select>
Ti basta solo impostare il range di numeri che preferisci a $min ed $max. Lui prende il primo numero, controlla dentro la tabella se c'è (se i risultati di mysql_num_row sono maggiori di 0 significa che l'ha trovato), se non lo trova significa che la stanza è libera, quindi la inserisce in elenco.
Prima di ricominciare il ciclo aggiunge 100, così scatta solo a multipli di 100 e non tocca gli altri numeri
19/10/2012 15:57:30
Quasi...
mi sputa sì tutti i 5000,5100,5200...ma non differenzia SE sono rpesenti o meno in DB...li mette tutti e amen...:-(
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
AlterEgo ↗
Neverness to Everness ↗
Seconda Era ↗
Imperion ↗
Fallen Gods ↗
War Thunder ↗
CRSED: F.O.A.D. ↗
State of Survival ↗