invio form non corretto dopo controllo dati

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Apro un altra discussione per capire secondo voi dove può stare l'errore. Nel mio form normalissimo faccio un controllo dati sia via js con una validazione live sia via php. I campi se risultano vuoti non vengono inviati ed il form rimane disponibile per correggere i valori. se i campi risultano completi imposto a ok una variabile ed invio il form al motore php per la validazione lato server. Il problema è che nonostante io lasci un campo vuoto invece di non cambiare pagina e permettermi di sistemare il form mi da l'ok all'invio dei dati e mi appare il messaggio di corretto invio ed ovviamente l'avviso che quel campo è mancante.
Questo è il markup
PHP:
<label for="username" class="block">Username</label>
<input type="text" required name="username" tabindex="4" id="username" onchange="check3() "Nickname di fantasia"/>
<span id="username_ko"></span>
questo è il codice php per la validazione lato server
PHP:
//sul input username faccio un controllo con ajax per verificare se è già presente..
if(!ver_testo($username,4,15)){
$ok_ko.="Username non corretto, deve essere compreso tra 6 e 15 caratteri compresi i caratteri jolly <br />";
echo "<meta http-equiv='Refresh' content='300; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";	}
e qui il controllo dei dati e l'invio
PHP:
if(empty($ok_ko)) {
$stmt = $mysqli->prepare("INSERT INTO utenti_temp (codiceconferma, nome, cognome, eta, interessi,
 username, password, email, domanda, risposta) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param ('ssssssssss', $codiceconferma, $nome, $cognome, $eta, $interessi, $username, $password, 
$email, $domanda, $risposta);
$stmt->execute();
$stmt->close();
//se tutto è OK da qua preparo l'invio della mail di conferma per l'avvenuta registrazione.
require_once('../TEST_3/phpmailer/PHPMailerAutoload.php');
if ($mail->Send()) {
//echo "Mail inviata con successo";
echo '<div id="mailok"><p style="margin-top: 2px;">Complimenti,<br />
la registrazione è andata a buon fine

Sbaglio qualcosa?
 
Ciao,
Questa sintassi
HTML:
<input type="text" required name="username" tabindex="4" id="username" onchange="check3() "Nickname di fantasia"/>
Non è corretta: se vuoi assegnare "Nickname di fantasia" come valore di default per l'input, devi usare
HTML:
<input type="text" required name="username" tabindex="4" id="username" onchange="check3()" value="Nickname di fantasia" />
Se invece vuoi che costituisca la descrizione dell'input, il codice dovrebbe essere:
HTML:
Nickname di fantasia: <input type="text" required name="username" tabindex="4" id="username" onchange="check3()" />
Oppure, con html5:
HTML:
<input type="text" required name="username" tabindex="4" id="username" onchange="check3()" placeholder="Nickname di fantasia" />
 
Ultima modifica:
Ciao altutto intanto grazie. Nel postare il codice mi è scappato un pezzo. Il placeholder che naturalmente nella pagina c'è.
 
Ecco qesto è il codice lato client che mi aggiunge dei flag verdi a fianco di ogni input per verificare l'effettivo inserimento dei dati, senza i dati completi il form non parte, o almeno così succedeva.
PHP:
$(document).ready(function(){

	var jVal = {
		'nome' : function() {

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

			var nameInfo = $('#nameInfo');
			var ele = $('#nome');
			var pos = ele.offset();

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

			if(ele.val().length < 3) {
				jVal.errors = true;
					nameInfo.removeClass('correct').addClass('error').html('&larr; Inserisci correttamente il tuo Nome').show();
					ele.removeClass('normal').addClass('wrong');
			} else {
					nameInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
			}
		},

		'cognome' : function() {

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

			var surnameInfo = $('#surnameInfo');
			var ele = $('#cognome');
			var pos = ele.offset();

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


			var patt = /^([a-zA-Z\xE0\xE8\xE9\xF9\xF2\xEC\x27]\s?)+$/;

			if(ele.val().length = 0) {
				jVal.errors = true;
					surnameInfo.removeClass('correct').addClass('error').html('&larr; Inserisci il tuo Cognome').show();
					ele.removeClass('normal').addClass('wrong');
			} else if(ele.val().length < 3) {
				jVal.errors = true;
					surnameInfo.removeClass('correct').addClass('error').html('&larr; Inserisci correttamente il tuo Cognome').show();
					ele.removeClass('normal').addClass('wrong');
			} else if(!patt.test(ele.val())) {
				jVal.errors = true;
					surnameInfo.removeClass('correct').addClass('error').html('&larr; Puoi inserire solo lettere').show();
					ele.removeClass('normal').addClass('wrong');
			} else {
					surnameInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
			}
		},


		'nascita' : function (){

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

			var nascitaInfo = $('#nascitaInfo');
			var ele = $('#nascita');
			var pos = ele.offset();

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

			//var patt = /^(0[1-9]|[12][0-9]|3[01])[- /.] (0[1-9]|1[012])[- /.](19|20)\d\d$/i
			var patt = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;


			if(!patt.test(ele.val())) {
				jVal.errors = true;
					nascitaInfo.removeClass('correct').addClass('error').html('&larr; Inserisci correttamente la data senza simboli').show();
					ele.removeClass('normal').addClass('wrong');
			} else {
					nascitaInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
			}
		},


		'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');
			}
		},


		'email' : function() {

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

			var emailInfo = $('#emailInfo');
			var ele = $('#email');
			var pos = ele.offset();

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

			var patt = /^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*\s+&lt;(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})&gt;$|^(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})$/i;

			if(!patt.test(ele.val())) {
				jVal.errors = true;
					emailInfo.removeClass('correct').addClass('error').html('&larr; Inserisci un indirizzo Mail valido').show();
					ele.removeClass('normal').addClass('wrong');
			} else {
					emailInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
			}

		},

		'interessi' : function() {

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

			var interessiInfo = $('#interessiInfo');
			var ele = $('#interessi');
			var pos = ele.offset();

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

			if(ele.val().length < 4) {
				jVal.errors = true;
					interessiInfo.removeClass('correct').addClass('error').html('&larr; Scrivimi qualcosa su di te!').show();
					ele.removeClass('normal').addClass('wrong').css({'font-weight': 'normal'});
			} else {
					interessiInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
			}
		},


		'password' : function() {

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

			var passwordInfo = $('#passwordInfo');
			var ele = $('#password');
			var pos = ele.offset();

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

			if(ele.val().length <= 0 ) {
				jVal.errors = true;
					passwordInfo.removeClass('correct').addClass('error').html('&larr; Inserisci la password!').show();
					ele.removeClass('normal').addClass('wrong');
			} else if (ele.val().length < 6 && ele.val().length > 0) {
				jVal.errors = true;
					passwordInfo.removeClass('correct').addClass('error').html('&larr; La password deve avere almeno 6 caratteri').show();
					ele.removeClass('normal').addClass('wrong');
			} else if (ele.val().length >= 6) {
				//jVal.errors = false;
					passwordInfo.removeClass('error').addClass('correct').html('&radic;').show();
					ele.removeClass('wrong').addClass('normal');
				}
			},


			'password2' : function() {

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

				var password2Info = $('#password2Info');
				var ele2 = $('#password2');
				var pos2 = ele2.offset();
				var ele = $('#password');
				var pos = ele.offset();

				password2Info.css({
					top: pos2.top-3,
					left: pos2.left+ele2.width()+25
				});

				if(ele2.val() != ele.val() ) {
					jVal.errors = true;
					password2Info.removeClass('correct').addClass('error').html('&larr; Le password devono coincidere!').show();
					ele2.removeClass('normal').addClass('wrong');
				} else if(ele2.val() == ""){
					jVal.errors = true;
					password2Info.removeClass('correct').addClass('error').html('&larr; Le password devono coincidere!').show();
					ele2.removeClass('normal').addClass('wrong');
				} else {
				//	jVal.errors = false;
					password2Info.removeClass('error').addClass('correct').html('&radic;').show();
					ele2.removeClass('wrong').addClass('normal');
					}
				},


		'domanda' : function() {

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

			var domandaInfo = $('#domandaInfo');
			var ele = $('#domanda');
			var pos = ele.offset();

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

			//if(ele.val().value < "1"){
			if($('select[value=0]').val()){
				jVal.errors = true;
				domandaInfo.removeClass('correct').addClass('error').html('&larr; Ricordati la domanda!').show();
				ele.removeClass('normal').addClass('wrong').css({'font-weight': 'normal'});
			} else {
				jVal.errors = false;
				domandaInfo.removeClass('error').addClass('correct').html('&radic;').show();
				ele.removeClass('wrong').addClass('normal');
			}
		},



		'risposta' : function() {

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

			var rispostaInfo = $('#rispostaInfo');
			var ele = $('#risposta');
			var pos = ele.offset();

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

			if(ele.val().length == "") {
				jVal.errors = true;
				rispostaInfo.removeClass('correct').addClass('error').html('&larr; Ricordati la risposta!').show();
				ele.removeClass('normal').addClass('wrong').css({'font-weight': 'normal'});
			} else {
				rispostaInfo.removeClass('error').addClass('correct').html('&radic;').show();
				ele.removeClass('wrong').addClass('normal');
			}
		},

		'privacy' : function(){

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

			var privacyInfo = $('#privacyInfo');
			var ele = $('#privacy');
			var pos = ele.offset();

			privacyInfo.css({
				top: pos.top-9,
				left: pos.left+ele.width()+175
			});

			if($("#privacy").is(":not(:checked)")){
				//jVal.errors = true;
				privacyInfo.removeClass('correct').addClass('error').html('&larr; Devi accettare l\'informativa sulla Privacy!').show();
				ele.removeClass('normal').addClass('wrong').css({'font-weight': 'normal'});
			} else {
				privacyInfo.removeClass('error').addClass('correct').html('&radic;').show();
				ele.removeClass('wrong').addClass('normal');
			};

		},


		'sendIt' : function (){
			if(!jVal.errors) {
				$('#sendmail').change('ok');
				$('#jform').submit();
			}
		}
	};

// ====================================================== //

	$('#send').click(function (){
		var obj = $.browser.webkit ? $('body') : $('html');
		obj.animate({ scrollTop: $('#jform').offset() }, 750, function (){
			jVal.errors = false;
			jVal.nome();
			jVal.cognome();
			jVal.nascita();
			jVal.username();
			jVal.email();
			jVal.interessi();
			jVal.password();
			jVal.password2();
			jVal.domanda();
			jVal.risposta();
			jVal.privacy();
			jVal.sendIt();
		});
		return false;
	});
//Qui colleghiamo il valore jVal.xxx al valore del form
    $('#nome').change(jVal.nome);
	$('#cognome').change(jVal.cognome);
	$('#nascita').change(jVal.nascita);
	$('#username').change(jVal.username);
	$('#email').change(jVal.email);
	$('#interessi').change(jVal.interessi);
	$('#password').change(jVal.password);
	$('#password2').change(jVal.password2);
	$('#domanda').change(jVal.domanda);
	$('#risposta').change(jVal.risposta);
	$('input[name="privacy"]').change(jVal.privacy);
});

A voi ogni aiuto.
 
Dando un'occhiata veloce al codice, mi sono imbattuto in:
Codice:
            if(ele.val().length = 0) {
(riga 43): per verificare che due valori siano uguali, devi usare ==, quindi dovrebbe essere
Codice:
            if(ele.val().length == 0) {
 
Ma sicuramente è un errore però non mi crea nessun problema a al form.
Altutto ha ragione, non vedi nessuna influenza, salvo che il controllo viene fatto con una logica diversa da quella voluta
controlla anche gli altri if, qualcuno mi sembra "strano",
in ogni caso nella parrocchia "domanda", hai il seguente codice attivo, che ti vanifica tutti i controlli precedenti
PHP:
jVal.errors = false;
c'è poi
PHP:
ele.val().length == ""
ma ora è tardi, il resto lo controlli tu
ciao
Marino
 
Ultima modifica:
Ho corretto gli errori ma sinceramente non ne vedo altri. Non conosco molto su js. Mi sapreste dare una dritta o farmi capire dove sono ?
Inoltre nonostante i campi siano parzialmente completati, vengono comunque inviati al db che li salva in tabella temporanea, in più il valore della select che ho impostato così
PHP:
	if($result = $mysqli->query("SELECT * FROM question")){
		while ($row = $result->fetch_array())
		{
			echo '<option value="' . $row['id']. '">', $row['domanda'] ,'</option>';
		}
	}
mi viene prelevato come valore 1 e non come stringa, cioè in tabella invece di avere la domanda ho il numero 1. Sbaglio qualcosa? Il valore lo prendo così
PHP:
	$domanda		= $mysqli->real_escape_string(trim($_POST['domanda']));
Grazie
 
Ultima modifica:

Discussioni simili