controllo dati mentre s'inseriscono nel form

paperinik4

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


Ho un modulo php di registrazione con i vari controlli. Ma i suddetti controlli, avvengono quando si preme sul tastino "INvio Dati". Invece, mi piacerebbe che come nei vari siti in cui uno si registra, il sudetto controllo avvenga immediatamente, con la scritta sotto allinput e magari se è disponibile, ci si mette un'iconcina a forma di "V", altrimenti una "X" per indicare che è occupato o comunque è già presente nel db. Questo dovrebbe accadare appena digito le prime tre lettere dello username o email, ovviamente nell'email c'è anche la parte riguardante che se viene scritta una cosa del genere: "ruughbiurghrbnr@gmail.com", non viene accettata dal sistema. Il tutto deve essere svolto contemporanemente e all'istante in fase di registrazione. Poi se è tutto ok, quindi tutto pieno di "V" a fianco dell'input, premendo il tastino "invio", ci si registra e poi la c'è tutta la procedura per ricevere l'email all'utente che si è registrato. I controlli li ho già fatti in php, però il resto non ho idea di come si faccia. Ho visto svariati esempi, ma facevano tutto tranne quello che volevo io e sinceramente molto spesso nemmeno funzionano. Spero in un vostro aiuto. Grazie

Un ultima cosa. quando uno si registra, si può inviare anche un'email di avviso all'amministratore del sito ????
 
al momento non ho tempo di metterti giu bene il codice ma se cerchi in internet qualche script gia pronto lo trovi.
Comunque devi fare i controlli in java. Mentre per per la mail quando salvi l'utente nel db tramite la funzione mail di php invii la conferma di registrazione ;)
appena ho tempo ti metto giu qualcosa
 
Ciao

Ciao GoshMaledetto,

Allora credo di avere in parte risolto il problema. Solo che ho qualche difficoltà debbo aggiustarlo meglio e ti espongo subito i codici.

iscrizioneajax.php

PHP:
<script src='http://code.jquery.com/jquery-1.8.3.js'></script>    


<?php
        require_once("connetti.php");

        ?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    
 <script>
function conferma(value,r)
{
$.post('pagina.php', { value_da_confrontare: value}, function( fatto ){ $('#confronta'+r).html( fatto)});
}
</script>
EMal: <input type='text' size =" 35 " onkeyup='conferma(this.value,"email")' name='email'><div id='confrontaemail'></div>
<div id='confrontaemail'><jquery> </div>

<body>
    </body>
</html>

pagina.php

PHP:
<?php

        require_once("connetti.php");

         $email = mysql_real_escape_string(trim ($_POST['email']));

   //      echo "Va kazzo";
// Controllo se l'email è presente nel db

$checkemail=mysql_query_rows("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
           echo "Libero !!!";
}else{
    echo "Occupato";
}
 ?>

Su quest'ultimo codice, c'è da commentare qualcosina. Dunque se io digito nella casella email l'email che so che esiste nel database, togliendo questo pezzo di codicei funziona:

PHP:
<?php

        require_once("connetti.php");

         $email = mysql_real_escape_string(trim ($_POST['email']));

       echo "Va kazzo";       //così va
// Controllo se l'email è presente nel db

$checkemail=mysql_query_rows("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
         
 ?>

Se io invece metto il codice iniziale:

PHP:
<?php

        require_once("connetti.php");

         $email = mysql_real_escape_string(trim ($_POST['email']));

   //      echo "Va kazzo";
// Controllo se l'email è presente nel db

$checkemail=mysql_query_rows("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
           echo "Libero !!!";
}else{
    echo "Occupato";
}
 ?>


Mi dice sempre "Occupato e non funziona più come deve. Dove sbaglio ???? Mi potete dare una mano per favore ???? Grazie.
 
Scusa, da dove hai tirato fuori la funzione mysql_query_rows? Non è che intendevi mysql_query?
 
Ciao

Scusa, da dove hai tirato fuori la funzione mysql_query_rows? Non è che intendevi mysql_query?

Ciao Nefyt,

Guarda non ricordo sinceramente, se me l'hanno suggeriato o meno. So solo che con il php a fine compilazione moduo e quando do invio dati, se c''è l'email o lo username presente nel db, parte la segnalazione, ma questo accade solo alla fine. A me servirebbe chementre digito lui controllasse direttamente che sia presente nel db o meno. Da una parte ci sono riuscito, ma dall'altra mi tira fuori se ci metto un echo mi dice libero se poi continuo con else per dire occupato, mi dice sempre libero. E se inverto mi dice sempre libero quando invece l'email è presente. Tu mi puoi risolvere la matassa ???? Sinceramente non so che pesci prendere. Qualsiasi esempio ci metto, mi da lo stesso risultato.E' come se saltasse un controllo e accettasse solo o libero (anche sse nel db risulta esserci) o occupato (anche se nel db non c'è). Proverò a fare così:

PHP:
<?php

        require_once("connetti.php");

         $email = mysql_real_escape_string(trim ($_POST['email']));

   //      echo "Va kazzo";
// Controllo se l'email è presente nel db

$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
           echo "Libero !!!";
}else{
    echo "Occupato";
}
 ?>

Tante volte risulvessi il problema, ma non ci credo. Scusa del ritardo nella risposta, ma solo ora mi sono messo al pc da stamattina alle 10 che sto in piedi..... Aspetto tuoi suggerimenti comunque e grazie.


Ho provato a togliere:

PHP:
$vuota=mysql_num_rows e mettere:

$vuota=mysql_num

Però mi da il seguente errore:

Fatal error: Call to undefined function mysql_num() in /volume1/web/utenti/inserimentodatacontrollojava/pagina.php on line 11

Spero che tu riesca a risolvere il problema.....
 
Ultima modifica:
Ti ho sistemato un poco le pagine e cosi dovrebbe andare

pagina.php
PHP:
<?php 

        require_once("connetti.php"); 

         $email = mysql_real_escape_string(trim ($_POST['email'])); 

   //      echo "Va kazzo"; 
// Controllo se l'email è presente nel db 

       
   if(filter_var($email,FILTER_VALIDATE_EMAIL)){  
       
$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'"); 
$vuota=mysql_num_rows($checkemail); 

echo $vuota>0 ? 'Mail esistente' : 'Mail libera';

}else echo 'Mail invalida';
 ?>

parte dell'ajax
Codice:
 <script> 
function conferma(value,r) 
{ 
$('#confrontaemail').html('Controllando...');
$.post('pagina.php', { 'email' : value}, function( fatto ){ $('#confrontaemail').html( fatto)}); 
} 
</script> 
EMal: <input type='text' size =" 35 " onkeyup='conferma(this.value)' name='email'><div id='confrontaemail'></div> 
<div id='confrontaemail'> </div>
 
Ciao

Ti ho sistemato un poco le pagine e cosi dovrebbe andare

pagina.php
PHP:
<?php 

        require_once("connetti.php"); 

         $email = mysql_real_escape_string(trim ($_POST['email'])); 

   //      echo "Va kazzo"; 
// Controllo se l'email è presente nel db 

       
   if(filter_var($email,FILTER_VALIDATE_EMAIL)){  
       
$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'"); 
$vuota=mysql_num_rows($checkemail); 

echo $vuota>0 ? 'Mail esistente' : 'Mail libera';

}else echo 'Mail invalida';
 ?>

parte dell'ajax
Codice:
 <script> 
function conferma(value,r) 
{ 
$('#confrontaemail').html('Controllando...');
$.post('pagina.php', { 'email' : value}, function( fatto ){ $('#confrontaemail').html( fatto)}); 
} 
</script> 
EMal: <input type='text' size =" 35 " onkeyup='conferma(this.value)' name='email'><div id='confrontaemail'></div> 
<div id='confrontaemail'> </div>

Provo le tue modifiche e ti dico se va. Ma spero di si. Senti una cosa ti volevo chiedere. Il codice controllo ossia la pagina.php che viene chiamata dall'ajxa, secondo te, si potrebbe unire in un unica pagina ???? Visto che poi lo dovrò fare sia per lo username che per la password se è corretta o meno ??? e per eventuali altri dati.
 
Ciao

Allora,

ho provato il tuo codice e mi da sempre la stessa cosa, ossia va al secondo controllo dell'else . Quindi email invalida e sotto però compare qualcosa che non si riesce a leggere. :(
 
Allora,

ho provato il tuo codice e mi da sempre la stessa cosa, ossia va al secondo controllo dell'else . Quindi email invalida e sotto però compare qualcosa che non si riesce a leggere. :(

Ho provato in locale il tutto e a me funziona correttamente, a questo punto mi sa o che inserisci una mail sbagliata o già presente o c'è qualche problema col database

compare qualcosa che non si riesce a leggere
In che senso?
 
Ciao

Mentre digito l'email, compare una scritta che viene sovrapposta subito da "mail invalida". Ma alla fine ho capito cos'era la scritta nascosta. In pratica mentre scrivo, dovrebbe comparire: $('#confrontaemail').html('Controllando...'); epoi subito dopo compare "mail invalida". Considera che il tutto gira sul synology ossia nas. Quindi come se lavorassi in locale. Tu hai in mente un altro tipo di codice ???
 
index.php
Codice:
<script src='http://code.jquery.com/jquery-1.8.3.js'></script>     

<html> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
        <title></title> 
    </head> 
     
 <script> 
function conferma(value) 
{ 
$('#confrontaemail').html('Controllando...');
$.post('pagina.php', { 'email' : value}, function( fatto ){ $('#confrontaemail').html( fatto)}); 
} 
</script> 
EMal: <input type='text' size =" 35 " onkeyup='conferma(this.value)' name='email'><div id='confrontaemail'></div> 
<div id='confrontaemail'> </div> 

<body> 
    </body> 
</html>

connetti.php
PHP:
<?
//cambiali con i tuoi dati
mysql_connect('localhost','user','password');
mysql_select_db('database');

pagina.php
PHP:
<?php 

        require_once("connetti.php"); 

         $email = mysql_real_escape_string(trim ($_POST['email'])); 
       
   if(filter_var($email,FILTER_VALIDATE_EMAIL)){  
       
$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'") or die(mysql_error()); 
$vuota=mysql_num_rows($checkemail); 

echo $vuota>0 ? 'Mail esistente' : 'Mail libera';

}else echo 'Mail invalida';
 ?>

Nel database ho la tabella utenti con un solo campo di nome email di tipo text e ho inserito 2 mail di prova, questo è quello che ho provato in locale e funziona perfettamente, più di cosi non so che dirti evidentemente commetti qualche errore senza accorgertene

Per curiosità che versione del php hai? Comunque vedi se hai dimenticato qualcosa
 
Ciao,

Perdonami, dove vedo la vesrsione del php che adoper ??? Credo che comunque sia la 5.1 ma non ne sono sicuro.
Utilizzando phpinfo() o phpversion(), comunque se è la 5.1 togli filter_var e sostituiscilo con un espressione regolare

esempio
PHP:
//scritta sul momento ovviamente ce ne sono di migliori
if(preg_match('/^[a-z0-9]{2,}[@][a-z0-9]{2,}[.][a-z0-9]{2,4}$/',$email)){
 
Ultima modifica:

Discussioni simili