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:
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
 
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?
 
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
 
"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
 
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.
 
grazie , lho fatto però mi inserisce comunque il valore 0 come impostato nel menù a tendina
 
Si esatto ho commesso un errorino. Sostituisci == con != nel'ultima riga di codice pubblicata nel messaggio precedente.
 
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
 
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
 
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
 
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
 
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?
 
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
 
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