Inserire in tabella valore selezionato da un menu' a tendina popolato dai valori di un'altra tabella

  • Creatore Discussione Creatore Discussione Rastyn
  • Data di inizio Data di inizio

Rastyn

Nuovo Utente
11 Nov 2012
4
0
0
Salve a tutti.
Ho creato in PHP un menù a tendina dove i valori presenti sono stati prelevati da una colonna di una tabella, e fino a qui nessun problema. Ho difficoltà a far "passare" il valore che verrà selezionato nel menù a tendina in un'ulteriore tabella. In pratica quale variabile devo passare al metodo INSERT INTO per portare il valore selezionato nella tabella che voglio popolare?
A seguire il codice PHP creato, del tutto funzionante tranne che nell'inserimento del valore selezionato nel menù a tendina.

PHP:
<?php
define("HOSTNAME","localhost");
define("USER","sdk");                                      /* Definisco le costanti per accesso al database*/
define("PASSWORD","jhjhk");
define("DATABASE","videonoleggio");
$connection = new mysqli(HOSTNAME, USER, PASSWORD,DATABASE);     /*Connessione a mySQL e verifica successo connessione*/
if ($connection->connect_error) {
	die ('Connect Error:' . $connection->connect_error);
     } 

else {
	echo "Successful connection to MySQL <br />" ;
/*Inzio Creazione menù a tendina*/
$query = "SELECT Nome FROM puntovendita";                                  /*estraggo i dati dalla prima tabella*/
// Run the query
$result_obj = '';
$result_obj = $connection->query($query);
echo "PuntoVendita: <select name='PuntoVendita'>";                          /*menu' a tendina*/
while($result = $result_obj->fetch_array(MYSQLI_ASSOC)) {
	// display the array
	$pass= isset ($result['PuntoVendita']);

	echo "<option value=\"$pass\>";
	print_r($result);
	$punto=$result;
	
}
echo "</select><br /><br />";

            if(isset($_GET['tastoINS']) == "Ok") {
	
				/* Get single value parameters*/
				
				$PuntoVendita = filter_var($punto, FILTER_SANITIZE_STRING);
				
				$query = "INSERT INTO personale (PuntoVendita) VALUES". "('$punto')";  /*Inserisco dei valori nella seconda tabella */
			
				if (!$result = $connection->query($query)) {
					echo "Non posso aggiungere il dato. <br />";
				}
				else {
					echo "Righe aggiunte con successo <br />";
				}

        }
    
            if (isset($_GET['tastoBACK']) == "Back") {
	            header("Location: index.php");
	
	}	
}
?>



Ho provato a passare la variabile $punto ma senza successo.

Grazie a chi può aiutarmi.
 
Ultima modifica di un moderatore:
ciao un paip di cose
1) racchiudi sempre il codice tra gli appositi tag (seconda riga formattazione del post ultime tre iconcine nell'ordine CODE, HTML, PHP)
2) hai fatto mi sembra un po di caos, oggi ci do un occhio e ti so dire
 
ciao
ecco come dovresi fare
PHP:
<?php
//......
$result_obj = $connection->query($query);
echo "<form name=\"form1\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";
echo "PuntoVendita: <select name='PuntoVendita'>"; 
while($result = $result_obj->fetch_array(MYSQLI_ASSOC)) {
    // display the array
    //$pass= isset ($result['PuntoVendita']);//!!!!!! isset ritorna un valore bool FALSE o TRUE non il valore della variabile
    echo "<option value=\"".$result['PuntoVendita']."\">".$result['PuntoVendita']."<option>";
    
}
echo "</select><br /><br />";
//poi ci vuole il pulsante di submit (ti metto quello) o un js per inviare
echo "<input name=\"invia\" type=\"submit\" id=\"invia\" value=\"invia\">";
echo "</form>";
if($_POST['invia'])){//si verifica che sia stato dato il submit
	$PuntoVendita = filter_var($_POST['PuntoVendita'], FILTER_SANITIZE_STRING);//leggo il valore della select
	//e inserisco
	$query = "INSERT INTO personale (PuntoVendita) VALUES". "('$PuntoVendita')";
	//.....
}
//......
?>
guarda che ho schematizzato devi adattarlo alle tue esigenze

p.s.
un consiglio evita di usare le maiuscole nei nomi dei campi e nelle variabili, ti assicuro che si evitano molti errori
 
Grazie infinite, mi hai chiarito e risolto un bel problema che mi impediva di continuare.

Unica eccezione riguarda l'uso della "isset", ho dovuta usarla anche nel tuo codice (vedi riga a seguire)

echo "<option value=\"".isset($result['PuntoVendita'])."\">".isset($result['PuntoVendita'])."<option>";

altrimenti nel db avrei trovato sempre una notifica del tipo:

Notice: Undefined index: ......

Grazie ancora.
 
ciao
???????

PHP:
echo "<option value=\"".isset($result['PuntoVendita'])."\">".isset($result['PuntoVendita'])."<option>";
se $result['PuntoVendita'] esste l'opzion diventa

HTML:
<option value="TRUE">TRUE<option>
se non valorizzata
HTML:
<option value="FALSE">FALSE<option>
 
ciao
ho provato a darci una sistematina, però non l'ho testato perche non ho il db
guarda i commenti
PHP:
<?php
//dati di connessione
//query
if(mysql_num_rows($selezione)>0){
	while($array=mysql_fetch_assoc($selezione)){
		$portieri[]=$array["portieri"];
		$difensori[]=$array["difensori"];
	}
	//se metti il form dentro il while ottieni un sacco di <form>
	echo "<form action=\"".{$_SERVER['PHP_SELF']}."\" method=\"post\">";//manca l'action e il method
		echo "<select name=\"selezione_portieri\">";
		foreach($portieri as $val1){
        	echo "<option value=\"$val1\">$val1</option>";
    	}
		// PERCHE' MESCOLI NELLA STESSA <SELECT> PORTIERI E DIFENSORI?
		//la select, così come è, trasmette un unico valore
		foreach($difensori as $val2){
        	echo "<option value=\"$val2\">$val2</option>";
    	}
		echo "</select>";
		echo "<input type=\"submit\" name=\"invia\" value=\"Clicca qui\">";
	echo "</form>";
}
if(isset($_POST['invia'])){//verifichi che sia stato premuto il submit
	$portiere_selezionato=trim($_POST["selezione_portieri"]);
	if($portiere_selezionato != ""){
		$stringa="INSER INTO selezionati_claudio(visual_portieri) VALUES('$portiere_selezionato')";
		//qui metti un var_dump per vedere cone se la stringa è OK, poi lo togli
		var_dump($stringa);  
    	mysql_query($stringa) or die(mysql_error());    
    	//e rimandi dove vuoi
	}else{
		echo "errore, non hai selezionato";
		//e rimandi al form
	}
}
?>
prova e sappimi dire
p.s.
per risparmiare codice al posto di crere l'array dei portieri potresti mettere il tag <option...> dentro un while
 

Discussioni simili