form con input select con valori diversi tra loro

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Salve, chiedo ancora il vostro aiuto. Ho costruito un form con 4 input select (a tendina) che visualizzano valori provenienti da un database. Ad esempio questi valori sono nomi di città, e sono tutti diversi. Vorrei che quando vado ad inviare i dati un controllo mi avvisasse se all'interno dei 4 input ci sono valori ripetuti. Faccio un esempio per essere più chiaro.

Questa è la tabella di partenza:
ROMA
MILANO
TORINO
NAPOLI

Quando vado a selezionare tali valori vorrei che in ogni input ci sia una città diversa, e che quindi non si ripeta:
MILANO - NAPOLI - TORINO - NAPOLI (errore)
NAPOLI - TORINO - MILANO - ROMA (giusto)
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Ti ho scritto un piccolo esempio:
PHP:
//array città
$citta = array('MILANO','NAPOLI','TORINO','ROMA');
//array dei select
$posted = array($_POST['select1'],$_POST['select2'],$_POST['select3'],$_POST['select4']);
//somma dei valori
foreach($posted as $nome => $valore)$subv .= $valore." ";
//ciclo for che controlla tramite il substr_count che nella stringa non ci sia ripetuta piu di una volta la stessa città
for($i=0;$i<count($citta);$i++){
if(substr_count($subv,$citta[$i])>1){
   echo "Errore..."; break; }
}

Edit: ti ho aggiunto i commenti
 
Ultima modifica:

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Puoi specificare l'errore o se hai modificato il codice, l'ho testato in locale e funziona perfettamente
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Si l'ho dovuto modificare per adattarlo a ciò che dovevo fare. Inanzi tutto l'array non è formato da città, quello era solo un esempio per cercare di lavorarci su un po da solo. Spiego quindi qual'è il mio obbiettivo. Devo creare un calendario per un evento sportivo attraverso un form, dove delle squadre (prese da un db) vengono selezionate attraverso degli input select. Le squadre si incontrano tra di loro in più giornate, ed in ogni giornata ci sono determinati incontri. Da qui la mia necessità a inserire un controllo preventivo per evitare l'inserimento multiplo di una squadra all'interno della stessa giornata. Il form è così composto:

PHP:
$cerca1 = "SELECT * FROM $tabella "; 
$risultato1 = mysql_query($cerca1,$connessione);
$numsquadre =mysql_num_rows($risultato1);
$partite = $numsquadre/2;
$giornate =  (($numsquadre * 2) - 2);

for ($j = 1; $j < 7; $j++) {
	if ($j < 4 ) { 
	$girone = "andata";
	} else {
	$girone = "ritorno";
	}
echo"<table><tr><td colspan='2'>
	<input disabled='disabled' type='text' value= \" $j.a giornata \" name= \" $j \" id=\" $j \" readonly style=\"width: 110px\"><input disabled='disabled' type='text' value= \" girone di $girone \"  name= \"girone". $girone ."\" id=\" $girone \" readonly style=\"width: 150px\"></td></tr>";
for ($i = 0; $i < $partite; $i++) {

echo"
			<tr>
				<td>
					<input type=\"text\" name= \"date".$i.$j."\" id=\"sel".$i.$j."\" readonly style=\"width: 70px\">
					<input type=\"reset\" value=\" + \" onClick=\"return showCalendar('sel".$i.$j."', '%d/%m/%Y');\">
				</td>
				<td>	
					<select id='giornata".$j."partita".$i."_c' name='giornata".$j."partita".$i."_c' style=\"width: 200px\">
					<option value='-'>seleziona ospitante</option>";
	
//visualizza tutti i record nel DB
$query = "SELECT * FROM $tabella ORDER BY nome ASC";
$result = mysql_query($query, $connessione) or die('Errore...');

//ciclo while per visualizzare i dati estratti dal database
	while($resrow = mysql_fetch_row($result))
	{
		$nome= addslashes($resrow[1]);
	
	echo "<option value='$nome'>$nome</option>"; 
	}

echo"			<td>	
					<select id='giornata".$j."partita".$i."_t' name='giornata".$j."partita".$i."_t' style=\"width: 200px\">
					<option value='-'>squadra ospite</option>";
	
//visualizza tutti i record nel DB
$query = "SELECT * FROM $tabella";
$result = mysql_query($query, $connessione) or die('Errore...');

//ciclo while per visualizzare i dati estratti dal database
	while($resrow = mysql_fetch_row($result))
	{
		$nome= addslashes($resrow[1]);
	
	echo "<option value='$nome'>$nome</option>";

	}
}			
echo"</select></td></tr></table>";
}

questa è la modifica al tuo esempio, ma appaiono due errori: Notice: Undefined variable: subv e Warning: substr_count() [function.substr-count]: Empty substring.

PHP:
//cicli for per determinare le giornate e i gironi
$cerca = "SELECT * FROM $tabella2 "; 
$risultato = mysql_query($cerca,$connessione);
$numsquadre =mysql_num_rows($risultato);
$partite = $numsquadre/2;
$giornate =  (($numsquadre * 2) - 2);

//cicli for per determinare giornata e girone
for ($j = 1; $j <= 6; $j++) { 
	if ($j < 4 ) { 
	$girone = "andata";
	} else {
	$girone = "ritorno";
	}

	for ($i = 0; $i < $partite; $i++) {

//array delle squadre, in cui si deve specificare giornata e girone
$posted = array($_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t'],$_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t']);
	}

//somma dei valori
foreach($posted as $nome => $valore)$subv .= $valore." ";

//ciclo for che controlla tramite il substr_count che nella stringa non ci sia ripetuta piu di una volta la stessa squadra
for($n=0;$n<$numsquadre;$n++){
	if(substr_count($subv,$squadre[$n])>1){
	   echo "Errore..."; 
	} else {
		
//inserisci partite	nel DB
$caricapartite = "INSERT INTO $tabella (id,data,squadracasa,squadratrasf,gol1,gol2,turno,girone) VALUES('','${'date' . $i . $j}','${'giornata' . $j . 'partita' . $i . '_c'}','${'giornata' . $j . 'partita' . $i . '_t'}','','','$j','$girone')"; 
mysql_query($caricapartite) or die("Errore...\n<br />Query: " . $caricapartite . "<br />\nDettagli: (" . mysql_errno() . ") " . mysql_error()); 

echo "Partita ${'giornata' . $j . 'partita' . $i . '_c'} - ${'giornata' . $j . 'partita' . $i . '_t'}  inserita correttamente!<br>";		
		}
	}
}
?>

ho iniziato a fare anche con substr_count e implode. In questo caso però l'array iniziale e quello mostrato da implode non corrispondono, alterandomi il risultato finale (ho fatto una prova stampando a video il risultato di implode).
PHP:
//array delle squadre
$posted = array($_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t'],$_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t']);
	}
	
//verifica che non sia stato inserita una squadra più volte
$stringa = implode(',', $posted);

if (substr_count($stringa,'xxx')>1){

//inserisci partite	nel DB
$caricapartite = "INSERT INTO $tabella (id,data,squadracasa,squadratrasf,gol1,gol2,turno,girone) VALUES('','${'date' . $i . $j}','${'giornata' . $j . 'partita' . $i . '_c'}','${'giornata' . $j . 'partita' . $i . '_t'}','','','$j','$girone')"; 
mysql_query($caricapartite) or die("Errore...\n<br />Query: " . $caricapartite . "<br />\nDettagli: (" . mysql_errno() . ") " . mysql_error()); 
echo "Partita ${'giornata' . $j . 'partita' . $i . '_c'} - ${'giornata' . $j . 'partita' . $i . '_t'}  inserita correttamente!<br>";

} else {

echo "<br>la squadra XXX, nella $j giornata è stata inserita". substr_count($stringa,'XXX') . "volte<br><br>";

	}
}
Aggiungo che in entrambi i casi, senza il controllo, i dati vengono inseriti correttamente
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Dov'è dichiarato $squadre? Per il notice prova a settare la variabile prima del foreach $subv = '';
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
quello è uno dei problemi, non so come dichiarare l'array perché i dati vengono dal database e non vanno inseriti direttamente nella pagina
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ho provato così, ma ho questo errore:
Warning: mysql_fetch_assoc(): 4 is not a valid MySQL result resource in /membri/torneoborgonara/torneo/caricacalendario.php on line 47

PHP:
//cicli for per determinare le giornate e i gironi
$cerca = "SELECT * FROM $tabella2 "; 
$risultato = mysql_query($cerca,$connessione);
$numsquadre =mysql_num_rows($risultato);
$partite = $numsquadre/2;
$giornate =  (($numsquadre * 2) - 2);

//cicli for per determinare giornata e girone
for ($j = 1; $j <= 6; $j++) { 
	if ($j < 4 ) { 
	$girone = "andata";
	} else {
	$girone = "ritorno";
	}

//ciclo for per selezionare la partita
	for ($i = 0; $i < $partite; $i++) {

//array delle squadre, in cui si deve specificare giornata e girone
$posted = array($_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t'],$_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t']);

//controlla che le squadre non siano ripetute
//estraggo i dati dal database
$cerca2 = "SELECT * FROM $tabella2";
$risultato = mysql_query($cerca2);

	while ($squadra = mysql_fetch_assoc($risultato)) {
	
$subv = '';

foreach($posted as $nome => $valore)$subv .= $valore." ";

//ciclo if che controlla tramite il substr_count che nella stringa non ci sia ripetuta piu di una volta la stessa squadra
	if(substr_count($subv,$squadra["nome"])>1){
	   echo "ERRORE la squadra". $squadra["nome"] ."ripetuta nella giornata $j<br>";
	   exit; 
	} else {
		

//inserisci partite	nel DB

//$caricapartite = "INSERT INTO $tabella (id,data,squadracasa,squadratrasf,gol1,gol2,turno,girone) VALUES('','${'date' . $i . //$j}','${'giornata' . $j . 'partita' . $i . '_c'}','${'giornata' . $j . 'partita' . $i . '_t'}','','','$j','$girone')"; 
//mysql_query($caricapartite) or die("Errore...\n<br />Query: " . $caricapartite . "<br />\nDettagli: (" . mysql_errno() . ") " . //mysql_error()); 

echo "Partita ${'giornata' . $j . 'partita' . $i . '_c'} - ${'giornata' . $j . 'partita' . $i . '_t'}  inserita correttamente!<br>";
			
			}
mysql_free_result($risultato);	
		
		}
	}
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao,
nella query invece che l' * ti conviene mettere il campo nome visto che usi solo quello

poi metti i messaggi di errore di mysql per capire il perchè le query non vanno a buon fine

PHP:
//estraggo i dati dal database
        $cerca2 = "SELECT nome FROM $tabella2";
        $risultato = mysql_query($cerca2);
        // se la query non va stampiamo i messaggi di errore e la query
        if (!$risultato) {
            echo "Errore query : <br/> $cerca2 <br/> " . mysql_error();
        }
        while ($squadra = mysql_fetch_assoc($risultato)) {
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Hai provato a riaggiungere la connessione qui:
PHP:
//aggiungi il mysql_error()
$risultato = mysql_query($cerca2,$connessione) or die(mysql_error());
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
@asevenx
ho dato un occhio di sfuggita allo script, quindi può darsi che sbagli, ma mi sembra che tu apra alcune <select...> e il tag di chiusura </select> ne individuo uno solo
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ho fatto le modifiche che mi avete suggerito, ma il risultato non cambia. Riposto il codice

PHP:
<?php
error_reporting(E_ALL);

//dati database
$host = "";
$username = "";
$password = "";
$database = "";
$tabella = "partite";
$tabella2 = "squadre";

//connessione e invio al DB
$connessione = mysql_connect($host,$username,$password) or die("Connessione DB fallita"); 
mysql_select_db($database,$connessione) or die("Selezione DB fallita");

//dati provenenti dal form
foreach ($_POST as $date => $arraydate) {  
       $_POST[$date] = $arraydate; 
} 
 
//cicli for per determinare le giornate e i gironi
$cerca = "SELECT * FROM $tabella2 "; 
$risultato = mysql_query($cerca,$connessione);
$numsquadre =mysql_num_rows($risultato);
$partite = $numsquadre/2;
$giornate =  (($numsquadre * 2) - 2);

//cicli for per determinare giornata e girone
for ($j = 1; $j <= 6; $j++) { 
	if ($j < 4 ) { 
	$girone = "andata";
	} else {
	$girone = "ritorno";
	}

//ciclo for per selezionare la partita
	for ($i = 0; $i < $partite; $i++) {

//array delle squadre, in cui si deve specificare giornata e girone
$posted = array($_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t'],$_POST['giornata' . $j . 'partita' . $i . '_c'],$_POST['giornata' . $j . 'partita' . $i . '_t']);

//controlla che le squadre non siano ripetute
//estraggo i dati dal database 
		$cerca2 = "SELECT nome FROM $tabella2"; 
        $risultato = mysql_query($cerca2,$connessione) or die(mysql_error()); 
		
        // se la query non va stampiamo i messaggi di errore e la query 
        if (!$risultato) { 
            echo "Errore query : <br/> $cerca2 <br/> " . mysql_error(); 
        } 
        while ($squadra = mysql_fetch_assoc($risultato)) {  
	
$subv = '';

foreach($posted as $nome => $valore)$subv .= $valore." ";

//ciclo if che controlla tramite il substr_count che nella stringa non ci sia ripetuta piu di una volta la stessa squadra
	if(substr_count($subv,$squadra["nome"])>1){
	   echo "ERRORE la squadra". $squadra["nome"] ."è ripetuta nella giornata $j<br>";
	   exit; 
	} else {
		

//inserisci partite	nel DB

$caricapartite = "INSERT INTO $tabella (id,data,squadracasa,squadratrasf,gol1,gol2,turno,girone) VALUES('','${'date' . $i . //$j}','${'giornata' . $j . 'partita' . $i . '_c'}','${'giornata' . $j . 'partita' . $i . '_t'}','','','$j','$girone')"; 
mysql_query($caricapartite) or die("Errore...\n<br />Query: " . $caricapartite . "<br />\nDettagli: (" . mysql_errno() . ") " . //mysql_error()); 

echo "Partita ${'giornata' . $j . 'partita' . $i . '_c'} - ${'giornata' . $j . 'partita' . $i . '_t'}  inserita correttamente!<br>";
			
			}

mysql_free_result($risultato);			
		}
	}
}
?>
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Qua devi chiudere l'or die
PHP:
mysql_query($caricapartite) or die("Errore...\n<br />Query: " . $caricapartite . "<br />\nDettagli: (" . mysql_errno() . ") ");

Poi dichiara il foreach prima del while
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
S [PHP] Recupero nome immagine da Form con input file PHP 3
M [HTML] form con multipli input type image HTML e CSS 1
I Form/aree di testo con input da lista di nomi!Chiedo aiuto!! HTML e CSS 3
N Spostarsi tra gli input di un form con le frecce PHP 0
M Ordinare visualizzazione record tramite form con input "text" PHP 2
xone Form con campi input text e upload file PHP 4
V problema con form in input/output PHP 3
L problema con form ed input PHP 6
C Un form di input e uno di output con funzione javascript Javascript 17
G Invio form con PHP PHP 3
M Problema con controllo form in real time jQuery 6
M form con checkbox PHP 8
F query e form con select multipla PHP 17
W Rinominare Documenti Con Form Asp Classic ASP 9
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
Domenico_Falco1 [Javascript] [HTML] Campi form con sfondo imposto dal browser Javascript 5
E Form inserimento dati con JavaScript Javascript 0
I [PHP] inviare form con allegato tramite una mail PHP 1
P PHP - Leggere una pagina passata con Form e Captcha PHP 0
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
U [PHP] Form stessa pagina con qualche complicazione PHP 0
S [PHP] form con metodo get e recupero id PHP 4
michela90 [PHP] Refresh page on submit - Form con Swiftmailer PHP 14
Emix Problema con creazione form css/mobile HTML e CSS 3
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
L Scelta form con jquery jQuery 1
F [PHP] Validare form prenotazione appuntamento tattoo con upload image PHP 0
S Html con form e action .php PHP 6
bubino8 [PHP] Auto Submit form con dati PHP 7
W Consiglio su gestione di un form con XMLHttpRequest Ajax 0
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
T [Javascript] un form con select dinamica che funzioni da menù... Javascript 2
zammaeng [PHP] Problema form con lista PHP 8
B INSERIRE DATI CON IMMAGINE DA FORM IN MYSQL MySQL 7
V [PHP] Form con elenco a tendina con dati DB PHP 20
A [HTML] form con campi dinamici. HTML e CSS 1
asevenx [PHP] form con select che non invia dati se con apostrofo PHP 4
SimooRu [PHP] Non riesco a far passare i dati con i form PHP 4
S [PHP] Form iscrizione senza DB con comandi deprecated PHP 10
Fuego2806 Stampare dati Form su immagine di sfondo con html HTML e CSS 1
Fuego2806 [PHP] Stampare dati Form su immagine di sfondo con html PHP 70
C [PHP] Upload immagine in un form con target _blank: non funziona PHP 7
G validazione form con div tipo alert jQuery 0
M form php con checkbox PHP 4
D form php con chapta PHP 1
P invio mail da form con dati php PHP 7
P PHP mailer invio form con 2 allegati. PHP 3
M Form multipagina con campi già compilati se presenti PHP 5
B problema con i form Javascript 0
F controllo form php con restituzione errori nella form PHP 10

Discussioni simili