validazine input e risposta input

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Mi affaccio solo adesso su ajax perchè voglio implementare questo linguaggio sul mio form, che mi permette di recuperare un valore da db ed inserirlo in un tag input dopo che con ajax ho validato un precedente campo input. vengo al codice. Qua c'è ilmarkup
HTML:
<p>
<label for="username" class="block"></label>
<input type="email" name="email" id="email_rec" onkeypress="mail(this.value)" placeholder="Inserisci la tua mail"/>
</p>

questo è il codice ajax js
PHP:
<script type="text/javascript">
$(document).ready(function(){
	$("#email_rec").onchange(function() {
	var dati = $('#email_rec').attr('value');
	var data_send = "email="+dati;

	$.ajax({
		type: "POST",
		dataType: "html",
		url: "mail.php",
		data: data_send,
		success: function(data){
			$('input[name="domanda"]').val(data);
			},
		error: function(){
			alert ("Sbagliato!");
			}
		});
	});
});
</script>
ed infine il php
PHP:
if(isset($_POST['email'])){

	$mail=$_POST['email'];

//Se tuè stato inserito procedo a verificare che ci sia nel db
if($result = $mysqli->query("SELECT * FROM utenti ")){

	//Se trovo corrispondenza nel db con la mail inserita estraggo la domanda
	while($row = $result->fetch_row())
	{
		echo "";//echo  $row[5], " ", $row[10];
	}
	//A questo punto controllo che la mail che arriva da ajax sia uguale a quella inserita ne db
	if($mail == $row[5]){
		//Se è uguale metto in echo la domanda di sicurezza legata alla mail
		echo $row[10];
	}
}
}
problema che non va!. Non so dove mettere le mani. ho seguito un po di guide in rete ma non ne vengo a capo. Dimenticavo di dire che quello che voreri fare è questo: nel tag input email_rec inserisco la mail dell'utente, al momento di cambiare viene fatta una chiamata ad ajax che verifica con php se la mail inserita è presente nel db. Se l'esito è positivo recupero sempre dal db la domanda che andrà inserita nelcampo input che viene dopo quello della mail. Nelcaso non fosse presente la mail dovrei dare un alert, o con un semplice alert oppure potrei scrivere qualcosa come textarea invece di input. Non mi sembra molto complicato ma non capisco cosa non vada.
Chi mi può dare una dritta?
 
Ciao, hai fatto qualche piccolo errore, se non hai già risolto possiamo rivederlo
 
La funzone non è onchange() ma solo change()
manca il value all'input
per recuperarlo la sintassi corretta è
Codice:
$('#email_rec').val();
 
Perfetto. Allora diciamo che ho cambiato metodo di inserimento ed ho fatto così, dimmi se può andare bene:
Markup
PHP:
<p>
<label for="mail" class="block"></label>
<input type="email" name="email" id="email_rec" onchange="check1()" placeholder="Inserisci la tua mail"/>
</p>

file di js viene richiamato dall' onchange()
PHP:
//Funzione per recuperare la domanda dal Db tramite Ajax
$(document).ready(function(check1){
	$('#email_rec').change(function(){
		var email2 =  $('#email_rec').val();
		$('#domanda_rec').load(
		"./funzioni_ajax/script2.php",
		{email2: email2},
		function() {
			$('#domanda_rec');
		});
	});
});
ed infine il codice php per interrogare il db
PHP:
<?php
include('../config/config2.php');

if(isset($_REQUEST["email2"])) $email2 = $_REQUEST["email2"];
//if(isset($_REQUEST["username"])) $username2 = $_REQUEST["username"];

if($result = $mysqli->query("SELECT * FROM utenti ")){

	while($row = $result->fetch_assoc())
	{
		if($email2 == $row['email']){
			//Se è uguale metto in echo la domanda di sicurezza legata alla mail
			echo $row['domanda'];
		} else {
			echo "Email non presente nel nostro Database!";
		}
	}
} $result->close();

?>
Mi sembra che vada bene.

Infine nel form che ho, io valido i dati inseriti semplicemente aggiungendo con js al tag input un flag verde o rosso a secondo che siano stati inseriti i dati. In particolar modo per l'username come posso fare a far apparire questo flag dopo che con onchange lui mi verifica che non ci sia un username già presente nel db? Cioè come posso legare il risultato dell'interrogazione al db con ajax alla funzione js che mi appende questi flag? questo è un esempio del codice js per la validazione senza ajax
PHP:
	'username' : function() {

			$('body').append('<div id="nicknameInfo" class="info"></div>');

			var nicknameInfo = $('#nicknameInfo');
			var ele = $('#username');
			var pos = ele.offset();

			nicknameInfo.css({
				top: pos.top-3,
				left: pos.left+ele.width()+25
			});

			if(ele.val().length < 3) {
				jVal.errors = true;
					nicknameInfo.removeClass('correct').addClass('error').html('&larr; Inserisci un Username!').show();
					ele.removeClass('normal').addClass('wrong').css({'font-weight': 'normal'});
			} else {
					nicknameInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
			}
		},
PHP:
	$('#send').click(function (){
		var obj = $.browser.webkit ? $('body') : $('html');
		obj.animate({ scrollTop: $('#jform').offset() }, 750, function (){
			jVal.errors = false;
			jVal.username();
			jVal.sendIt();
		});
		return false;
	});
//Qui colleghiamo il valore jVal.xxx al valore del form
	$('#username').change(jVal.username);

});
 
per funzionare funziona, non capisco cosa ti serve il check1 come parametro
 
Il check1 mi permette di prendere la mail inserita nel form associarla al db e recuperare la domanda segreta dal db. Senza dover far fare tutto il controllo in un secondo step.
 
Il sistema confermo funziona. Quindi tramite ajax riesco a recuperare la domanda dal db ed inserirla nel tag per poi permettere la risposta dell'utente.
Lo stesso sistema lo vorrei adottare per verificare l'esistenza di un username e di email nel db in fase di registrazione.
Ho fatto così, questo il codice js nel markup
PHP:
<script type="text/javascript">
$(document).ready(function() { $("#username").change(function(){
	var username = this.id;
	$.ajax({ type: "POST",
		url: "chkcontatti.php",
		data: username+"="+this.value,
		success: function(response){

if(response== '0')
{
	$("#username_ok").html(' Disponibile ');

}
else
{
	$("#username_ok").html('Non disponibile ');
	$("#username_ok").css('border', '2px red solid');
	$("#username").val("");
}
		}
	});
});
});
</script>
Quindi dopo il controllo faccio apparire un box con la risposta e elimino un flag legato ad un altro codice per il controllo dell'inserimento nei campi.

questo invece il codice di controllo in php
PHP:
include('../config/config2.php');
if(isset($_REQUEST["username"])) $username2 = $_REQUEST["username"];

if($stmt1 = $mysqli->query("SELECT username FROM utenti_temp ")){

	while($row1 = $stmt1->fetch_assoc())
	{
		if($username2 == $row1['username']){
			//Se è uguale metto in echo l'errore
				echo '1';
			} else {
				echo '0';
			}
		}
	}

Il problema che ho è, primo il controllo lo devo fare su due tabelle, secondo sia che inserisca un username nuovo sia uno già presente mi dice sempre che il nome esiste già. In più come posso cambiare il codice per poterlo inserire invece in un file js a parte?

Grazie a tutti!:cool::cool:
 
Volevo segnalare, che il problema l'ho risolto, la soluzione la trovate in un post simile sempre su questo forum.
Grazie comunque a tutti.
 
Volevo far scomparire lo span legato all'avviso dell'username già in uso dopo un determinato tempo. Secondo voi questo codice è corretto?
PHP:
$("#username").val("");
setTimeout(function(){
$("username_ko").remove();}, 3000
);
assegno un valore nullo all'input dell'username in modo da eliminare quello erroneamente inserito, e dopo 3 secondi vorrei far scomparire lo span che appare a fianco della caselle input. Ma non va! Ovviamente lo span con id username_ko è quello che da l'avviso dell'username già in uso.
 
Hai dimenitcato il # per indicare che è un id
 

Discussioni simili