problema verifica dati

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

E' da poco che ho iniziato ajax. Ho trovato questo codice per verificare se lo username è già presente nel db o meno, ma non funziona lo poato di seguito:

controllaesistenza.js
Codice:
function controllaEsistenza()
{
root_sito = '';
var testo = document.getElementById('username');
var messaggio = document.getElementById('messaggio');
user = testo.value;

codice = '';
msg = '';
oggettoAJAX=creaRichiestaAjax();
oggettoAJAX.onreadystatechange=function()
{
if(oggettoAJAX.readyState==4)
{
eval("result = "+oggettoAJAX.responseText);
codice = result['codice'];
msg = result['result'];

if(codice <=0){
testo.style.border = "1px solid red";
messaggio.style.color = "red";
}
else{
testo.style.border = "1px solid green";
messaggio.style.color = "green";
}
messaggio.innerHTML = msg;
}
}
oggettoAJAX.open("GET",root_sito+"controlla.php?username="+user,true);
oggettoAJAX.send(null);
}

controlloins.php

PHP:
require_once("connetti.php");

//Controlli sullo username per eliminare caratteri speciali
$username = strip_tags(trim($_REQUEST['username']));

//Se la lunghezza della username è minore di 8 creo l'interscambio JSON che comunica l'errore
if(strlen($username) <= 7){
echo json_encode(array('codice' => -1, 'result' => 'Username non valido, inserisci almeno 8 caratteri.'));
die;
}

// Inserisci la query che controlla nel database

$checkusername=mysql_query("SELECT username FROM utenti WHERE username='$username'");
$vuota=mysql_num_rows($checkusername);
if($vuota > 0){
	echo "<br> <br> <h1> Attenzione: lo username: ".$username." è già presente nell'archivio. Si prega di cambiare username. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();

}
if($available){     // qua mi da errore sottolinea la variabile $available in rosso

echo json_encode(array('codice' => 1, 'result' => "Username disponibile"));
die;
}else{
echo json_encode(array('codice' => 0, 'result' => "Username già utilizzato"));
die;
}
die;
?>

inndati.php (che sarebbe insdati errore di digirura mio):

PHP:
<?php
require_once("connetti.php");
?>

<input type="text" id="username" name="username" />
<input type="button" value="Controlla Disponibilita'" onclick="controllaEsistenza();"/>
<div id="messaggio">&nbsp;</div>

Il link da cui l'ho preso è il seguente, lo posto in quanto magari potrei aver interpretato male qualcosa:

http://http://www.danieletabacco.com/64/articolo/realizzare-un-form-con-ajax-e-php-in-maniera-semplice.html

Spero che qualcuno mi aiuti, sono giorni che cerco un codice del genere possibilmente funzionante. Grazie a tutti.

P.S.: [JS] E [/JS], sono i tag per javascript, non sapevo cosa metterci scusate se ho sbagliato.... Anzi se ci sonod ei tag me li dite per favore ??? Grazie.
 
Ultima modifica di un moderatore:
ciao
se il file si chiama controlloins.php
qui stai chiamando un altro file (controlla.php)
Codice:
oggettoAJAX.open("GET",root_sito+"controlla.php?username="+user,true);
 
Ciao

Ciao CricRic e un saluto a tutti quanti,

Mi hanno passato questo codice ajax ma mi da un sacco di errori:

PHP:
<script>
function inviare(type, value)
{
 $.ajax({
  type: 'GET',
  url: 'confronta_value.php',
  data: {campo: type, var: value},     //errore
  beforeSend: function(){$('#controlla'+type).html('Sto considerando...');}  //errore
 }).done(function(trasmissione){    //errore
  $('#controlla'+type).html(trasmissione);});   /errore

</script>
<form action='registrazione.php' method='POST'>
	<input type='text' name='nome'/><br/>
	<!-- qui inserisco gli elementi laddove devo far la conferma asincronica , stai attento ad assicurarti che nella stringa:
	"password", così come "email" o qualsiasi cosa a te serva sia  proprio come c'è nel tuo db, esempio: se tu hai una tabella
        utenti dove ci sono campi chiamati:
	nome, password e email, assicurati che la stringa che sta nella funzione inviare("") sia letteralmente o password o nome o email), quindi
	inviare("nome",this.value) o "inviare("password",this.value) o inviare("email",this.value)
	-->
	<input type='text' name='password' onkeyup='inviare("password",this.value)'/> <div id='controllapassword'></div>
	<input type='text' name='email' onkeyup='inviare("email",this.value)'/> <div id='controllaemail'></div>
</form>

E si ferma il tutto non capisco dove possa stare l'errore. Mi potete dare un'occhiata per favore ??? Grazie.
 
modifica lo script cosi
Codice:
     <script>
            function inviare(type, value)
            {
                $.ajax({
                    type: 'GET',
                    url: 'confronta_value.php',
                    data: type + "=" + value,
                    beforeSend: function(){
                        $('#controlla'+type).html('Sto considerando...');
                    }
                }).done(function(trasmissione){ 
                    $('#controlla'+type).html(trasmissione);
                }); 
            }

        </script>
 
Ciao

modifica lo script cosi
Codice:
     <script>
            function inviare(type, value)
            {
                $.ajax({
                    type: 'GET',
                    url: 'confronta_value.php',
                    data: type + "=" + value,
                    beforeSend: function(){
                        $('#controlla'+type).html('Sto considerando...');
                    }
                }).done(function(trasmissione){ 
                    $('#controlla'+type).html(trasmissione);
                }); 
            }

        </script>
Ciao cricric,

Allora, ho provato il tuo script e l'rrore è sparito ma mi da il seguente errore quando lo vado ad eseguire:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /volume1/web/utenti/inserimentodatacontrollojava/iscrizioneajax.php on line 43 V

Ora ti posto tutto quanto e spero che ci capirai qualcosa meglio di me sicuramente. Grazie.

PHP:
<!--questa è per la pagina dove vi si trova il modulo da compilare (esempio) -->
<!--carico nelle cache la libreria jquery per far funzionare il jquery -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<!--creo ora uno script dove inserisco una funzione per mandare e confrontare gli input del form -->
<script>
            function inviare(type, value)
            {
                $.ajax({
                    type: 'GET',
                    url: 'confronta_value.php',
                    data: type + "=" + value,
                    beforeSend: function(){
                        $('#controlla'+type).html('Sto considerando...');
                    }
                }).done(function(trasmissione){ 
                    $('#controlla'+type).html(trasmissione);
                }); 
            }

        </script>
<form action='registrazione.php' method='POST'>
	<input type='text' name='nome'/><br/>
	<!-- qui inserisco gli elementi laddove devo far la conferma asincronica , stai attento ad assicurarti che nella stringa:
	"password", così come "email" o qualsiasi cosa a te serva sia  proprio come c'è nel tuo db, esempio: se tu hai una tabella
        utenti dove ci sono campi chiamati:
	nome, password e email, assicurati che la stringa che sta nella funzione inviare("") sia letteralmente o password o nome o email), quindi
	inviare("nome",this.value) o "inviare("password",this.value) o inviare("email",this.value)
	-->
	<input type='text' name='password' onkeyup='inviare("password",this.value)'/> <div id='controllapassword'></div>
	<input type='text' name='email' onkeyup='inviare("email",this.value)'/> <div id='controllaemail'></div>
</form>

<!-- qui sotto il codice per controllare (nel nel nostro esempio la pagina si chiama: confronta_value.php -->
<?php

require_once("connetti.php");
#prelevo il valore della variabile di richiesta del form
$campo = $_POST['campo'];
$var = $_POST['valore'];
#creo al query
$query = "SELECT ".$campo." FROM utenti WHERE ".$campo." LIKE %".$var."%";
#controllo esistenza
$num = mysql_num_rows(mysql_query($query));
if($num > 0)
{
	echo "X"; #vuol dire che già esiste
}
else
{
	echo "V"; #vuol dire che non esiste
}
?>
Aspetto tue notizie quando puoi ovviamente. Grazie.
 
ciao
var_dump!! var_dump!! var_dump......
PHP:
//....
#creo al query
$query = "SELECT ".$campo." FROM utenti WHERE ".$campo." LIKE %".$var."%";
var_dump($query);
//....
la query viene scritta come dovrebbe?
 
Ciao

Ciao Borgo,

Tanti auguri di buon natale e felcie anno nuovo. Spero di che sia corretta la query. Ora metto il var_dump sotto la query.
Mi restituiscie la seguente cosa:

string(34) "SELECT FROM utenti WHERE LIKE %%" //Cosa vuol dire ????

E poi parte l'errore

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /volume1/web/utenti/inserimentodatacontrollojava/iscrizioneajax.php on line 45 V
 
Ciao Borgo,

Tanti auguri di buon natale e felcie anno nuovo. Spero di che sia corretta la query. Ora metto il var_dump sotto la query.
Mi restituiscie la seguente cosa:

string(34) "SELECT FROM utenti WHERE LIKE %%" //Cosa vuol dire ????

E poi parte l'errore

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /volume1/web/utenti/inserimentodatacontrollojava/iscrizioneajax.php on line 45 V
Nella query le variabili recuperate sono vuote, quindi o non sono compilate oppure leggi quelle sbagliate, infatti tu non controlli che lo siano prima di recuperarle e inoltre mi pare di notare che non ci sono variabili POST con quei nomi e quelle mandate dall'ajax sono di tipo GET e hanno ugualmente nomi differenti
 
Ultima modifica:
Prova un po cosi

pagina della richiesta
Codice:
<!--questa è per la pagina dove vi si trova il modulo da compilare (esempio) --> 
<!--carico nelle cache la libreria jquery per far funzionare il jquery --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
<!--creo ora uno script dove inserisco una funzione per mandare e confrontare gli input del form --> 
<script> 
            function inviare(type, value) 
            { 
                $.ajax({ 
                    type: 'POST', 
                    url: 'confronta_value.php',
                    data: {'campo':type,'valore':value}, 
                    beforeSend: function(){ 
                        $('#controlla'+type).html('Sto considerando...'); 
                    } 
                }).done(function(trasmissione){  
                    $('#controlla'+type).html(trasmissione); 
                });  
            } 

        </script> 
<form action='registrazione.php' method='POST'> 
    <input type='text' name='nome'/><br/> 
    <!-- qui inserisco gli elementi laddove devo far la conferma asincronica , stai attento ad assicurarti che nella stringa: 
    "password", così come "email" o qualsiasi cosa a te serva sia  proprio come c'è nel tuo db, esempio: se tu hai una tabella 
        utenti dove ci sono campi chiamati: 
    nome, password e email, assicurati che la stringa che sta nella funzione inviare("") sia letteralmente o password o nome o email), quindi 
    inviare("nome",this.value) o "inviare("password",this.value) o inviare("email",this.value) 
    --> 
    <input type='text' name='password' onkeyup='inviare("password",this.value)'/> <div id='controllapassword'></div> 
    <input type='text' name='email' onkeyup='inviare("email",this.value)'/> <div id='controllaemail'></div> 
</form>

confronta_value.php
PHP:
<?php 
require_once("connetti.php"); 
#controllo che i campi siano compilati
if(!empty($_POST['campo']) && !empty($_POST['valore'])){
#li rendo sicuri per la query
$campo = mysql_real_escape_string($_POST['campo']);
$var = mysql_real_escape_string($_POST['valore']); 
#eseguo la query
$query = mysql_query("SELECT ".$campo." FROM utenti WHERE ".$campo." LIKE %".$var."%") or die(mysql_error()); 
#controllo esistenza e stampo l'output
echo mysql_num_rows($query)>0 ? 'X' : 'V';
}
?>
 
Ciao

Prova un po cosi

pagina della richiesta
Codice:
<!--questa è per la pagina dove vi si trova il modulo da compilare (esempio) --> 
<!--carico nelle cache la libreria jquery per far funzionare il jquery --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
<!--creo ora uno script dove inserisco una funzione per mandare e confrontare gli input del form --> 
<script> 
            function inviare(type, value) 
            { 
                $.ajax({ 
                    type: 'POST', 
                    url: 'confronta_value.php',
                    data: {'campo':type,'valore':value}, 
                    beforeSend: function(){ 
                        $('#controlla'+type).html('Sto considerando...'); 
                    } 
                }).done(function(trasmissione){  
                    $('#controlla'+type).html(trasmissione); 
                });  
            } 

        </script> 
<form action='registrazione.php' method='POST'> 
    <input type='text' name='nome'/><br/> 
    <!-- qui inserisco gli elementi laddove devo far la conferma asincronica , stai attento ad assicurarti che nella stringa: 
    "password", così come "email" o qualsiasi cosa a te serva sia  proprio come c'è nel tuo db, esempio: se tu hai una tabella 
        utenti dove ci sono campi chiamati: 
    nome, password e email, assicurati che la stringa che sta nella funzione inviare("") sia letteralmente o password o nome o email), quindi 
    inviare("nome",this.value) o "inviare("password",this.value) o inviare("email",this.value) 
    --> 
    <input type='text' name='password' onkeyup='inviare("password",this.value)'/> <div id='controllapassword'></div> 
    <input type='text' name='email' onkeyup='inviare("email",this.value)'/> <div id='controllaemail'></div> 
</form>

confronta_value.php
PHP:
<?php 
require_once("connetti.php"); 
#controllo che i campi siano compilati
if(!empty($_POST['campo']) && !empty($_POST['valore'])){
#li rendo sicuri per la query
$campo = mysql_real_escape_string($_POST['campo']);
$var = mysql_real_escape_string($_POST['valore']); 
#eseguo la query
$query = mysql_query("SELECT ".$campo." FROM utenti WHERE ".$campo." LIKE %".$var."%") or die(mysql_error()); 
#controllo esistenza e stampo l'output
echo mysql_num_rows($query)>0 ? 'X' : 'V';
}
?>
Allora,

Ho fatto come mi hai detto e mi restituisce il seguente errore:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%pippo%' at line 1

Però manca la pagina della registrazione

Perchè tu mi hai messo questa riga ovviamente:

PHP:
<form action='registrazione.php' method='POST'>
 
Prova a modificare la query cosi
PHP:
$query = mysql_query("SELECT $campo FROM utenti WHERE $campo LIKE '%$var%'") or die(mysql_error());
 
Ciao

Ciao Nefyt,

Allora ti posto come ho fatto, tante volte avessi sbagliato qualcosa ma non credo.

confrontavalue.php

PHP:
<?php
require_once("connetti.php"); 
#controllo che i campi siano compilati
if(!empty($_POST['campo']) && !empty($_POST['valore'])){
#li rendo sicuri per la query
$campo = mysql_real_escape_string($_POST['campo']);
$var = mysql_real_escape_string($_POST['valore']); 
#eseguo la query
 $query = mysql_query("SELECT $campo FROM utenti WHERE $campo LIKE '%$var%'") or die(mysql_error()); // QUery nuova da provare ancora
echo mysql_num_rows($query)>0 ? 'X' : 'V';
}
?>

provadellarichiesta.php

PHP:
<!--questa è per la pagina dove vi si trova il modulo da compilare (esempio) --> 
<!--carico nelle cache la libreria jquery per far funzionare il jquery --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
<!--creo ora uno script dove inserisco una funzione per mandare e confrontare gli input del form --> 
<script> 
            function inviare(type, value) 
            { 
                $.ajax({ 
                    type: 'POST', 
                    url: 'confrontavalue.php',
                    data: {'campo':type,'valore':value}, 
                    beforeSend: function(){ 
                        $('#controlla'+type).html('Sto considerando...'); 
                    } 
                }).done(function(trasmissione){  
                    $('#controlla'+type).html(trasmissione); 
                });  
            } 

        </script> 
<form action='registrazione.php' method='POST'> 
    <input type='text' name='nome'/><br/> 
    <!-- qui inserisco gli elementi laddove devo far la conferma asincronica , stai attento ad assicurarti che nella stringa: 
    "password", così come "email" o qualsiasi cosa a te serva sia  proprio come c'è nel tuo db, esempio: se tu hai una tabella 
        utenti dove ci sono campi chiamati: 
    nome, password e email, assicurati che la stringa che sta nella funzione inviare("") sia letteralmente o password o nome o email), quindi 
    inviare("nome",this.value) o "inviare("password",this.value) o inviare("email",this.value) 
    --> 
    <input type='text' name='password' onkeyup='inviare("password",this.value)'/> <div id='controllapassword'></div> 
    <input type='text' name='email' onkeyup='inviare("email",this.value)'/> <div id='controllaemail'></div> 
</form>

Questo è qyuanto manca sempre la pagina inidicata neltag <form> chiamata "registrazione.php"

L'unico dubbio cosa ci odvrei mettere in quella pagina ??? Solo la query per memorizzare il tutto nel db ???

Ok Allora le "V" compaiono, le "X" non so quando dovrebbero comparire. Però sei riuscito a sistemare la questione. Ora mi si presentano 3 campi, cosa sono quei tre campi ???? Ossometterci "Nome", "username", e "email" e vedere come si comporta se effettivamente fa il controllo nel db ????
 
Ultima modifica:
Ciao

Ciao Nefyt,

Ho risolto il problema. Ho capito perchè non andava. In pratica nella pagina chiamata "provadellarichiesta.php", non avevp messo la configurazione al db ossia il file di richiamo connetti. Infatti, messo quello all'inizio pagina prima dell'html, mi risulta tranquillamente che l'email è occupata :P Una cosa ora, voelvo metterci delle iconcine a postso della "V" e della "X" comedebbo fare ???
 
Ciao Nefyt,

Ho risolto il problema. Ho capito perchè non andava. In pratica nella pagina chiamata "provadellarichiesta.php", non avevp messo la configurazione al db ossia il file di richiamo connetti. Infatti, messo quello all'inizio pagina prima dell'html, mi risulta tranquillamente che l'email è occupata :P Una cosa ora, voelvo metterci delle iconcine a postso della "V" e della "X" comedebbo fare ???
In che senso delle iconcine? Delle immagini? In tal caso ti basta usare un semplice tag img in html ad esempio copiando l'url dell'immagine
 
Ciao

Ok ci proverò. Un ultima cosa, quando vado a loggarmi, nella pagina di login devo cambiare qualcosa ??? Come faccio la verifica della password ??? io ho questa stringa:

PHP:
 $nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
 $cognome = mysql_real_escape_string(strtolower(trim ($_POST['cognome'])));
 $username = mysql_real_escape_string(strtolower(trim ($_POST['username'])));
 $password = mysql_real_escape_string(trim ($_POST['password']));
 $passw = mysql_real_escape_string(trim ($_POST['passw']));
 $email = mysql_real_escape_string(trim ($_POST['email']));
 $ripemail = mysql_real_escape_string(trim ($_POST['ripemail']));

//crittografa la passowrod

$pass = mysql_real_escape_string(md5(trim($_POST['password'])));
 
// verifico la presenza dei campi obbligator
    
$ok_ko ="";

 //controllo campi compilati

if($nome ==""){$ok_ko .=  "Attenzione: il campo nome deve essere compilato. <br> <br>";}
if($cognome ==""){$ok_ko .=  "Attenzione: il campo cognome deve essere compilato. <br> <br>";}
if($username ==""){$ok_ko .=  "Attenzione: il campo username deve essere compilato. <br> <br>";}
if($email ==""){$ok_ko .=  "Attenzione: il campo email deve essere compilato. <br> <br>";}
if($password ==""){$ok_ko .=  "Attenzione: il campo password deve essere compilato. <br><br>";}
 
 
 if($password != $passw){$ok_ko .=  "Attenzione: le due password non coincidono. <br> <br>";}
 
 if($email != $ripemail){$ok_ko .=  "Attenzione: le due email non coincidono. <br> <br>";}
// Controllo se lo username è presente nel db

$checkusername=mysql_query("SELECT username FROM utenti WHERE username='$username'");
$vuota=mysql_num_rows($checkusername);
if($vuota > 0){
	echo "<br> <br> <h1> Attenzione: lo username: ".$username." è già presente nell'archivio. Si prega di cambiare username. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();

}
  
//controllo scrittura corretta dell'email
 
 if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){
     
             $ok_ko .= "indirizzo email non valido<br>";
    } //chiude il controllo scrittura corretta dell'email 
  

// Controllo se esiste l'email nel db

$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
	echo "<br> <br> <h1> Attenzione: l'email: ".$email." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();

}


if($ok_ko !=""){
		echo "<h1>$ok_ko</h1>";
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();
}else{
 
 $query="INSERT INTO utenti(nome, cognome, username, email, password)  VALUES('$nome','$cognome','$username','$email','$pass')";

Questo è il classico modulo fatto in php, con tutte le verifiche effettuate una volta che tu hai premuto invio. Invece vorrei afre in modo che le verifiche avvengano come per lo username e l'email è troppo complicato da modificare ???
 

Discussioni simili