[risolto] Problema select e verifica form

ciao
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)
come dice il saggio "non si può avere la botte piena e la moglie briaca"
per fare quello che vuoi con php servono gli array, altrimenti diventa una bibbia, e quindi non posso chiamrli nome1, nome2 ecc....
l'unica cosa che è possibile fare, anzi la faro, è dare l'indice: nome[0], nome[1] ecc.., ma non so se questo ti può andare bene con js (qui ci vorrebbe criric).
poi scusa un'altra cosa
dve essereci la corrispondenza di tutti e tre i campi di input (a parte il vuoto) o solo tra nome e cognome?
in pratica il where della query deve essere
... WHERE nome='$nome' AND cognome='$cognome'
oppure
... WHERE nome='$nome' AND cognome='$cognome' AND email='$email'
?
 
Ciao borgo italia :) , si penso che anche se i name si chiameranno nome[1] nome[2] .. cognome[1] cognome[2] .. etc possano essere inseriti per la verifica in javascript, l'importante e che abbiano qualcosa che li distingue e che la form sia sempre statica.

Per la corrispondenza, deve esistere tra i campi compilati

esempio 1:
anna | -vuoto- | [email protected]
...
"esiste nel db"

esempio 2:
-vuoto- | bianchi | [email protected]
...
"esiste nel db"

esempio 3:
anna | bianchi | -vuoto-
...
"esiste nel db"

esempio 4:
-vuoto- | -vuoto- | [email protected]
...
"esiste nel db"

esempio 5:
-vuoto- | bianchi | -vuoto-
...
"esiste nel db"

esempio 6:
anna | -vuoto- | -vuoto-
...
"esiste nel db"

esempio 7:
-vuoto- | -vuoto- | -vuoto-
...
nessun controllo


Grazie borgo italia e scusami ancora :dipser:
 
Ultima modifica:
Ancora non mi è chiaro il criterio di ricerca,cmq, il POST è già di per se un array, i nomi dei campi possono pertanto essere diversi
provate anche cosi
PHP:
<?php
if (isset($_POST['invia'])) {
    $trovato = 0;
    $sql = new mysqli("localhost", "root", "", "database");
    unset($_POST['invia']);
    $ricerca = array();
    foreach ($_POST as $key => $value) {
        $k = explode("_", $key);
        $ricerca[$k[1]][$k[0]] = $value;
    }
    foreach ($ricerca as $value) {
        $query = "SELECT nome,cognome FROM utenti WHERE ";
        foreach ($value as $k => $v) {
            $query.= "$k='$v' || ";
        }
        $query = substr($query, 0, -3);
        $result = $sql->query($query);
        if ($result->num_rows > 0) {
            $trovato = 1;
            echo "corrispondenza trovata";
            break;
        }
    }
    if ($trovato == 0) {
        echo "nessuna corrispondenza trovata";
    }
}
?>
<form name="form" method="post" action="">
    NOME_____________COGNOME<br>
    <input value="mario" name="nome_1" type="text" /><input value="rossi" name="cognome_1" type="text" /><br>
    <input value="franco" name="nome_2" type="text" /><input value="nero" name="cognome_2" type="text" /><br>
    <input value="paolo" name="nome_3" type="text" /><input value="bianchi" name="cognome_3" type="text" /><br>
    <input name="invia" type="submit" value="Invia" />
</form>
ho aggiunto un underscore nel name per poter separate il nome del campo dal numero
in questo modo dovresti poter aggungere tutti i campi che vuoi senza toccare lo script php
non avevo voglia di crearmi una tabella perciò non ho testato
 
ciao
provo a tirare fuori qualcosa

Grazie mille borgo italia :)


Ancora non mi è chiaro il criterio di ricerca,cmq, il POST è già di per se un array, i nomi dei campi possono pertanto essere diversi
provate anche cosi
...
ho aggiunto un underscore nel name per poter separate il nome del campo dal numero
in questo modo dovresti poter aggungere tutti i campi che vuoi senza toccare lo script php
non avevo voglia di crearmi una tabella perciò non ho testato

Ciao criric :) , ho provato lo script ma funziona in modo strano :dipser: :

inserendo in una o più righe nome e cognome errati mi dice "corrispondenza trovata";
inserendo tutti i campi di tutte le righe errati mi dice "nessuna corrispondenza trovata";
inserendo combinazioni di nomi e cognomi sia giusti che errati mi dice "corrispondenza trovata";

La parte interesante e il funzionamento dei name dato che si possono aggiungere altre righe e numerarli in modo sequenziale.;)
Grazie per l'aiuto criric
 
:dipser: mi rispieghi come dovrebbe essere la ricerca? :crying:
 
Forse ho capito
modifica questo ciclo
PHP:
 foreach ($value as $k => $v) {
            $query.= "$k='$v' || ";
        }
cosi
PHP:
foreach ($value as $k => $v) {
            if (!empty($v)) {
                $query.= "$k='$v' && ";
            }
        }
 
Ciao criric e grazie dell'aiuto :) , ho modificato il ciclo come hai detto ma funziona ancora in modo strano :dipser: :

inserendo in una o più righe nome e cognome errati mi dice "corrispondenza trovata";
inserendo tutti i campi di tutte le righe errati mi dice "nessuna corrispondenza trovata";
inserendo una sola riga esistente e più righe errate mi dice "corrispondenza trovata";

:dipser: mi rispieghi come dovrebbe essere la ricerca? :crying:

Tabella utenti:
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

Ecco alcuni esempi:

[table="width: 200, class: grid"]
[tr]
[td]Nome[/td]
[td]Cognome[/td]
[td]Email[/td]
[/tr]
[tr]
[td]maria[/td]
[td]rossi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]anna[/td]
[td]bianchi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]claudia[/td]
[td]verdi[/td]
[td][email protected][/td]
[/tr]
[/table]echo "corrispondenze trovate";

[table="width: 200, class: grid"]
[tr]
[td]Nome[/td]
[td]Cognome[/td]
[td]Email[/td]
[/tr]
[tr]
[td]claudia[/td]
[td]verdi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]anna[/td]
[td]bianchi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]claudia[/td]
[td]verdi[/td]
[td][/td]
[/tr]
[/table]echo "corrispondenze trovate";

[table="width: 200, class: grid"]
[tr]
[td]Nome[/td]
[td]Cognome[/td]
[td]Email[/td]
[/tr]
[tr]
[td]anna[/td]
[td]bianchi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]claudia[/td]
[td]verdi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td][/td]
[td][/td]
[td][/td]
[/tr]
[/table]echo "una o più corrispondenze non trovate";

[table="width: 200, class: grid"]
[tr]
[td]Nome[/td]
[td]Cognome[/td]
[td]Email[/td]
[/tr]
[tr]
[td][/td]
[td]rossi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]anna[/td]
[td][/td]
[td][email protected][/td]
[/tr]
[tr]
[td]claudia[/td]
[td]verdi[/td]
[td][/td]
[/tr]
[/table]echo "corrispondenze trovate";

[table="width: 200, class: grid"]
[tr]
[td]Nome[/td]
[td]Cognome[/td]
[td]Email[/td]
[/tr]
[tr]
[td]anna[/td]
[td]rossi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]maria[/td]
[td]verdi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td]claudia[/td]
[td]bianchi[/td]
[td][email protected][/td]
[/tr]
[/table]echo "una o più corrispondenze non trovate";

[table="width: 200, class: grid"]
[tr]
[td]Nome[/td]
[td]Cognome[/td]
[td]Email[/td]
[/tr]
[tr]
[td]anna[/td]
[td]bianchi[/td]
[td][email protected][/td]
[/tr]
[tr]
[td][/td]
[td][/td]
[td][/td]
[/tr]
[tr]
[td][/td]
[td][/td]
[td][/td]
[/tr]
[/table]echo "corrispondenze trovate";

Grazie in anticipo per l'aiuto :book:
 
Ultima modifica:
ciao
prova questo
casi, ti scrivo per una riga:
se
pieno | pieno | pieno
vuoto | pieno | pieno
pieno | vuoto | pieno
pieno | pieno | vuoto
effettua la ricerca
se solo uno pieno o nessun pieno non effettuala la ricerca per quella riga
(in teoria potresti compilare solo la seconda o la terza)
da il risultato OK (ho messo un var_dump) solo se
a) riempi una riga sola e trova la corrispondenza
b) riempi due righe e trova la corrispondenza di entrambe
c) riempi tre righe e trova la corrispondenza di tutte e tre
altrimenti ti da corrispondenza non trovata
provalo così cercando di fare tutte le combinazioni possibili per vedere se è quello che volevi
due cose:
1. lo script funziona di sicuro sino alla costruzione della/e querystringe (vedi primo var_dump)
2. non mi sono fatto il db quindi devi provarlo tu, verifica che abbia messo giusti i nomi dei campi
3. ho modificato leggermente il form

PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	//dati di connessione
	$num_campi=count($_POST['nome']);
	unset($_POST['invia'], $_POST['num_campi']);
	for($k=0; $k < $num_campi; $k++){
		if(isset($_POST['nome'][$k])){
			if(trim($_POST['nome'][$k]!="")){$trova[]=" nome='".$_POST['nome'][$k]."'";}
		}
		if(isset($_POST['cognome'][$k])){
			if(trim($_POST['cognome'][$k])!=""){$trova[]=" cognome='".$_POST['cognome'][$k]."'";}
		}
		if(isset($_POST['email'][$k])){
			if(filter_var($_POST['email'][$k], FILTER_VALIDATE_EMAIL)){$trova[]=" email='".$_POST['email'][$k]."'";}
		}
		if(is_array($trova)){
			$wh=implode(' AND ', $trova);
			if($wh!="" && count($trova)> 1){
				$query="SELECT * FROM utenti WHERE $wh";
				//sino a qui funziona, dopo non so perchè non ho fatto la tabella
				echo "<pre>";
				var_dump($query);//poi lo togli e anche gli echo pre
				echo "</pre>";
				$ris=mysql_query($query);
				if(mysql_num_rows($ris)==0){
					echo "una o più righe non trovate";
					//e ritorno al form dopo  secondi
					echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
				}else{
					//non so cosa vuoi fare io ti metto che prendi i dati
					$riga[]=mysql_fetch_array($ris);
				}
			}else{
				echo "campi non compilati<br>";
			}
		}
		unset($trova);
	}
	echo "<pre>";
	//qui vedo i dati trovati , vedi poi te dove rinviare e cosa fare
	if(is_array($riga)) echo "trovata corrispondenza<br>";var_dump($riga);
	echo "</pre>";
}
?>
<form name="form" method="post" action="">
<table width="50%"  border="0" cellspacing="0" cellpadding="3">
  <tr>
    <td width="7%">riga</td>
	<td width="31%">nome</td>
    <td width="31%">cognome</td>
    <td width="31%">email</td>
  </tr>
<?php 
$quanti_campi=3;
for($k=0; $k<$quanti_campi;$k++){
	echo "<tr><td>".($k+1)."</td>";
	echo"<td><input name=\"nome[$k]\" type=\"text\" /></td>";
	echo "<td><input name=\"cognome[$k]\" type=\text\" /></td>";
	echo "<td><input name=\"email[$k]\" type=\"text\" /></td></tr>";
}
?>
<tr>
    <td>&nbsp;</td>
	<td>&nbsp;</td>
    <td>&nbsp;</td>
    <td><input name="invia" type="submit" value="Invia" /></td>
</tr>
<tr>
    <td colspan="4">obbligatori almeno due campi per riga</td>
	</tr>
</table>
</form>
</body>
</html>
 
Ciao borgo italia e grazie mille per la tua disponibilità ;) scusami se ti rispondo solo ora ma sono stata tutto il pomeriggio a fare delle prove con lo script che hai creato :o .
Questi sono i risultati generati dal tuo script:
pieno | pieno | vuoto ---> "trovata corrispondenza" ok
pieno | pieno | pieno ---> "trovata corrispondenza" ok
pieno | pieno | errato ---> "trovata corrispondenza" :dipser:
pieno | vuoto | vuoto ---> "una o più righe non trovate" ok
pieno | errato | errato ---> "una o più righe non trovate" ok

ho modificato questa parte di codice:
PHP:
        if(isset($_POST['nome'][$k])){
            if(trim($_POST['nome'][$k]!="")){$trova[]=" nome='".$_POST['nome'][$k]."'";}
        }
        if(isset($_POST['cognome'][$k])){
            if(trim($_POST['cognome'][$k])!=""){$trova[]=" cognome='".$_POST['cognome'][$k]."'";}
        }
        if(isset($_POST['email'][$k])){
            if(filter_var($_POST['email'][$k], FILTER_VALIDATE_EMAIL)){$trova[]=" email='".$_POST['email'][$k]."'";}
        }

con

PHP:
        if(isset($_POST['nome'][$k])){
            if(trim($_POST['nome'][$k]!="")){$trova[]=" nome='".$_POST['nome'][$k]."'";}
        }
        if(isset($_POST['cognome'][$k])){
            if(trim($_POST['cognome'][$k]!="")){$trova[]=" cognome='".$_POST['cognome'][$k]."'";}
        }
        if(isset($_POST['email'][$k])){
            if(trim($_POST['email'][$k]!="")){$trova[]=" email='".$_POST['email'][$k]."'";}
        }

ed i risultati sono stati:
pieno | pieno | vuoto ---> "trovata corrispondenza" ok
pieno | pieno | pieno ---> "trovata corrispondenza" ok
pieno | pieno | errato ---> "una o più righe non trovate" ok
pieno | vuoto | vuoto ---> "una o più righe non trovate" ok
pieno | errato | errato ---> "una o più righe non trovate" ok

la verifica ora funziona ;) unica anomalia sono gli echo generati :dipser:
esempio:
1 | pieno | pieno | pieno
2 | pieno | pieno | errato
mi genera "trovata corrispondenza" "una o più righe non trovate" insieme
oppure
1 | pieno | pieno | pieno
2 | pieno | pieno | errato
3 | pieno | pieno | errato
mi genera "trovata corrispondenza" "una o più righe non trovate" "una o più righe non trovate" insieme

Inoltre spero ci sia un modo per rendere la form statica e non dinamica (array) senza stravolgere l'intero script :book:

Grazie ancora dell'aiuto borgo italia
 
Ciao borgo italia :) ho modificato la form da dinamica a statica :

PHP:
<?php

if(isset($_POST['invia'])){
    //dati di connessione
    $num_campi=count($_POST['nome']);
    unset($_POST['invia'], $_POST['num_campi']);
    for($k=0; $k < $num_campi; $k++){
        if(isset($_POST['nome'][$k])){
            if(trim($_POST['nome'][$k]!="")){$trova[]=" nome='".$_POST['nome'][$k]."'";}
        }
        if(isset($_POST['cognome'][$k])){
            if(trim($_POST['cognome'][$k]!="")){$trova[]=" cognome='".$_POST['cognome'][$k]."'";}
        }
        if(isset($_POST['email'][$k])){
            if(trim($_POST['email'][$k]!="")){$trova[]=" email='".$_POST['email'][$k]."'";}
        }
        if(is_array($trova)){
            $wh=implode(' AND ', $trova);
            if($wh!="" && count($trova)> 1){
                $query="SELECT * FROM utenti WHERE $wh";
                $ris=mysql_query($query);
                if(mysql_num_rows($ris)==0){
				echo "non esiste";
                }else{

                $riga[]=mysql_fetch_array($ris);
                }
            }
        }
        unset($trova);
    }

	if(is_array($riga))
	echo "esiste";
}
?>
<form name="form" method="post" action="">
<table width="50%"  border="0" cellspacing="0" cellpadding="3">
<tr>
	<td width="7%">riga</td>
	<td width="31%">nome</td>
	<td width="31%">cognome</td>
	<td width="31%">email</td>
</tr>
<tr>
	<td>1</td>
	<td><input name="nome[0]" type="text" /></td>
	<td><input name="cognome[0]" type=	ext" /></td>
	<td><input name="email[0]" type="text" /></td>
</tr>
<tr>
	<td>2</td>
	<td><input name="nome[1]" type="text" /></td>
	<td><input name="cognome[1]" type=	ext" /></td>
	<td><input name="email[1]" type="text" /></td>
</tr>
<tr>
	<td>3</td><td><input name="nome[2]" type="text" /></td>
	<td><input name="cognome[2]" type=	ext" /></td>
	<td><input name="email[2]" type="text" /></td>
</tr>
<tr>
	<td>&nbsp;</td>
	<td>&nbsp;</td>
	<td>&nbsp;</td>
	<td><input name="invia" type="submit" value="Invia" /></td>
</tr>
<tr>
	<td colspan="4">obbligatori almeno due campi per riga</td>
</tr>
</table>
</form>

funziona bene , ora e rimasto solo il problema degli echo ripetuti se ci sono più campi errati ;)
:byebye:
 
Ultima modifica:
ciao
prova questo
aggiungi e/o modifica righe con //*** e guarda anche i commenti
PHP:
<?php
if(isset($_POST['invia'])){
    //dati di connessione
    $num_campi=count($_POST['nome']);
    unset($_POST['invia'], $_POST['num_campi']);
    $esiste_si="";//***
	$esiste_no="";//***
	for($k=0; $k < $num_campi; $k++){
        if(isset($_POST['nome'][$k])){
            if(trim($_POST['nome'][$k]!="")){$trova[]=" nome='".$_POST['nome'][$k]."'";}
        }
        if(isset($_POST['cognome'][$k])){
            if(trim($_POST['cognome'][$k]!="")){$trova[]=" cognome='".$_POST['cognome'][$k]."'";}
        }
        if(isset($_POST['email'][$k])){
            if(trim($_POST['email'][$k]!="")){$trova[]=" email='".$_POST['email'][$k]."'";}
        }
        if(is_array($trova)){
            $wh=implode(' AND ', $trova);
            if($wh!="" && count($trova)> 1){
                $query="SELECT * FROM utenti WHERE $wh";
                $ris=mysql_query($query);
                if(mysql_num_rows($ris)==0){
                $esiste_no="una o più righe non trovata";//***
				//echo "non esiste";//e questa la commenti per ora
                }else{
				$esiste_si="corrispondenza trovata";//***
                //$riga[]=mysql_fetch_array($ris);//questa la commenti per ora
                }
            }
        }
        unset($trova);
    }
	//***
	//e aggiungi queste righe
	if($esiste_no==""){
		echo $esiste_si;
	}else{
		echo $esiste_no;
	}
    //if(is_array($riga) && $flag ==0) echo "esiste";//questa la commenti per ora
}
?>
 
Ciao borgo italia :) grazie mille funziona benissimo ;) , volevo chiederti la parte di codice
PHP:
{
                $esiste_no="una o più righe non trovata";
                }else{
                $esiste_si="corrispondenza trovata";
                }

può essere modificata con

PHP:
{
                echo "una o più righe non trovata";
                }else{
                echo "corrispondenza trovata";
                }

Grazie in anticipo :)
 
ciao
mi sembra di si, comunque il metodo migliore è provare.
ti do un consiglio e non solo per questo
quando provi a cambiare commenta la veccia riga e sotto scrivi la nuova così ti rendi conto di quello che succede e si sbaglia meno a tornare indietro es
PHP:
<?php
//........
if($esiste_no==""){
        //echo $esiste_si;
        echo "una o più righe non trovata";
    }else{
       //echo $esiste_no;
       echo "corrispondenza trovata";
    } 
//........
?>
quando hai finito e tutto è ok se vuoi puoi ripulire lo script dalle righe inutili
 
ciao
mi sembra di si, comunque il metodo migliore è provare.
ti do un consiglio e non solo per questo
quando provi a cambiare commenta la veccia riga e sotto scrivi la nuova così ti rendi conto di quello che succede e si sbaglia meno a tornare indietro es

...

quando hai finito e tutto è ok se vuoi puoi ripulire lo script dalle righe inutili

Ciao borgo italia :) , grazie mille per i tuoi consigli :book: , ho modificato e commentato la parte di codice da te suggerito , ma non funziona correttamente:

PHP:
...
                if(mysql_num_rows($ris)==0){
                $esiste_no // ho eliminato una parte di questa riga
                // $esiste_no="una o più righe non trovata";//***
                //echo "non esiste";//e questa la commenti per ora
                }else{
                $esiste_si // ho eliminato una parte di questa riga
                // $esiste_si="corrispondenza trovata";//***
                //$riga[]=mysql_fetch_array($ris);//questa la commenti per ora
                }
            }
        }
        unset($trova);
    }
    //***
    //e aggiungi queste righe
if($esiste_no==""){
        //echo $esiste_si;
        echo "una o più righe non trovata";
    }else{
       //echo $esiste_no;
       echo "corrispondenza trovata";
    } 
...

penso che l'errore sia quasi sicuramente in $esiste_no ed $esiste_si :dipser:
Grazie ancora per la disponibilità e la pazienza 0:)
 
ciao
allora, se come avevo fatto io funziona, lascialo così.
che fastidio ti da?

Ciao borgo italia :) , il problema era in questa parte di codice

PHP:
{
                $esiste_no="una o più righe non trovata";
                }else{
                $esiste_si="corrispondenza trovata";
                }

lo script funzionava perfettamente ma se inserivo nuovi contenuti tra gli apici (es javascript) anche modificando tutti (") con (\") non funzionavano in modo corretto :( , invece con gli echo basta soltanto sostituire echo "..."; con <script>...</script> e il tutto funziona 0:)

Spero si possa modificare :)
Grazie in anticipo
 
Ciao borgo italia :) , scusami se rispondo solo ora ma sono stata impegnata con ulteriori modifiche :book:.
Alla fine dopo varie prove e ricerche ho modificato la struttura con la sintassi 'heredoc' :

PHP:
<?php




...
        if(is_array($trova)){
            $wh=implode(' AND ', $trova);
            if($wh!="" && count($trova)> 1){
                $query="SELECT * FROM utenti WHERE $wh";
                $ris=mysql_query($query);
                if(mysql_num_rows($ris)==0){
                $esiste_no="
                <script>
                alert (/"una o più righe non trovate/");                
                </script>
                ";//***
                //echo "non esiste";//e questa la commenti per ora
                }else{
                $esiste_si="
                ... // inizio codice php (<?)
                $form = <<<DH
                <html>
                <script>
                ... // contenuto
                </script>
                </html>
                DH;
                ... // fine codice php (?>)
                ";
                //$riga[]=mysql_fetch_array($ris);//questa la commenti per ora
                }
                }
                }
...


?>

in questo modo sono riuscita a inserire sia html che javascript senza modificare tutti gli apici e parentesi varie, altrimenti sarei impazzita :rolleyes:

Grazie di tutto :), per l'aiuto e la disponibilità ma soprattutto per la pazienza avuta nei miei confronti 0:)
Grazie per l'aiuto anche a criric ;)
Buona domenica ad entrambi :byebye:
 

Discussioni simili

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