PHP select con file excel

rubber_89

Nuovo Utente
24 Set 2013
8
0
0
Ciao a tutti! :-) ho cominciato da poco a dilettarmi con il PHP. Sto cercando di sviluppare un programma che mi permetta di copiare i campi di un file excel esteno all'interno di un database di prova(nel mio caso xlogic) creando una tabella, dopodichè esso deve essere in grado, tramite "filtri" WHERE SQL di interrogare il database e mostrarmi i dati in un form menu a tendina <select> man mano che li seleziono, fino ad arrivare ad aprirmi il link della scheda del corso che soddisfa le voci che ho selezionato in alcuni campi(area, categoria, titolo_corso). Il problema si pone quando seleziono un valore dal primo select(quello relativo all'area) perchè quando mi lancia la pagina successiva nel nuovo select non mi visualizza i dati filtrati! Ipotizzo che il problema riguardi quindi le variabili $POST_[''] perchè il valore del dato selezionato nel menu select non mi arriva nel menu successivo! Inoltre non riesco a visualizzare una sola volta nel menu a tendina un valore del campo area(si ripetono visto che per alcuni corsi le aree sono ovviamente le stesse) ma quello è il problema minore.
Ho provato un pò di tutto ma non riesco a trovare una soluzione valida! Qualcuno può aiutarmi??
Grazie mille! ;)

Posto qui sotto il codice completo, commentato il più possibile per farlo comprendere al meglio:

PHP:
<html>
<head>
	<title>Scegli il corso che fa per te</title>
</head>
<body>
<?php 
 

/*CONTROLLO CAMPI*/
if ($_POST['passaggio']=="")
 	{
		inserimento_dati();
	 }
	
if ($_POST['passaggio']=="filtro1")
	{
		 form2();
	}
	
if ($_POST['passaggio']=="filtro2")
	{
		 form3();
 	}
	
if ($_POST['passaggio']=="filtro3")
	{
		 lancia_scheda_corso();
	 }
			  
	

/*LEGGE UN FILE CSV E LO TRASCRIVE TUTTO IN UN DATABASE*/ 

 function inserimento_dati()
 {
	 include "connessione_database_fabiogia.php";		 //mi collego al database
	  
	//creo una tabella nel database con colonne definite
	 $sql = "CREATE TABLE catalogo_corsi			   
			 (Id int,
			  Area varchar(15),
			  Categoria varchar(30),
			  Sottocategoria varchar(15),
			  Codice	int,
			  Titolo varchar(30),
			 Ultima_modifica int,
			 Crediti_ECM varchar(15),
			 Crediti_UNI varchar(15),
			 Crediti_PROF int,
			 Ore int,
			 Tipologia varchar(15),
			  Lingua	varchar(15),
			 Scheda_corso varchar(100),
			 Ultima_modifica_scheda int,
			 Moduli varchar(15),
			 Lezioni varchar(15),
			 Shop_online_scontato int,
			 Shop_online int
			)";
			
	//esegue la query
	mysql_query($sql);
	
	 mysql_query($modifica);		*/
	
	echo "<p> Scegli l'area del corso che ti interessa: <br><br></p>"; 
	
	 lettura_scrittura();	 //lancia la funzione lettura_scrittura
	
	echo "Dati copiati da file excel a database";	
		
	form1();  		//lancia la funzione FORMULARIO1								
 }
 
 

 function lettura_scrittura()	//Leggi il file excel e scrivi su database
	{					  
		 $anag=fopen("catalogo_corsi_modificato.csv", "r") or die("Impossibile aprire il file!");
		//con "r" che sta per sola lettura
		
		/*non mettiamo alcun secondo parametro cosi andrà fino in fondo a leggere*/
 		while ($rigafile=fgets($anag))
			  {
					$array_campi=explode(";",$rigafile);
					
					$area=$array_campi[0];
					$categoria=$array_campi[1];
					$sottocategoria=$array_campi[2];
					$codice=$array_campi[3];
 					$titolo=$array_campi[4];
					$ultima_modifica=$array_campi[5];
					$crediti_ecm=$array_campi[6];
 					$crediti_uni=$array_campi[7];
					 $crediti_prof=$array_campi[8];
					 $ore=$array_campi[9];
			                $tipologia=$array_campi[10];
 					$lingua=$array_campi[11];
 					$scheda_corso=$array_campi[12];
					 $ultima_modifica_scheda=$array_campi[13];
					 $moduli=$array_campi[14];
                                        $lezioni=$array_campi[15];
					$shop_online_scontato=$array_campi[16];
 					$shop_online=$array_campi[17];	
					
					$insert = "INSERT INTO catalogo_corsi (Area, Categoria, Sottocategoria, 
								Codice, Titolo, Ultima_modifica, Crediti_ECM,
								Crediti_UNI, Crediti_PROF, Ore, Tipologia, Lingua, Scheda_corso,
 								Ultima_modifica_scheda, Moduli, Lezioni, Shop_online_scontato,
								Shop_online)
			  				    VALUES (' ".$area." ',
							   		    ' ".$categoria." ',
									   ' ".$sottocategoria." ',
									   ' ".$codice." ',
									    ' ".$titolo." ',
									    ' ".$ultima_modifica." ',
									   ' ".$crediti_ecm." ',
									   ' ".$crediti_uni." ',
									   ' ".$crediti_prof." ',
									   ' ".$ore." ',
									   ' ".$tipologia." ',
									   ' ".$lingua." ',
									   ' ".$scheda_corso." ',
									   ' ".$ultima_modifica_scheda." ',
									    ' ".$moduli." ',
									    ' ".$lezioni." ',
									   ' ".$shop_online_scontato." ',
 									   ' ".$shop_online." '
									   )"; 			 
				
					mysql_query($insert) or die(mysql_error());	
					
					/*qui ci andrebbe un'altra query che elimina la prima riga
					   di intestazione ma dopo le prove che ho fatto il risultato è
					  peggiore*/  
					
			  }		//fine while  
			  
			  mysql_close($link);	   //chiudo la connessione
	}   				
 
 
 
/*FORMULARIO 1 - CREO UN MENU' A TENDINA IN CUI VISUALIZZO LE VOCI DELLA COLONNA AREA*/
 function form1()
 {
		include "connessione_database_fabiogia.php";
		
		echo "<form action=\"$PHP_SELF\" method=\"post\">";
		
		/*mettiamo qui l'hidden cosi da non ripassarci più, potevamo metterlo anche
		all'inizio della funzione inserimento_dati()*/
		echo "<input type=\"hidden\" name=\"passaggio\" value=\"filtro1\">" ;
		
		echo "<p>"; 
					  
		$seleziona = "SELECT * FROM catalogo_corsi";	
		
		$tipo_menu="area_corso";
		
		echo "<select name=' ".$tipo_menu." '>";
		/*mettiamo i dati trovati su un menù a tendina*/
		
		//eseguo la query della ricerca
		mysql_query($seleziona) or die(mysql_error());
		
		//e la salvo in una variabile
		$result1 = mysql_query($seleziona);
		
		while ($row = mysql_fetch_assoc($result1)) 			//Visualizza area
		{	
			echo "<option value=' ".$row['Area']." '>".$row['Area']."</option>";
		}							
		
		echo "</select>";
		echo "</p>";
		
		//inserisco un tasto
		echo "<p>		   
			<input type=\"submit\" value=\"Avanti\" 
			title=\"Fate click su questo pulsante avanzare nella scelta del corso\">
			</p>";
		
		echo "</form>";

		mysql_close($link);
		
 }	 
 
 			  
 
 /*FORMULARIO 2 - CREO UN MENU' A TENDINA IN CUI VISUALIZZO LE VOCI CHE SODDISFANO I PARAMETRI RICERCATI(CATEGORIA)*/	 
 function form2()
 {
		include "connessione_database_fabiogia.php";
		
		echo "<form action=\"$PHP_SELF\" method=\"post\">";
		
		echo "<input type=\"hidden\" name=\"passaggio\" value=\"filtro2\">" ; 
		
		echo "<p> Scegli l'argomento: <br><br></p>";
		
		echo "<p>"; 
					  
		$seleziona_categoria = "SELECT * FROM catalogo_corsi
				WHERE Area = '$_POST[area_corso]'";	
		
		$tipo_menu2="categoria_corso";
		
		echo "<select name=' ".$tipo_menu2." '>";
		/*mettiamo i dati trovati su un menù a tendina*/
		
		mysql_query($seleziona_categoria) or die(mysql_error());
		
		$result2 = mysql_query($seleziona_categoria);
		
		if (!$result2) 				//controllo esecuzione corretta query
		{
	    	die('Invalid query: ' . mysql_error());
		}
		
		while ($row = mysql_fetch_assoc($result2)) 			//Scorporazione dati
		{	
			echo "<option value=' ".$row['Categoria']." '>".$row['Categoria']."</option>";
		}							
		
		echo "</select>";
		echo "</p>";
		
		//inserisco un tasto
		echo "<p>		   
			<input type=\"submit\" value=\"Avanti\" 
			title=\"Fate click su questo pulsante avanzare nella scelta del corso\">
			</p>";
		
		echo "</form>";

		mysql_close($link);	 
 }
 
 	   
 
 /*FORMULARIO 3 - CREO UN MENU' A TENDINA IN CUI VISUALIZZO LE VOCI CHE SODDISFANO I PARAMETRI RICERCATI(TITOLO)*/	 
 function form3()
 {
		include "connessione_database_fabiogia.php";
		
		echo "<form action=\"$PHP_SELF\" method=\"post\">";
		
		echo "<input type=\"hidden\" name=\"passaggio\" value=\"filtro3\">" ; 
		
		echo "<p> Scegli il tuo corso: <br><br></p>"; 
		
		echo "<p>"; 
					  
		$seleziona_titolo = "SELECT * FROM catalogo_corsi
				WHERE Categoria = '$_POST[categoria_corso]'";	
		
		$tipo_menu3="titolo_corso";
		
		echo "<select name=' ".$tipo_menu3." '>";
		/*mettiamo i dati trovati su un menù a tendina*/
		
		mysql_query($seleziona_titolo) or die(mysql_error());
		
		$result3 = mysql_query($seleziona_titolo);
		
		while ($row = mysql_fetch_assoc($result3)) 			//mi mostra tutti i titoli
		{	
			echo "<option value=' ".$row['Titolo']." '>".$row['Titolo']."</option>";
		}							
		
		echo "</select>";
		echo "</p>";
		
		//inserisco un tasto
		echo "<p>		   
			<input type=\"submit\" value=\"Avanti\" 
			title=\"Fate click su questo pulsante avanzare nella scelta del corso\">
			</p>";
		
		echo "</form>";
		
		mysql_close($link);	 
 }	
 
 
/*VISUALIZZIAMO IN UNA NUOVA FINESTRA LA SCHEDA DEL CORSO*/ 
 function lancia_scheda_corso()
 {
		include "connessione_database_fabiogia.php"; 
		
		//ricerchiamo nella tabella il valore selezionato nel menù a tendina
		$scheda = "SELECT * FROM catalogo_corsi
				WHERE Titolo = '$_POST[titolo_corso]'";	
		
		mysql_query($scheda) or die(mysql_error());
		
		$result4 = mysql_query($scheda);
		
		while ($row = mysql_fetch_assoc($result4)) 			//mi mostra tutti i titoli
		{	
			echo "<form action= ' " .$row['Scheda_corso']. " ' target=\"_blank\">";
		}
		
		//inserisco un tasto
		echo "<p>		   
			<input type=\"submit\" value=\"Vai alla scheda\" 
			title=\"Fate click su questo pulsante per visualizzare la scheda del corso\">
			</p>";
		
		echo "</form>";

		mysql_close($link); 
 }

 ?>

</body>
</html>
 
Ultima modifica di un moderatore:
Considerando che il problema si pone nel momento in cui i menù a tendina <select> vanno a riempirsi dei dati del database(apparte nel form1() in cui me li carico direttamente con una semplice query senza il WHERE, e infatti quella funziona), presumo che l'errore stia nella variabile $_POST[area_corso] utilizzata all'interno della query di ricerca(e di conseguenza anche $_POST[categoria_corso] nel form3(), visto che ha la stessa sintassi)! Qualcuno sa dirmi se il codice che ho evidenziato sotto è corretto? :confused:


PHP:
function form2()
 {
        include "connessione_database_fabiogia.php";
        
        echo "<form action=\"$PHP_SELF\" method=\"post\">";
        
        echo "<input type=\"hidden\" name=\"passaggio\" value=\"filtro2\">" ; 
        
        echo "<p> Scegli l'argomento: <br><br></p>";
        
        echo "<p>"; 
                      
[SIZE=3][FONT=Arial Black]        $seleziona_categoria = "SELECT * FROM catalogo_corsi WHERE Area = '$_POST[area_corso]'";   [/FONT][/SIZE]
                                             //con area_corso che è il name del <select> relativo al menù a tendina percendente(quello che visualizza il campo area
                                              // del database tramite la funzione form1())
        
        $tipo_menu2="categoria_corso";
        
        echo "<select name=' ".$tipo_menu2." '>";
        /*mettiamo i dati trovati su un menù a tendina*/
        
        mysql_query($seleziona_categoria) or die(mysql_error());
        
        $result2 = mysql_query($seleziona_categoria);
        
        if (!$result2)                 //controllo esecuzione corretta query
        {
            die('Invalid query: ' . mysql_error());
        }
        
        while ($row = mysql_fetch_assoc($result2))             //Scorporazione dati
        {    
            echo "<option value=' ".$row['Categoria']." '>".$row['Categoria']."</option>";
        }                            
        
        echo "</select>";
        echo "</p>";
        
        //inserisco un tasto
        echo "<p>           
            <input type=\"submit\" value=\"Avanti\" 
            title=\"Fate click su questo pulsante avanzare nella scelta del corso\">
            </p>";
        
        echo "</form>";

        mysql_close($link);     
 }
 
Ultima modifica di un moderatore:
Ciao, correggi la sintassi di queste due righe
PHP:
echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post'>";
PHP:
$seleziona_categoria = "SELECT * FROM catalogo_corsi WHERE Area = '" . $_POST['area_corso'] . "'";
 
Ciao, correggi la sintassi di queste due righe
PHP:
echo "<form action='" . $_SERVER['PHP_SELF'] . "' method='post'>";
PHP:
$seleziona_categoria = "SELECT * FROM catalogo_corsi WHERE Area = '" . $_POST['area_corso'] . "'";

Hai ragione, c'è quell'errore e adesso l'ho corretto.
I risultati però sono gli stessi, il problema è sempre che la variabile $_POST['area_corso'] all'interno della query dovrebbe andare a riempirmi la <select> successiva e invece non lo fa, oppure c'è qualche altro problema che mi sfugge!! :confused:
 
Stampa la query e vedi se è come te l'aspetti
PHP:
$seleziona_categoria = "SELECT * FROM catalogo_corsi WHERE Area = '" . $_POST['area_corso'] . "'";  
echo $seleziona_categoria
non c'è bisogno di eseguire la query due volte
PHP:
 mysql_query($seleziona_categoria) or die(mysql_error());
$result2 = mysql_query($seleziona_categoria);
la prima istruzione la puoi togliere
 
Ho fatto come mi hai detto modificando cosi il codice :

$seleziona_categoria = "SELECT * FROM catalogo_corsi WHERE Area='".$_POST['area_corso']."'";
echo $seleziona_categoria;


ed il risultato è questo:

SELECT * FROM catalogo_corsi WHERE Area=' Lingua '
seguito da un menù a tendina vuoto!!

Con ' lingua ' che è il valore che ho selezionato nel precedente menù a tendina,
a quanto pare il problema non è la variabile $_POST['area_corso'] perché
effettivamente ha fatto il suo lavoro portandomi nella nuova pagina il valore
selezionato! Sembra più che altro che la ricerca non dia risultati ma nel
database i dati nella colonna categoria ci sono eccome! Oppure a questo punto
potrebbe esserci qualche errore quando vado a scorporare i dati della query di ricerca!
 
Mi sembra ci siano due spazi bianchi nella voce " lingua "
prova a trimmarli cosi
PHP:
$seleziona_categoria = "SELECT * FROM catalogo_corsi WHERE Area = '" . trim($_POST['area_corso']) . "'";
 
Niente, non funziona!! :(
Non è che per qualche motivo usare il mysql_fetch_assoc per scorporare i dati non è la soluzione migliore in questo caso??
 

Discussioni simili