Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Ajax ritorno di testo sbagliato

    Salve a tutti sto creando un form per la registrazione degli utenti sul mio sito ! Ho creato uno script ajax per vedere se l'email è già presente sul db. Il codice javascript è questo !!

    codice:
    function controlla(){
    	document.getElementById("nomespan").innerHTML = errore("");
    	document.getElementById("cognomespan").innerHTML = errore("");
    	document.getElementById("emailspan").innerHTML = errore("");
    	document.getElementById("nickspan").innerHTML = errore("");
    	document.getElementById("passwordspan").innerHTML = errore("");
    	document.getElementById("confermaspan").innerHTML = errore("");
    	var form = document.forms['join'];
    	var nome = form.nome.value;
    	var email = form.email_join.value;
    	var password = form.password_join.value;
    	var cognome = form.cognome.value;
    	var nick = form.nick.value;
    	var conferma = form.conferma.value;
    	
    	var number  = /\d/g;
    	var noword  = /(\w(\s)?)+/;
    	var expr_email = /^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$/;
    	
    	var ok = true;
    	
    	if (!noword.test(nome)){
    		document.getElementById("nomespan").innerHTML = errore("Il campo deve contenere soltanto lettere dell'alfabeto");
    		form.nome.focus();
    		ok= false; } 
    	
    	if (nome.length == 0){
    		document.getElementById("nomespan").innerHTML = errore("Il campo è obbligatorio");
    		form.nome.focus();
    		ok = false; } 
    		
    	if (number.test(nome)){
    		document.getElementById("nomespan").innerHTML = errore("Il campo non puo contenere numeri");
    		form.nome.focus();
    		ok = false;	} 
    	
    	if (email.length == 0){
    		document.getElementById("emailspan").innerHTML = errore("Il campo è obbligatorio");
    		form.email_join.focus();
    		ok = false; } 
    	
    	if (!expr_email.test(email)){
    	    document.getElementById("emailspan").innerHTML = errore("Email non valida");
    		form.email_join.focus();
    		ok = false; }
    	
    	if (expr_email.test(email)){
    		var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
    	
    	if (xmlhttp.responseText == "1"){
    		document.getElementById("resultspan").innerHTML = "Fatto";}
    		
    }
        }
    xmlhttp.open("GET","control_join.php?email="+email,true);
    xmlhttp.send();
    		}					  
    		
    	if (password.length < 4){
    		document.getElementById("passwordspan").innerHTML = errore("Il campo deve avere minimo 4 caratteri");
    		form.password_join.focus();
    		ok = false; } 
    	
    	if (password.length == 0){
    		document.getElementById("passwordspan").innerHTML = errore("Il campo è obbligatorio");
    		form.password_join.focus();
    		ok = false; } 
    	
    	if (password.length > 16){
    		document.getElementById("passwordspan").innerHTML = errore("Il campo deve avere massimo 16 caratteri");
    		form.password_join.focus();
    		ok = false; }
    	
    	
    	return ok;
    }
    function vai(){
    		document.getElementById('resultspan').innerHTML = errore("");
    	if(controlla()){
    		document.getElementById('resultspan').innerHTML = errore("FaFaFaFAtto")
    	}
    }
    E il codice control_join.php è questo

    Codice PHP:
    <?
        
    require("connessione.php");
        
    $email $_GET['email'];
        
    $result mysql_query("SELECT * FROM login WHERE email='$email'");
        
    $row mysql_fetch_array($result);
        if (
    $row['nome'] != ""){
            echo 
    '1';
        } else {
            echo 
    '0';
        }
    ?>
    Non funge !! Qualcuno sa dirmi il perche ??
    Mah

  2. #2
    $email = $_GET['email'];
    $result = mysql_query("SELECT * FROM login WHERE email='$email'");

    hai aperto i portoni a ogni tipo possibile e immaginabile di potenziale hackeraggio del tuo db: non devi mai mai mai fidarti ciecamente, quando passi alle query sql, di quello che l'utente ha passato come dato, devi sempre sempre sempre verificare che sia un dato conforme alle attese e devi farlo dal lato del server anche eprchè javascript con un metodo get ti garantisce anche meno sicurezza che con il metodo post, se possibile.

    Quanto alla tua domanda, bisogna che fai un po' di debug da te controllando sulla console degli errori e poi porti qui un codice più circoscritto - è difficile che qualcuno si prenda la briga di controllare un intero applicativo altrui (e di cui quindi possono essere ignote molte caratteristiche) per scovare l'errore ("non funge" - anche qui ci dovresti dire cosa e in che senso).

  3. #3
    $_GET['email']="' OR 1 OR '";

    $email=$_GET['email'];
    echo "SELECT * FROM login WHERE email='$email'";

    ti ritorna:

    SELECT * FROM login WHERE email='' OR 1 OR ''

    Ovvero non devi basare la tua validazione solo su javascript. Questo è già un problema con la applicazione (resitituisci tutta la tua tabella login a chi ha messo quello come email e disabilitato javascript sul suo browser e quindi var expr_email = /^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$/;
    te lo bypassa allegramente), nel caso connessione.php non faccia nulla per pulire $_GET

  4. #4
    Grazie mille per queste precisazione !! Comunque quello che mi serve sapere è se è possibile controllare se il valore responseText è 1 o 0 e quindi impostare la variabile ok su true !!
    e poi con firebug invece della risposta "1" quando clicco su registrati e invia le informazioni a control_join.php mi ritorna


    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Documento senza titolo</title>
    </head>
    
    <body>
    </body>
    </html>1
    come posso risolvere ??
    Mah

  5. #5
    dipende da come hai strutturato ajax, in particolar modo onreadystatechange e poi da come ajax viene invocato.

    Il mio suggerimento, in attesa di migliori da parte di qualcun' altro, è discorporare completamente ajax dal contesto di funzioni specifiche: ajax dovrebbe essere un applicativo autonomo ma destinato a poter essere invocato da qualsiasi funzione o evento.

    In tal caso io prenderei un buon tutorial su ajax, me lo studierei con calma alcuni giorni e intanto creerei una funzione ajax personalizzata. Se si usa ajax, l'applicativo ajax è critico e bisogna effettuare uno studio su come funziona ajax - la prima volta che affrontai ajax anni fa mi presi tre giorni solo da dedicare a quello e a fare dei test. Ora ho una funzione ajax mia che fa tutto quello che gli dico di fare.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    io se fossi in te utilizzerei qualcosa di già pronto... non capisco perche complicarsi la vita se esistono moltissimi framework/librerie che ti permettono di gestire con più facilità le chiamate ajax.. vedi prototype,jquery,ajax toolbox ecc...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.