Dropdown menu
Dropdown menu postato il 04/07/2013 18:57:41 nel forum programmazione, open source e hosting
Buonasera a tutti.
Domanda, credo, semplice semplice (per voi, credo ^^):
Avendo un form di questo tipo:
<form action="gst_navi.php" method=Post>
<input type="text" name="Icona" maxlength="50" value="<?= htmlspecialchars($Icona) ?>" style="width:100px; font-size:11px; ">
<input type=submit value="OK">
</form>
volendolo trasformare in un form con una tendina a scelta, con 2 opzioni,
"Sì" e "No"
per intenderci.
Come dovrei fare?
Nota: Il Valore che viene visualizzato all'apertura dell pagina in questione richiama il valore attualmente salvato in DB e la query che legge/aggiorna la variabile è:
$Icona = $_POST['Icona'];
if ($Icona!='') {
$MySql = "UPDATE Unita SET Icona = '$Icona' WHERE Numero = '336'";
mysql_query($MySql);
}
$MySql = "SELECT * FROM Unita WHERE Numero = '336'";
$Result = mysql_query($MySql);
$rs = mysql_fetch_array($Result);
$Icona = $rs['Icona'];
$rs->close;
mysql_free_result($Result);
Grazie a tutti :-)
Pagine → 1
04/07/2013 22:00:31
<select name="siNoSelect">
<option value="1" selected>No</option>
<option value="2">Si</option>
</select>
Spesso le cose più semplici sono esattamente quello che serve.. anche perché non ho capito a che ti serve il Si/No in quel form
04/07/2013 22:11:06 e modificato da sgc carter il 04/07/2013 22:11:43
Sì ma così... la prima opzione (quella selezionata all'apertura della pagina) non è quella che richiama dal database e soprattutto non valorizza la variabile $Icona...
Scrivere il menù, OK, il problema è integrarlo con il DB.
Cmq, non mi serve il Sì no, in realtà mi servono 8 opzioni, ovvero un menù che si presenta così:
<select name="Orientamento">
<option value="D1">Nord</option>
<option value="D2">Nord-Est</option>
<option value="D3">Est</option>
<option value="D4">Sud-Est</option>
<option value="D5">Sud</option>
<option value="D6">Sud-Ovest</option>
<option value="D7">Ovest</option>
<option value="D8">Nord-Ovest</option>
</select>
E la variabile "$Icona" dovrebbe quindi essere valorizzata con D1.....D8 a seconda dell'opzione scelta.
Il tutto serve a scrivere in DB la disposizione della nave in un piano :-)
Quando il master apre poi la pagina di gestione dovrebbe vedere:
Es. direzione: "Est" se in DB Icona vale "D3"...
04/07/2013 22:22:05
Risolto XD
In effetti non era difficile, cmq ecco la soluzione che, credo, funzioni
<form action="gst_navi.php" method=Post>
<select name="Icona2">
<option value="<?= $Icona2 ?>"><?= $Icona2 ?></option>
<option value="D1">Nord</option>
<option value="D2">Nord-Est</option>
<option value="D3">Est</option>
<option value="D4">Sud-Est</option>
<option value="D5">Sud</option>
<option value="D6">Sud-Ovest</option>
<option value="D7">Ovest</option>
<option value="D8">Nord-Ovest</option>
</select>
<input type=submit value="Ruota Nave 2">
</form>
Grazie a tuttAbe XD ^^
04/07/2013 22:26:52 e modificato da darkabe il 04/07/2013 22:31:29
Forse mi sto perdendo qualche passo, ma con
<form action="gst_navi.php" method=Post>
passi il form a gst_navi.php.
Quindi non basta fare, sulla pagina gst_navi.php
$scelta=$_POST['Orientamento'];
//update sul db passando $scelta, che quindi sarà D1/D2/D3/D4 etc..
EDIT: visto ora che avevi risolto xD
Comunque se vuoi che la select sia impostata su uno in particolare dei suoi valori, potresti usare il .val() di jquery
$("#id_della_select").val(idCampo);
dove per idCampo gli passi il value, quindi nel tuo esempio di select, facendo $("#id_della_select").val("D3"); dovrebbe posizionarsi direttamente sul terzo elemento, quindi con .val(<?php echo $ultimovalore ?>) dovrebbe andare all'ultimo valore ricevuto. Sempre che quella query che fai restituisca il valore
05/07/2013 00:35:28 e modificato da yamada il 05/07/2013 00:39:19
mi piace.... 🙃
mi chiedo cosa succede se a $Icona passo mmm 😏
'JOIN (DROP TABLE nome_tabella)";//
??
risposta: succede la magia alla query!!
$MySql = "UPDATE Unita SET Icona = ''JOIN (DROP TABLE nome_tabella)";// WHERE Numero = '336'";
addio alla tabella nome_tabella
😆 e andiamo!!! 😆
edit: a gia scusate... dimenticavo che oltre alla tabella del database anche tutti i campi 'Icona' della tabella 'Unita' vanno a NULL.. giusto per precisione 🙃🙃
05/07/2013 01:04:16
yamada ha scritto:
$MySql = "UPDATE Unita SET Icona = ''JOIN (DROP TABLE nome_tabella)";// WHERE Numero = '336'";
La dimostrazione è errata in quanto il blocco di php è già interpretato al momento del passaggio dei dati e quindi non sarà mai possibile che venga modificato come nel caso d'esempio di yamada ma il concetto è giusto, si, dal momento che ti possono iniettare codice malevolo e modificarti la struttura della query che viene spedita a mysql se non fai un minimo escape dei valori non desiderati.
Vecchio mio, dai un occhio a funzioni come filter_var() (http://www.php.net/filter_var) e dovresti tirarti fuori dai pasticci ^_*
05/07/2013 03:06:01
Domanda stupida ma come si può passare a $Icona un valore diverso da quello delle option del dropdown menu?
05/07/2013 11:28:44 e modificato da dyrr il 05/07/2013 11:50:29
E' possibile in diversi modi che non credo sia il caso di spiegare qui, ma che se vuoi ti posso dire in privato cosi puoi controllare se per caso altre query derivanti da form sono sicuri o meno.
L'iniettabilità di quella query dipende anche da se il server su cui è hostata la lang ha attiva e la maggior parte dei server per default la ha, la direggtiva magic_quotes_cpg che fa l'aescape in automatico dei caratteri.
Direttiva considerata deprecata però in php 5.3 o superiori e se non ricordo male rimossa in 6.4 per cui attenzione a far riferimento per la sicurezza dei dati inviati dai form solo a quella.
sarebbe sempre il caso comunque di usare un mysql_real_escape_string() o equivalenti su tutte le query che comportino l'inserimento di variabili che possono esser ein qualche modo manipolate, o se si è paranoici su tutte le variabili.
Se non si è sicuri se pma dell'arrivo alla query la variabile abbia gia avuto l'escape dei caratteri onde evitare doppi o anche supeirori backslash può essere un buon metodo crearsi una funzione customizzata che rimuova tutti i backslash e poi gli aggiunga, come se non ricordo male fanno la maggiorparte delle funzioni di filtro del gdrcd 5.x per fare un esempio
Nel tuo caso visto che i valori possibili previsti dal form sono solo 8 potrebbe essere una buona cosa controllare che il valore inserito sia esclusivamente uno dei valori possibili, in maniera che qualcuno, anche s eil danno è minimo non possa inserire tipo un D11 come valore se i valori possibili sono D1,D2,D3,D4,D5,D6,D7,D8.
per questi scopi vengono molto utili le funzioni di filtraggio dati di php filter_var http://php.net/manual/en/function.filter-var.php ↗ che per esempio nel tuo caso con una semplice regex, sperando di non aver fatto errori di intassi visto che non ho avuto modo di testare il codice, può farti il controllo e in caso di input non valido correggere l'input ad uno si default.
$options = array (
'options' => array (
'default' => 'D1',
'regexp'=>'#^D([1-8]){1}$#',
)
);
$$Icona = filter_var($_POST['Icona'],FILTER_VALIDATE_REGEXP,$options);
in questo caso la regexp ^D([1-8]){1}$ controlla che $_POST['Icona'] inizi per D e sia seguita da un singolo numero da 1 a 8 e nel caso non trovi valito l'input lo imposta di default a D1 impedendo sostanzialmente qualsiasi valore diverso da quelli che ci si aspetterebbe.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
AlterEgo ↗
Fallen Gods ↗
Hero Wars ↗
Imperion ↗
World of Warship ↗
World of Tanks ↗
Wuthering Waves ↗
State of Survival ↗