menù a tendina con option variabili

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
ciao a tutti vorrei capire dove stò sbagliando, vorrei creare un form per inserire in un database due valori(num e net) sono riuscito a scrivere il codice che vi riporto di seguito , funziona finchè le opzioni del menù a tendina sono quelle che vanno dalla 1 alla 3 se seleziono l'opzione 0 nel db il campo net risulta vuoto , probabilmente sbaglio qualcosa nel passare il valore all'interno del menù a tendina?
PHP:
<?php
if($_POST) {
	inserisci_record();
}
else {
	mostra_form();
}

function inserisci_record()
{
// richiamo il file di configurazione
require 'config_mnp.php';

// richiamo lo script responsabile della connessione a MySQL
require 'connect_mnp.php';

// recupero i campi di tipo "stringa"
	$num      = trim($_POST['numero']);
	$net      = trim($_POST['tipologia']);
	$dev      = trim($_POST['dev']);
	
// verifico la presenza dei campi obbligatori
	if(!$num)
	{
	     echo  'Pirla non hai inserito il numero!!! <br /><br />';

         print( '<a href="http://../phones_mnp_insert.php">Go Back</a>' );
	exit;
	}
	
	

// preparo la query
$query = "INSERT INTO `mnp` ( `num`,`net` ) VALUES ('$num','$net') ON DUPLICATE KEY UPDATE `net` = '$net'";

// lancio la query
$result = mysql_query($query);

// controllo l'esito
if (!$result) {
	die("Errore nella query $query: " . mysql_error());
}

// chiudo la connessione a MySQL
mysql_close();

echo  '     Inserimento effettuato con successo <br /><br />';

print( '<a href="http://../phones_mnp_insert.php">Go Back</a>' );



}

function mostra_form()
{
	// mostro un eventuale messaggio
	if(isset($_GET['msg']))
		echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
	?>
	<form name="form_registrazione" method="post" action="">
	  <label>Numero====
	  <input name="numero" type="text" />
	  </label>
	  (obbligatorio ) <br /> <br />	  
	 
	 	  <p>
	    <label>Tipologia===
	    <select name="tipologia">
		  <option value="<? echo $dev;?>">opzione0</option>
	      <option value="1">opzione1</option>
	      <option value="2">opzione2</option>
	      <option value="3">opzione3</option>
		  	     </select>
	    </label>  
	  </p> <br />	
	    <label>Deviare verso
	  <input name="dev" type="text" />
	  </label>
	  (inserire in formato numero)
	  <p>
	    <input name="inserisci" type="submit" value="Inserisci" />
	  </p>
	   
	</form>
	<a href="http://../phones_mnp_search.php">Vai alla pagina di ricerca</a>
	<?php
}
?>
grazie mille a chiunque riesca ad aiutarmi
 
Ultima modifica di un moderatore:
22 Gen 2013
26
0
0
ciao a tutti vorrei capire dove stò sbagliando, vorrei creare un form per inserire in un database due valori(num e net) sono riuscito a scrivere il codice che vi riporto di seguito , funziona finchè le opzioni del menù a tendina sono quelle che vanno dalla 1 alla 3 se seleziono l'opzione 0 nel db il campo net risulta vuoto , probabilmente sbaglio qualcosa nel passare il valore all'interno del menù a tendina?

<?php
if($_POST) {
inserisci_record();
}
else {
mostra_form();
}

function inserisci_record()
{
// richiamo il file di configurazione
require 'config_mnp.php';

// richiamo lo script responsabile della connessione a MySQL
require 'connect_mnp.php';

// recupero i campi di tipo "stringa"
$num = trim($_POST['numero']);
$net = trim($_POST['tipologia']);
$dev = trim($_POST['dev']);

// verifico la presenza dei campi obbligatori
if(!$num)
{
echo 'Pirla non hai inserito il numero!!! <br /><br />';

print( '<a href="http://../phones_mnp_insert.php">Go Back</a>' );
exit;
}



// preparo la query
$query = "INSERT INTO `mnp` ( `num`,`net` ) VALUES ('$num','$net') ON DUPLICATE KEY UPDATE `net` = '$net'";

// lancio la query
$result = mysql_query($query);

// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}

// chiudo la connessione a MySQL
mysql_close();

echo ' Inserimento effettuato con successo <br /><br />';

print( '<a href="http://../phones_mnp_insert.php">Go Back</a>' );



}

function mostra_form()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
?>
<form name="form_registrazione" method="post" action="">
<label>Numero====
<input name="numero" type="text" />
</label>
(obbligatorio ) <br /> <br />

<p>
<label>Tipologia===
<select name="tipologia">
<option value="<? echo $dev;?>">opzione0</option>
<option value="1">opzione1</option>
<option value="2">opzione2</option>
<option value="3">opzione3</option>
</select>
</label>
</p> <br />
<label>Deviare verso
<input name="dev" type="text" />
</label>
(inserire in formato numero)
<p>
<input name="inserisci" type="submit" value="Inserisci" />
</p>

</form>
<a href="http://../phones_mnp_search.php">Vai alla pagina di ricerca</a>
<?php
}
?>

grazie mille a chiunque riesca ad aiutarmi

Semplicemente stai provando ad utilizzare il php come fosse javascript. Spiegando meglio il Php è un linguaggio server side, quindi quando tu carichi la pagina <? echo $dev;?> è nullo, perchè è quello che viene eseguito ad inizio pagina che rileva lo script, perciò risulta nullo appunto nel $_POST
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
funziona finchè le opzioni del menù a tendina sono quelle che vanno dalla 1 alla 3 se seleziono l'opzione 0 nel db il campo net risulta vuoto , probabilmente sbaglio qualcosa nel passare il valore all'interno del menù a tendina?
Si. La variabile $dev non è settata da nessuna parte.
Potresti dire che è settata prendendo il valore $_POST['dev'] sopra ma quello viene eseguito solo dopo il submit del form.
Prima del submit quella variabile non ha alcun valore.
Tipologia vuoi che sia un campo obbligatorio?
L'utente può scegliere una tipologia data nelle select oppure (se non gli vanno bene quelle) specificarne una propria?
 

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
Innanzitutto grazie per le risposte
ciò che vorrei ottenere è : se nel menù a tendina è selezionata l'opzione 0 il valore da attribuire deve essere immesso manualmente nella finestra con la label "Deviare verso" , mentre se l'opzione va da 1 a 3 il valore è preimpostato nel campo Value del menù a tendina

spero di essermi spiegato

grazie
 

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
"L'utente può scegliere una tipologia data nelle select oppure (se non gli vanno bene quelle) specificarne una propria? "


anche come dici tu qui sopra andrebbe bene

grazie ancora
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Va bene allora é più semplice di quanto pensi.
Sostituisci questa riga:
PHP:
<option value="<? echo $dev;?>">opzione0</option>
Con questa:
PHP:
<option value="0">opzione0</option>
Poi sostituisci ancora l'assegnamento del valore alla variabile $net con questo:
PHP:
$net = trim($_POST['tipologia'])==0 ? $_POST['tipologia'] : $_POST['dev'];
Puoi anche eliminare la riga dove viene definito il valore $dev.
 

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
grazie , lho fatto però mi inserisce comunque il valore 0 come impostato nel menù a tendina
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Si esatto ho commesso un errorino. Sostituisci == con != nel'ultima riga di codice pubblicata nel messaggio precedente.
 

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
grazie mille adesso funziona se l'opzione è 0 , mentre se scelgo una delle altre 3 non mi inserisce nulla

se riesci bene altrimenti lascia stare , non voglio abusare della tua pazienza

grazie ancora
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
intanto togli i batik dalla query
PHP:
$query = "INSERT INTO `mnp` ( `num`,`net` ) VALUES ('$num','$net') ON DUPLICATE KEY UPDATE `net` = '$net'";
così
PHP:
$query = "INSERT INTO mnp ( num, net) VALUES ('$num','$net') ON DUPLICATE KEY UPDATE net= '$net'";

poi domande:
num è una primary key o una unique key?
num e net sono numeri interi o float? se sono interi ti conviene anche togliere gli apici a $num e $net
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
io farei così (prova) anche perche le funzioni hanno un senso se devi riutilizzare diverse volte
altrimenti trasformalo in funzioni
PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Documento senza titolo</title>
</head>
<body>
<?php
if(isset($_POST['inserisci'])){
	//recupero i campi di tipo "stringa"
	$num = trim($_POST['numero']);
	$net = trim($_POST['tipologia']);
	$dev = trim($_POST['dev']);
	if(!preg_match("/^[0-9]{4,12}$/",$num)){//a te vedere quale deve essere la lunghezza minima e massima
		echo "Pirla non hai inserito il numero o non corretto!!!<br /><br />";
		//e torni al form ripulito dopo 3 secondi
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{//il numero è giusto
		//da quello che ho capito o uno seleziona qualcosa nella select tipologia o scrive nel campo dev, giusto?
		if($net=="" && $dev ==""){
			echo "Pirla non hai selezionato la tipologia e non hai scritto una alternativa!!!<br /><br />";
			//e torni al form ripulito dopo 3 secondi
			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		}elseif($net!="" && $dev ==""){//l'utente ha selezioanato una tipologia non prendo in considerazione se ha scritto qualcosa
			$inserire=$net;
		}else{
			if(!preg_match("/^[0-9]{4,12}$/",$dev)){//ha scritto una cazzata
				echo "Pirla l'alternativa non è un numero!!!<br /><br />";
				//e torni al form ripulito dopo 3 secondi
				echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
			}else{
				$inserire=$dev;
			}
			//qui puoi mettere i dati di connessione
			//poi abbandona mysql e passa a mysqli o meglio alle pdo
			// preparo la query
			$query = "INSERT INTO mnp ( num, net ) VALUES ('$num','$inserire') ON DUPLICATE KEY UPDATE net = '$inserire'";
			if(mysql_query($query)){
				echo "inserimento/aggiornamento OK<br /><br />";
				//e rimandi dove vuoi (ho messo  phones_mnp_insert.php ma basta che tu cambi l'url) dopo 3 secondi 
				echo "<meta http-equiv='Refresh' content='3; URL=phones_mnp_insert.php'>";
			}else{
				echo "c'è stato un errore nel database, riprova più tardi<br /><br />";
				//e rimandi dove vuoi dopo 3 secondi 
				echo "<meta http-equiv='Refresh' content='3; URL=phones_mnp_insert.php'>";
			}
		}
	}
}else{
?>
<form name="form_registrazione" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
	<table width="50%"  border="0" cellspacing="0" cellpadding="3">
	<tr>
	<td width="12%">Numero====</td>
	<td width="17%"><input name="numero" type="text" /></td>
	<td width="71%">(obbligatorio )</td>
	</tr>
	<tr>
	<td>Tipologia===</td>
	<td>
	<select name="tipologia">
		<option value="">opzione0</option>
		<option value="1">opzione1</option>
		<option value="2">opzione2</option>
		<option value="3">opzione3</option>
	</select>
	</td>
	<td>&nbsp;</td>
	</tr>
	<tr>
	<td>Deviare verso</td>
	<td><input name="dev" type="text" /></td>
	<td>(inserire in formato numero)</td>
	</tr>
	<tr>
	<td>&nbsp;</td>
	<td>&nbsp;</td>
	<td><input name="inserisci" type="submit" value="Inserisci" /></td>
	</tr>
</table>       
</form>
<a href="http://../phones_mnp_search.php">Vai alla pagina di ricerca</a>
<?php
}
?>
</body>
</html>
guarda che non messo il get
 

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
fatto ma funziona allo stesso modo (ho fatto altre prove e mi inserisce solo ciò che metto come valore nella casella "deviare verso", indipendenetemente dalla selezione fatta nel menù a tendina) non è che è sbagliato qualcosa nella seguente riga?, mi spieghi cosa significa per cortesia?


Codice php:
$net = trim($_POST['tipologia'])!=0 ? $_POST['tipologia'] : $_POST['dev'];



risposte:
num è primary key

dovrebbero essere float

grazie ancora
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
è una sintassi abbreviata
PHP:
$net = trim($_POST['tipologia'])!=0 ? $_POST['tipologia'] : $_POST['dev'];
corrisponde a
PHP:
if(trim($_POST['tipologia'])!=0){
	$net = trim($_POST['tipologia'])
}else{
	$net =$_POST['dev'];
}
che io preferisco in quanto più leggibile
comunque devi fare delle verifiche su quanto ti inseriscono (vedi il controllo con preg_match che ho fatto per numeri interi, se sono float bisogna modificare il pattern)

hai provato come l'ho scritta io?
 

omarbini

Nuovo Utente
17 Lug 2013
10
0
0
così è un'altra cosa (fin troppo direi)

quando metto opzione 0 e il numero dove deviare funziona correttamente

quando scelgo una delle altre opzioni (da 1 a 3) mi fa il refresh della pagina e resta bianca
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
scusa avevo sbagliato a posizionare una parentesi }
PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Documento senza titolo</title>
</head>
<body>
<?php
if(isset($_POST['inserisci'])){
    //recupero i campi di tipo "stringa"
    $num = trim($_POST['numero']);
    $net = trim($_POST['tipologia']);
    $dev = trim($_POST['dev']);
    if(!preg_match("/^[0-9]{4,12}$/",$num)){//a te vedere quale deve essere la lunghezza minima e massima
        echo "Pirla non hai inserito il numero o non corretto!!!<br /><br />";
        //e torni al form ripulito dopo 3 secondi
        echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    }else{//il numero è giusto
        //da quello che ho capito o uno seleziona qualcosa nella select tipologia o scrive nel campo dev, giusto?
        //var_dump($net,$dev);//ok
		if($net=="" && $dev ==""){
            echo "Pirla non hai selezionato la tipologia e non hai scritto una alternativa!!!<br /><br />";
            //e torni al form ripulito dopo 3 secondi
            echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
        }elseif($net!="" && $dev ==""){//l'utente ha selezioanato una tipologia non prendo in considerazione se ha scritto qualcosa
            $inserire=$net;
			//var_dump($inserire);//ok
        }else{
            if(!preg_match("/^[0-9]{4,12}$/",$dev)){//ha scritto una cazzata
                echo "Pirla l'alternativa non è un numero!!!<br /><br />";
                //e torni al form ripulito dopo 3 secondi
                echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
            }else{
                $inserire=$dev;
            }
		}
		var_dump($inserire);
        //qui puoi mettere i dati di connessione
        //poi abbandona mysql e passa a mysqli o meglio alle pdo
        // preparo la query
        $query = "INSERT INTO mnp ( num, net ) VALUES ('$num','$inserire') ON DUPLICATE KEY UPDATE net = '$inserire'";
        var_dump($query);//ok
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";//questa poi la togli
		//quando usi mysql_query che ho commentato perche non ho fatto il db
		/*
		if(mysql_query($query)){
        	echo "inserimento/aggiornamento OK<br /><br />";
            //e rimandi dove vuoi (ho messo  phones_mnp_insert.php ma basta che tu cambi l'url) dopo 3 secondi 
            echo "<meta http-equiv='Refresh' content='3; URL=phones_mnp_insert.php'>";
        }else{
            echo "c'è stato un errore nel database, riprova più tardi<br /><br />";
            //e rimandi dove vuoi dopo 3 secondi 
            echo "<meta http-equiv='Refresh' content='3; URL=phones_mnp_insert.php'>";
        }
		*/
    }
}else{
?>
<form name="form_registrazione" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <table width="50%"  border="0" cellspacing="0" cellpadding="3">
    <tr>
    <td width="12%">Numero====</td>
    <td width="17%"><input name="numero" type="text" /></td>
    <td width="71%">(obbligatorio )</td>
    </tr>
    <tr>
    <td>Tipologia===</td>
    <td>
    <select name="tipologia">
        <option value="">opzione0</option>
        <option value="1">opzione1</option>
        <option value="2">opzione2</option>
        <option value="3">opzione3</option>
    </select>
    </td>
    <td>&nbsp;</td>
    </tr>
    <tr>
    <td>Deviare verso</td>
    <td><input name="dev" type="text" /></td>
    <td>(inserire in formato numero)</td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td><input name="inserisci" type="submit" value="Inserisci" /></td>
    </tr>
</table>       
</form>
<a href="http://../phones_mnp_search.php">Vai alla pagina di ricerca</a>
<?php
}
?>
</body>
</html>
ora la query si forma in funzione se usi la select tipologie o dev
mi sono fermato alla query perche non mi sono fatto il db leggi i commenti e decommnta quello che ti serve e commenta quello che ho messo in più per provare.
ricorda poi che i controlli li fa sui numeri interi, se i numeri sono float (punto decimale) bisogna cambiare i partern dei preg_match
 
Discussioni simili
Autore Titolo Forum Risposte Data
G Menù a tendina di ricerca con query PHP 1
M Stringa con spazi nel menù a tendina PHP 4
P problema con tendina del menù, scompare sotto i contenuti HTML e CSS 7
B Problema con menù a tendina HTML e CSS 4
S Menù a tendina con "option value" variabili PHP 5
cervelliamo realizzato menù a tendina con css, internet explorer non lo legge bene HTML e CSS 15
P Problema con un menù a tendina PHP 7
G menù a tendina con HTML e Javascript Javascript 3
A Menù a tendina con link HTML e CSS 7
B menù a tendina con Front Page HTML e CSS 21
A Menù a tendina collegato a database PHP 13
S [PHP] menù a tendina che stampi voce scelta in precedenza PHP 1
A menù a tendina aiuto PHP 1
M Menù a tendina editabile HTML e CSS 0
F Menù a tendina Joomla 4
xone Ordinare tramite menù a tendina i risultati di una query già stampati MySQL 0
H Menù a tendina PHP 6
kiai969 menù a tendina più lento WordPress 15
N [RISOLTO]Se non è disponibile non stamparmi il valore nel menù a tendina PHP 4
M disabled di alcune voci di un menù a tendina prese da un ciclo while PHP 6
A Menù a tendina: rinvio a pagina html PHP 2
S problemi passaggio dati da menù tendina ad un'altro frame Javascript 3
C Estrazione MySql da menù a tendina PHP 42
M caricare una pagina attraverso menù a tendina Javascript 1
Danilo82 Menù a tendina - cercasi collaboratore Javascript 3
G Menù a tendina concatenati Ajax 0
S Menù a tendina Javascript 1
E Dhtml: menù a tendina Javascript 1
mythar Menù a Tendina = Menù Principale ASP.NET 11
E menù tendina, sono incapace! Javascript 9
P Problema: menù a tendina Javascript 1
I Info menù a tendina PHP 0
I menù a tendina in html HTML e CSS 0
K Destinazione menù a tendina Javascript 4
N Menù a tendina dinamici Classic ASP 6
R personalizzare menù a tendina Javascript 2
O menù a tendina javascript HTML e CSS 3
psikolele Dropdown menù HTML e CSS 2
F menù select dinamico da db in php PHP 3
L Menù con switch case C/C++ 1
J Richiama descrizione da menù PHP 11
Z Menù di navigazione responsivo HTML e CSS 0
R Barra del menù principale decentrata Joomla 4
D Aumentare i sublevel del menù del theme Webdesign e Grafica 1
Tommy03 Contenitore non si nasconde dietro al menù HTML e CSS 1
Tommy03 Due menù nella stessa app Sviluppo app per Android 0
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
C [PHP] Form inserimento più menù a discesa PHP 9
V Menù CSS da file in cartella esterna HTML e CSS 4
W [Javascript] [HTML] menù responsive fisso Javascript 2

Discussioni simili