- Home
- Categorie
- Coding e Sistemistica
- HTML e CSS
- Problema: non riesco a mettere in ordine i mesi in una select
-
Problema: non riesco a mettere in ordine i mesi in una select
Salve a tutti,
ho ils eguente problema. Ho una select denominata mesi dove all'interno vanno ovviamente i mesi da gennaio a dicembre. Ora il punto è questo: ho copiato uno spezzone di codice visto che l'ho trovato bellche fatto e l'ho applicato. ma i mesi non sono in ordine. Come si mette in ordine in una select ???? Posto l'esempio così chi ha qualche idea mi può dare un suggerimento. Ovviamente ho pravoto anche con i numeri ma mi sembra un tantino brutto visto che i giorni sono fatti di numeri e i mesi con le parole (lo trovo più elegante). Questo è lo spezzone:
[PHP]
<?php
//Mese
echo"<select name="mesi">";
echo "<option value=""> mese </option>";
echo "<option value=""> </option>";$mesi = array (
"0" => "Gennaio",
"1" => "Febbbraio",
"2" => "Marzo",
"3" => "Aprile",
"4" => "Maggio",
"5" => "Giugno",
"6" => "Luglio",
"7" => "Agosto",
"8" => "Settembre",
"9" => "Ottobre",
"10" => "Novembre",
"11" => "Dicembre"
);
$mese=$mesi[date('n')-1];
$chiave=array_search($mese,$mesi);
$a=0;
while($a<12){echo"<option value="$chiave">$mesi[$chiave]</option>";
$chiave++;
$a++;
if($chiave==12){$chiave=0;}
}
echo"</select>";echo "</select>";
?>
[/PHP]Se ne avete un'altro migliore ovviamente ben venga. grazie della collaborazione.
-
Volendo stampare ordinatamente i mesi dell'anno (da Gennaio a Dicembre) riprendendo fedelmente quel codice la versione corretta sarebbe questa:
[PHP]<?php
//Mese
echo"<select name="mesi">";
echo "<option value=""> mese </option>";
echo "<option value=""> </option>";$mesi = array (
"0" => "Gennaio",
"1" => "Febbbraio",
"2" => "Marzo",
"3" => "Aprile",
"4" => "Maggio",
"5" => "Giugno",
"6" => "Luglio",
"7" => "Agosto",
"8" => "Settembre",
"9" => "Ottobre",
"10" => "Novembre",
"11" => "Dicembre"
);
$mese=$mesi[date('n')-1];
$chiave=array_search($mese,$mesi);
$a=0;
while($a<12){echo"<option value="$a">$mesi[$a]</option>";
$chiave++;
$a++;
if($chiave==12){$chiave=0;}
}
echo"</select>";echo "</select>";
?>[/PHP]Spero che sia utile.
-
Ciao MenteLibera,
Che modifica hai apportato rispetto all'originale ??? E poi pensandoci stanotte per noi i mese non iniziano a conteggiare da 1 a 12 o sbaglio ??? Invece nell'array inizia da 0 come mese che corrisponde a gennaio
-
Ponendo come prima riga di entrambi i codici quella contenente "<?php" l'unica differenza sta nella #29. Il codice originario era:
[PHP]echo"<option value="$chiave">$mesi[$chiave]</option>";[/PHP]
Con la mia modifica è diventato questo:
[PHP]echo"<option value="$a">$mesi[$a]</option>";[/PHP]
Per come è impostato il codice originale il primo elemento ha indice del mese zero, e letto così sembrerebbe che la data verrà passata ad uno JavaScript avendo già coerente.
-
Ciao,
Innanzi tutto ti ringrazio dell'aiuto. da solo non ci sarei mai riuscito. Secondo poi vorrei capire una cosa. Il codice che ho postato e preso dall'esempio di cui non ricordo, non smebrerebbe associato a nessun javascript. Quindi io potrei modificare i mesi partendo da 1 fino a 12 ossia così:
originariamente:
[PHP]
$mesi = array (
"0" => "Gennaio",
"1" => "Febbbraio",
"2" => "Marzo",
"3" => "Aprile",
"4" => "Maggio",
"5" => "Giugno",
"6" => "Luglio",
"7" => "Agosto",
"8" => "Settembre",
"9" => "Ottobre",
"10" => "Novembre",
"11" => "Dicembre"
);
[/PHP]modificato da me:
[PHP]
$mesi = array (
"1" => "Gennaio",
"2" => "Febbbraio",
"3" => "Marzo",
"4" => "Aprile",
"5" => "Maggio",
"6" => "Giugno",
"7" => "Luglio",
"8" => "Agosto",
"9" => "Settembre",
"10" => "Ottobre",
"11" => "Novembre",
"12" => "Dicembre"
);
[/PHP]Sbaglio ??? Non dovrebb cambiare assolutamente niente solo che è più ordinato all'italiana.
-
Ciao,
Allora ho modificato un paio di cose. Solo che non mi visualizza l'ultimo mese ossia dicembre. Questo è l'intero codice:
[PHP]
//Mese
echo"<select name="mesi">";
echo "<option value=""> mese </option>";
echo "<option value=""> </option>";$mesi = array (
"1" => "Gennaio", <--- Modificato da 0 sono passato a 1 direttamente
"2" => "Febbbraio",
"3" => "Marzo",
"4" => "Aprile",
"5" => "Maggio",
"6" => "Giugno",
"7" => "Luglio",
"8" => "Agosto",
"9" => "Settembre",
"10" => "Ottobre",
"11" => "Novembre",
"12" => "Dicembre"
);
$mese=$mesi[date('n')-1];
$chiave=array_search($mese,$mesi);
$a=1; <--- Modificato da 0 a 1 mi dava due spazi tra il mese e i nomi
while($a<12){echo"<option value="$a">$mesi[$a]</option>";
$chiave++;
$a++;
if($chiave==12){$chiave=0;}
}
echo"</select>";echo "</select>";
[/PHP]
Sicuramente c'è un'altra soluzione e poi ti volevo chiedere, è possibile tirare un rigra per distanziare tra mese e l'inigio del nome dei mesi ossia dovrebbe apparire una cosa del genere:
mese
Gennnaio
Febbraio
Marzoecc... ecc...
Attendo tue notizie grazie.
Allora ho risolto in un modo molto spartano. Ossia ho aumentato di uno questo while
originariamente era:[PHP]
while($a<12){
[/PHP]
Per visualizzare il mese di dicembre mancante l'ho portato a 1
[PHP]
while($a<13){
[/PHP]
Così ho risolto anche se non sicuramente bello però si vedono tutti i mesi. Mi rimane solo come stendere una riga come ti dicevo. grazie
-
Quello che hai fatto è una delle tante alternative possibili. La mia raccomandazione è quella di studiare bene gli array in PHP essendo uno degli argomenti principali del linguaggio. Una prima giuda base della casa la trovi qui: giorgiotave.it/guide-webmaster/php/array/
In Rete troverai altre guide più avanzate...Per il controllo del while questo è equivalente:
[PHP]while($a<=12){[/PHP]
Inoltre l'indice dovrà partire da 1.
--
Meno male che ho ricaricato la pagina prima di risponderti perché altrimenti avevi le osservazioni di qualche post sopra [/OT]
-
Ciao MenteLibera,
Beato te che hai la mente libera ehehehe Battute a parte. Il while che ho modificato io non va bene ??? Considera che il conteggio inizia da 1 per arrivare a 12 e di conseguenza non so il perchè il dodicesimo mese non si vede mettendo <12. Non capisco una cosa perdonami questa che hai scritto:
Per il controllo del while questo è equivalente:
while($a<=12){
Difatti l'array inizia come dicevo prima da 1 per arrivare a 12 (dicembre): per quanto riguarda la riga in mezzo è fattibile ????
-
Ciao MenteLibera,
Ti vorrei chiedere un'altra cortesia. Ho sviluppato un modulo d'scrizione che poi dovrei convalidare mentre uno digita lo username e l'email gli dovrebbe dire se è libero o meno. Questao è la pagina che ho sviluppato da zero.
iscrizone.php
[PHP]
<html>
<head>
<meta charset="UTF-8">
<script src='qua c'è il link di richiamo per jquery.min.js'></script>
<script src="qua c'è il link di richiamo per jquery.min.js"></script>
<title>Modulo Iscrizione</title>
</head><body> <div align="center">
<div style='font-family: Comic Sans MS; font-size: 20px'>
BENVENUTI NEL MODULO D'ISCRIZIONE
<hr />
</div></div> <form action="checkdate.php" method="POST"> Cognome: <input type ="text" id="cogonome" name="cognome" > <p> <p> Nome: <input type ="text" id="nome" name="nome" > </p></p> <?php
echo "<p> <p>";
echo "Data di nascita nel seguente formato (gg/mm/aaaa): ";// Inizio Selezione data di nascita
//Giorno
echo "<select name='giorno' id='giorno'>";
echo "<option value=""> giorno </option>";
echo "<option value=""> </option>";for($gg=1; $gg<=31; $gg++){
if(strlen($gg)< 2){$gg = "0".$gg;}
echo "<option value="$gg"> $gg </option>";
}
echo "</select>";//Mese
echo"<select name='mesi' id='mese'>";
echo "<option value=""> mese </option>";
echo "<option value=""> </option>";$mesi = array (
"1" => "Gennaio",
"2" => "Febbbraio",
"3" => "Marzo",
"4" => "Aprile",
"5" => "Maggio",
"6" => "Giugno",
"7" => "Luglio",
"8" => "Agosto",
"9" => "Settembre",
"10" => "Ottobre",
"11" => "Novembre",
"12" => "Dicembre",
);
$mese=$mesi[date('n')-1];
$chiave=array_search($mese,$mesi);
$a=1;
while($a<13){echo"<option value="$a">$mesi[$a]</option>";
$chiave++;
$a++;
if($chiave==13){$chiave=0;}
}
echo"</select>";echo "</select>";
//Anno
$da=1950;
$al=2014;
echo "<select name='anno' id='anno'>";
echo "<option value=""> anno </option>";
echo "<option value=""> </option>";
for($aa=$da; $aa<=$al; $aa++){
echo "<option value="$aa"> $aa </option>";
}
echo "</select>" ;?>
<p> <p>
Username: <input type ="text" id="username" name="username" >
</p></p>
<p> <p>
Email: <input type ="text" id="email" name="email" >
</p></p><p> <p> Rip-Email: <input type ="text" id="ripemail" name="ripemail" > </p></p> <p> <p> Password: <input type ="password" id="password" name="password" > </p></p> <p> <p> Ri-Password: <input type ="password" id="ripassw" name="ripassw" > </p></p
<input type="checkbox" name="privacy" value="1" onclick="unlock(this, 'btn1')" /> Spuntare per accettare i <a href="c'è il link per regolamentoprivacy.php">termi di regolamento e la privacy. </a>
</form>
<div style ="text-align: center">
<input type="submit" name="Submit" style ="font-family: 'Comic Sans MS'; font-size:25px" id="btn1" value="Invia dati" disabled="disabled">
</div><?php require_once("connetymysqli"); ?> </body>
</html>
[/PHP]
Mi poptresti vedere se ci sono errori o da modificare per favore ??? Grazie.
-
Ciao MenteLibera,
Scusami ma devo chiedere dei chiarmenti. Adoperando la connesssione mysqli devo fare un insert into con la data. Ora volevo sapere la data a parte come viene visualizzata nel modulo di registrazione con tre select diversi per giorn/mese/aaaa, viene memorizzata in un campo unico data presumo. Se si, come dve essere il campo data nel db ???? E un altra cosa, è possibile avere un esempio di insert into con la nuva estensione mysqli ??? Grazie.
-
Il ciclo while è eseguito finché è vera la condizione nel suo argomento, pertanto nel caso che dici per l'ultima iterazione sarebbe:
[PHP]while(12<12)[/PHP]
Noterai che il predicato è falso quindi non viene eseguito, ed infatti tu per farlo tornare ricorrevi all'elemento successivo l'ultimo. Invece come lo suggerivo l'ultimo caso che è:
[PHP]while(12<=12)[/PHP]
In questo caso il predicato essendo vero (è soddisfatta l'uguaglianza) il ciclo viene eseguito, ma quando passa all'elemento successivo non è più soddisfatto il predicato (13<=12).
(Su questo argomento mi pare di essere tornato ai bei vecchi tempi del Liceo e se avessi la liberatoria menzionerei i docenti che mi insegnarono l'informatica per riconoscere il loro credits.)
Ultimo punto che posso seguire è sulla richiesta di trattini anziché l'elemento vuoto. Sostituisci la riga:
[PHP]echo "<option value=""> </option>";[/PHP]
con quest'altra:
[PHP]echo "<option value="">-------</option>";[/PHP]
Devo ripetermi, ma come ultimo consiglio studia gli array a cominciare dal link che ho postato precedentemente. Quando avrai assimilato i contenuti capirai alcune cose interessanti sugli array che permetteranno di scrivere un codice migliore.
Buon lavoro.
-
Ciao MenteLibera,
Grazie delle spiegazioni. Quando ritornerò a Roma mki studio il link ch emi hai dato . Cavolo spieghi veramente bene. Ti posso chiueder eun altro aiuto ??? Su un modulo ????