[risolto] Problema select e verifica form

Virginia86

Nuovo Utente
24 Mag 2007
20
0
0
Ciao a tutti :) , premetto che non sono molto pratica di script php/mysql ma cerco di imparare il più possibile :book: .
Ho una tabella utenti con campi del tipo:
id | nome
1 | maria
2 | anna
3 | claudia
4 | stefania
5 | etc...

sto creando uno script che dovrebbe avere la funzione di verificare tre nomi, se uno o più nomi si trovano nel db mi visualizzerà che esistono nel database, se uno o più nomi non si trovano nel db mi visualizzerà che non esistono nel database, se uno o più campi nella form non sono compilati non vengono verificati.
Questa e la parte dello script in cui mi sono bloccata:

PHP:
...
	$nome = $_POST['nome'];
	$nome1 = $_POST['nome1'];
	$nome2 = $_POST['nome2'];
	$nome3 = $_POST['nome3'];
	unset($_POST['invia']);

	$n = 0;
	$IN = "IN(";
	foreach($_POST as $key => $value) {
	if(!empty($value)) {
       $IN = $IN . "'$value',";
       $n = $n + 1;
       }
   }
	$IN = substr($IN, 0, -1);
	$IN = $IN . ")";
		
	$read="SELECT Count( * ) AS Conta FROM utenti  WHERE nome $IN";
	$raw=mysql_query($read);
	$row= mysql_fetch_array($raw);
	$raw.close;

	if ($row[Conta] >= ' .$n .'){ ;

	echo "
	<script>
	alert(\"il nome esiste nel database\"); 
	</script>
	";

	}

	else{
	
	mysql_close();

	echo "
	<script>
	alert(\"il nome non esiste nel database\"); 
	</script>
	";
	}
...

    <form name="form" method="post" action="">
      <p>
      <label>nome1:
      <input name="nome1" type="text" />
      </label>
      </p>
      <p>
      <label>nome2:
       <input name="nome2" type="text" />
       </label>
      </p>
      <p>
      <label>nome3:
       <input name="nome3" type="text" />
       </label>
      </p>
      <p>
        <input name="invia" type="submit" value="Invia" />
      </p>
    </form>
...

il problema che mi funziona in maniera errata ma non riesco a capire perchè :dipser:.
Grazie in anticipo a chi mi aiuterà :byebye:
 
Ciao, questa istruzione cosa dovrebbe fare?
PHP:
$raw.close;
spiega perche lo script funziona male
 
Ciao, questa istruzione cosa dovrebbe fare?
PHP:
$raw.close;
spiega perche lo script funziona male

Ciao criric e buona domenica :) , la riga

PHP:
$raw.close;

e rimasta dopo varie prove non andate a buon fine :p , ricordavo che si inserisse dopo
PHP:
$raw=mysql_query($read);
$row= mysql_fetch_array($raw);

per chiudere la stringa $raw ma non ne sono sicura.

In pratica il problema e che non effettua correttamente la verifica dei tre campi form , se compilo il form con uno o più nomi che non esistono nel db mi dice che esistono, se lascio i tre campi form completamente vuoti , oltre al messaggio mi visualizza anche l'errore

Codice:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource ...

sulla riga

$row= mysql_fetch_array($raw);

Grazie in anticipo per l'aiuto criric
 
ciao
intanto per usare il post in quella maniera nel foreach devi modificare il form
(tolgo label ecc per scrivere meno)
HTML:
<form name="form" method="post" action="">
	<input name="nome[]" type="text" />
	<input name="nome[]" type="text" />
	<input name="nome[]" type="text" />
	<input name="invia" type="submit" value="Invia" />
</form>
allora poi nel php puoi utilizzare il $_POST, che in questo caso è un array, nel foreach
credo che sia un problema di apici
il where in dovrebbe essere es "SELECT.... WHERE pinco IN('a,b,c,d')"
prova così
PHP:
<?php
//....
	unset($_POST['invia']); 
	$n = 0;
	 foreach($_POST as $key => $value) {
		if(!empty(trim($value))) {//metti un trim
			$elenco[]=$value;
			$n = $n + 1;
		}
	}
	//qui ti converrebbe verificare se $elenco è un array se si procedi altrimenti salti il tutto
	$IN = " IN('".implode(",",$elenco)."')";

    $read="SELECT COUNT(*) AS Conta FROM utenti  WHERE nome $IN";
	//e qui ti conviene mettere un var_dump per vedere se la querystringa viene scritta come dovrebbe
	var_dump($read);
//....
?>
 
Ciao borgo italia :) , integrando la parte di codice da te suggerito mi usciva un errore warning trim nella riga

PHP:
if(!empty(trim($value))) {//metti un trim

ho modificato la riga con

PHP:
if(!trim($value)) {//metti un trim

ed il form si visualizza ma continua a non funzionare dandomi errore su implode :dipser:

PHP:
...
	$nome = $_POST['nome'];
    unset($_POST['invia']); 
    $n = 0;
    foreach($_POST as $key => $value) {
	if(!trim($value)) {
            $elenco[]=$value;
            $n = $n + 1;
        }
    }

    $IN = " IN('".implode(",",$elenco)."')"; 
	
	$read="SELECT Count( * ) AS Conta FROM utenti  WHERE nome $IN";
    var_dump($read); 

	if ($row[Conta] >= ' .$n .'){ ;

	echo "
    <script>
    alert(\"il nome esiste nel database\"); 
    </script> 
	
	";

	}

	else{
	
	mysql_close();

	echo "
    <script>
    alert(\"il nome non esiste nel database\"); 
    </script> 
	
	";
	}
}
...

    <form name="form" method="post" action="">
      <p>
      <label>nome1:
      <input name="nome[]" type="text" />
      </label>
      </p>
      <p>
      <label>nome2:
       <input name="nome[]" type="text" />
       </label>
      </p>
      <p>
      <label>nome3:
       <input name="nome[]" type="text" />
       </label>
      </p>
      <p>
        <input name="invia" type="submit" value="Invia" />
      </p>
    </form>
...

Grazie in anticipo per l'aiuto
 
ciao
scusa mi era rimasto nella penna una cosa
ecco
PHP:
<?php
if(isset($_POST['invia'])){
    unset($_POST['invia']); 
    $n = 0;
     foreach($_POST['nome'] as $key => $value){//mi ero dimenticato ['nome']
        if(trim($value)!="") {
            $elenco[]=$value;
            $n = $n + 1;
        }
    }
    if(is_array($elenco)){
		$IN = " IN('".implode(",",$elenco)."')";
   	 	$read="SELECT COUNT(*) AS Conta FROM utenti  WHERE nome $IN";
    	//e qui ti conviene mettere un var_dump per vedere se la querystringa viene scritta come dovrebbe
    	var_dump($read);
		//......
	}else{
		echo "errore";//e qui fai quello che cuoi es riinvii al form
	}
}
?> 
<br />
<form name="form" method="post" action="">
	<input name="nome[]" type="text" /><br />
	<input name="nome[]" type="text" /><br />
	<input name="nome[]" type="text" /><br />
	<input name="invia" type="submit" value="Invia" />
</form>
 
Ciao borgo italia :) , il dump che mi ha generato e

PHP:
string(74) "SELECT COUNT(*) AS Conta FROM utenti WHERE nome IN('maria,anna,test')"

ma lo script continua a dirmi che il nome/i inseriti esistono nel db anche se 'test' non esiste :dipser:

PHP:
if(isset($_POST['invia'])){
    unset($_POST['invia']); 
    $n = 0;
     foreach($_POST['nome'] as $key => $value){//mi ero dimenticato ['nome']
        if(trim($value)!="") {
            $elenco[]=$value;
            $n = $n + 1;
        }
    }
    if(is_array($elenco)){
        $IN = " IN('".implode(",",$elenco)."')";
            $read="SELECT COUNT(*) AS Conta FROM utenti  WHERE nome $IN";
        //e qui ti conviene mettere un var_dump per vedere se la querystringa viene scritta come dovrebbe
        var_dump($read);

	echo "
	<script>
	alert(\"il nome esiste nel database\"); 
	</script>
	";

    }else{

	echo "
	<script>
	alert(\"il nome non esiste nel database\"); 
	</script>
	";



    }
} 


	?>
<br />
<form name="form" method="post" action="">
    <input name="nome[]" type="text" /><br />
    <input name="nome[]" type="text" /><br />
    <input name="nome[]" type="text" /><br />
    <input name="invia" type="submit" value="Invia" />
</form>

Ciao e grazie ancora per l'aiuto borgo italia
 
ciao
ho la vaga impressione, se non ho capito male quello che vuoi fare, il sistema che hai adottato non va bene.
immagino che tu verifichi cosa risulta da count
se count == 0 il/i nome/i non esiste/ono
se count > 0 il/i nome/i esiste/ono
ma c'è un piccolo ma, ed è quello che ti risulta
se nella colonna nome c'è almeno un nome uguale a uno di quelli dell'IN count sarà sempre > 0 in quanto es
ipotizziamo
1 | pinca
2 | anna
3 | sofonisba
4 | pancrazia
5 | etc...
il count con where IN('maria,anna,test')
ti darà comunque 1 perchè ha trovato anna
 
essendo stringhe la query non dovrebbe essere cosi
PHP:
"SELECT COUNT(*) AS Conta FROM utenti WHERE nome IN('maria,anna,test')"
ma cosi
PHP:
"SELECT COUNT(*) AS Conta FROM utenti WHERE nome IN('maria','anna','test')"
 
Ciao borgo italia e criric :) , teoricamente lo script dovrebbe funzionare così:

id | nome
1 | maria
2 | anna
3 | claudia
4 | stefania
5 | etc...

inserisco nel form uno o più nomi che esistono e mi visualizza esito positivo;
inserisco nel form uno o più nomi che non esistono e mi visualizza esito negativo;
inserisco nel form nomi che esistono e nomi che non esistono e mi visualizza esito negativo;
i campi vuoti non sono controllati perchè vuoti.:p

sono ferma proprio sulla verifica.
Spero non sia complessa :dipser:
Grazie in anticipo
 
Ultima modifica:
A me non è chiara questa parte
inserisco nel form uno o più nomi che esistono e mi visualizza esito positivo;
veronica, angela, maria dovrebbe dare esito positivo
inserisco nel form uno o più nomi che non esistono e mi visualizza esito negativo;
gli stessi nomi in questo caso dovrebbero dare esito negativo

:confused::confused:
 
cioa
ho pensato a questo, guarda se ti va bene
PHP:
<?php
//....
if(isset($_POST['invia'])){
	//....
    unset($_POST['invia']); 
    $n = 0; //a che ti serve questa variabile?
	foreach($_POST['nome'] as $key => $value) {
        if(trim($value)!="")) {
            $elenco[]=$value;
            $n = $n + 1;//se ti serve scrivi così: $n++;
        }
    } 
	if(is_array($elenco)){
		$esistono="SI";//al posto di si anche 1 o quello che ti piace
		foreach($elenco AS $nome){
			$query="SELECT nome FROM utenti WHERE nome='$nome'";
			$ris=mysql_query($query);
			if(mysql_num_rows($ris)==0){
				$esistono="NO";
				break;//se trovo un nome che non esiste inutile continuare a ciclare
			}
		}
		if($esistono=="SI"){
			echo "tutti i nomi esistono";
		}else{
			echo "uno o più nomi non esistono";
		}
	}else{
		echo "non hai riempito nessun campo";
		//e rimandi al form o dove vuoi
	}
}
//....
?>
<form name="form" method="post" action="">
	<input name="nome[]" type="text" />
	<input name="nome[]" type="text" />
	<input name="nome[]" type="text" />
	<input name="invia" type="submit" value="Invia" />
</form>
 
Ciao borgo italia :) , funziona benissimo :p , mi dava sintax error sul trim ma era stata aggiunta una parentesi in più forse errore di battitura

PHP:
if(trim($value)!="")) {

con

if(trim($value)!="") {

Scusami se non sono stata veloce nel risponderti ma ieri ho fatto varie prove con esito negativo.
Stavo cercando di aggiungere ulteriori campi al form

PHP:
<?php
//....
if(isset($_POST['invia'])){
    //....
    unset($_POST['invia']); 
    foreach($_POST['nome'] as $key => $value) { // parte non ancora modificata
        if(trim($value)!="")) {
            $elenco[]=$value;
        }
    } 
    if(is_array($elenco)){
        $esistono="SI";//al posto di si anche 1 o quello che ti piace
        foreach($elenco AS $nome){ // parte non ancora modificata
            $query="SELECT nome,cognome FROM utenti WHERE nome='$nome' AND cognome='$cognome'";
            $ris=mysql_query($query);
            if(mysql_num_rows($ris)==0){
                $esistono="NO";
                break;//se trovo un nome che non esiste inutile continuare a ciclare
            }
        }
        if($esistono=="SI"){
            echo "tutti i nomi esistono";
        }else{
            echo "uno o più nomi non esistono";
        }
    }else{
        echo "non hai riempito nessun campo";
        //e rimandi al form o dove vuoi
    }
}
//....
?>
<form name="form" method="post" action="">
NOME_____________COGNOME<br>
<input name="nome[]" type="text" /><input name="cognome[]" type="text" /><br>
<input name="nome[]" type="text" /><input name="cognome[]" type="text" /><br>
<input name="nome[]" type="text" /><input name="cognome[]" type="text" /><br>
<input name="invia" type="submit" value="Invia" />
</form>

ma credo che ora ci sarà un problema con gli array...
Quali modifiche si dovrebbero apportare allo script per aggiungere il campo 'cognome' e in futuro se ci saranno altri campi?:confused:
Ho già inserito nella tabella 'utenti' dei cognomi di prova.
Grazie infinite per l'aiuto borgo italia e scusami ancora.
 
ciao
intanto dipende da cosa vuoi fare con quei campi aggiuntivi
ripartiamo dalla tabella che evidentemente sarà del tipo
id | nome | cognome
1 | maria | pallonzi
2 | anna | pancrazi
3 | claudia | sofonisbi
4 | stefania | befani
5 | etc...
guarda che scrivo per una sola riga input e tu scrivi cosa deve fare
campo input nome | campo input cognome
1)
anna | pancrazi
qui evidente deve dare giustamente ok
2)
anna |sofonisbi
cosa deve fare?
3)
"vuoto" | pancrazi
cosa deve fare?

e considera tutt le combinazioni possibili, considerando anche che le righe di input compilate possono essere più di una
 
Ciao borgo italia e grazie ancora per la disponibilità :) , la tabella 'utenti' che ho modificato ora e così strutturata

Codice:
id | nome | cognome | email
1 | maria | rossi | [email protected]
2 | anna | bianchi | [email protected]
3 | claudia | verdi | [email protected]
4 | stefania | blu | [email protected]
5 | etc

la mia intenzione era la stessa :
inserendo nel form una o più righe che esistono mi visualizza esito positivo;
inserendo nel form una o più righe con uno o più campi errati mi visualizza esito negativo;
inserendo nel form righe che esistono e righe con campi errati mi visualizza esito negativo;
i campi vuoti non sono verificati perchè vuoti.

Mi sono trovata in difficoltà anche con i name=nome[] , utilizzo dei controlli javascript e per vari motivi dovrebbero rimanere nome1 cognome1... nome2 cognome2 etc :book: .

Spero non sia una cosa molto complessa e scusami ancora se approfitto della tua disponibilità e del tuo tempo :byebye: .
 
ciao
intanto
Mi sono trovata in difficoltà anche con i name=nome[] , utilizzo dei controlli javascript
qui non so come aiutarti perche js è ostico per me, ma se devi fare dei controlli accurati ti conviene usare php perche js può essere agevolmente aggirato

poi da quello che ho capito
1) se uno imputa
maria | rossi | [email protected]
anna | bianchi | [email protected]
claudia | verdi | [email protected]
giustamente ti da OK
2)
maria | rossi | [email protected]
anna | verdi | [email protected]
claudia | verdi | [email protected]
anna è sbagliato quindi KO
3) un campo vuoto è come se avesse sbagliato (come punto 2)
giusto?
e comunque nel form vuoi aggiungere anche l'indirizzo email?
 
Ultima modifica:
Ciao borgo italia :) ecco

1)
maria | rossi | [email protected]
anna | bianchi | [email protected]
...
"esistono nel db" (una o più righe corrispondono)
2)
maria | rossi | [email protected]
anna | verdi | [email protected]
...
"non esistono nel db" (una o più righe non corrispondono)
3)
maria | rossi | [email protected]
anna | bianchi | -vuoto-
...
"esistono nel db" (il campo vuoto non viene verificato, lo verifico io con javascript :p)

per javascript aggiungerò io degli script per dei controlli , l'unico problema e che i "name" del form siano differenziati (nome1 nome2 .... cognome1 cognome2 .. etc)

e comunque nel form vuoi aggiungere anche l'indirizzo email?

si un terzo campo per esempio email, città o altro.
Grazie in anticipo.
 

Discussioni simili

M
Risposte
12
Visite
3K
HTML e CSS
Membro cancellato 26246
M