verifica utente in db

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Buonasera, ho lacune difficoltà nel capire come poter verificare se un utente è già inserito nel db, nello specifico mail e username. qui il mio codice
PHP:
	$stmt = $mysqli->query("SELECT * FROM utenti, utenti_temp");
			if ($stmt->num_rows > 0) {

				while ($row = $stmt->fetch_array(MYSQLI_ASSOC))
				{
					//Verifico che i dati inseriti nel form non coincidano con i dati
						if ($row['username'] == $username){
							echo '<div id="errore">ATTENZIONE: Username già usato, scegline un altro. <br /></div>';
							echo "<meta http-equiv='Refresh' content='30;  URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

						} else if ($row['email'] == $email) {
							echo '<div id="errore">ATTENZIONE: Email già usata2, scegline un altra. <br /></div>';
							echo "<meta http-equiv='Refresh' content='30;  URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
						}
					}
			} else {
				$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();
qualcuno mi saprebbe dire se sbaglio e nel caso dove. non ne vengo a capo.
 

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
Bhe, premetto che non conosco molto bene l'estensione mysqli, preferisco usare le funzione standard del php per utilizzare mysql, cmq, io, invece di eseguire un while, alla ricerca dell'username e email già esistente, utilizzerei due semplice query e due semplice if.

Nella prima meta del codice verificherei se nella tabella utente esiste già l'username, in questo modo:

PHP:
$user_isset = $mysqli->query("SELECT user FROM utenti WHERE username = '$username'");

if ($user_isset->num_rows() != 0) {
   // Se ovviamente la query è identica a 1 significa che esiste già un'utente con l'username che desideri usare
}

Mentre, nella seconda parte, farei la stessa cosa anche per l'email, ovvero:

PHP:
$email_isset = $mysqli->query("SELECT email FROM utenti WHERE email = '$email'");

if ($email_isset->num_rows() != 1) {
   // Se ovviamente la query è identica a 1 significa che esiste già un'utente con l'email che desideri usare
}

In poche palore, visto che ho la possibilità di contare i record estratti da quelle query, eviterei di utilizzare il while per scansionare record per record, visto che: se l'username è già nella tabella il numero di occorrenze sarà diverso da 0.

Non so se sono io, ma non ho ben capito a cosa ti servi la tabella utenti_tmp.
 
Ultima modifica:

alankanz

Lupacchiotto
Membro dello Staff
MOD
18 Giu 2014
147
5
18
Roma
Ciao Paperino78

Ti condivido la pagina di registrazione che utilizzo io.
Oltre che al controllo dell'esistenza del'username e della mail fa anche il controllo della lunghezza della password, nel mio caso c'è anche la lunghezza del nome e del cognome, ma non credo ti interessi, al massimo lo commenti
Spero ti sia utile.

PHP:
<?php
// Includo la connessione al database
require('utenti/config.php');


// Se il modulo viene inviato...
if(isset($_POST['registra']))
{
    
    // Dati Inviati dal modulo
    $user =(isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass =(isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    $mail =(isset($_POST['mail'])) ? trim($_POST['mail']) : '';    // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default ''
	$nome =(isset($_POST['nome'])) ? trim($_POST['nome']) : '';	// Metto nella variabile 'nome' il dato inviato dal modulo, se non viene inviato dò di default ''
	$cognome = 	(isset($_POST['cognome'])) ? trim($_POST['cognome']) : '';	// Metto nella variabile 'cognome' il dato inviato dal modulo, se non viene inviato dò di default ''
    $lvl = "0";
	$desc_lvl = "Utente";
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
        $mail = addslashes($mail);
		$nome = addslashes($nome);
		$cognome = addslashes($cognome);
		$lvl = "0";
		$desc_lvl = "Utente";
    }
    
    
    // Controllo il Nome Utente
    if(strlen($user) < 4 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysqli_num_rows(mysqli_query($dbh, "SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysqli_num_rows(mysqli_query($dbh, "SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente');
	//Controllo del nome
	elseif(strlen($nome) < 4 || strlen($nome) > 20)
        die('Nome troppo corto, o troppo lungo');
	//Controllo del cognome
	elseif(strlen($cognome) < 3 || strlen($cognome) > 20)
        die('Cognome troppo corto, o troppo lungo');
  
    // Registrazione dell'utente nel database
    else
    {
        
        // Crypt della password per garantire una miglior sicurezza
        $pass = base64_encode($pass);
        
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,lvl,nome,cognome,desc_lvl)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$lvl', '$nome', '$cognome', '$desc_lvl')";
        mysqli_query($dbh, $strSQL) OR die("Errore 003, contattare l'amministratore ".mysqli_error());
		
        session_start();
		$_SESSION['user'] = $user;
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
        header('Location: registrato.php');
        exit;
    }
}
?>
<!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>Registrazione</title>
</head>

<body>
<form action="" method="post">
  <p>
    <input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" />
  </p>
  <p>
    <input name="nome" type="text" id="nome" value="Nome Reale" onfocus="if(this.value=='Nome') this.value='';" />
    <input name="cognome" type="text" id="cognome" value="Cognome Reale" onfocus="if(this.value=='Cognome') this.value='';" />
    <br />
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <input name="registra" type="submit" value="Registrati" /><br />
  </p>
</form>
</body>
</html>
 

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
Bhe... ovvio che te usi il metodo che vuoi, io te lo avevo solo consigliato per evitare di scansionare la tabella record per record.

In ogni caso, cosa che mi ero dimenticato di scriverti nel mio precedente post è che: nel tuo codice, non vedo quale sia il problema, il codice ti funziona? forse non ti esegue il refresh? a prima vista sembra tutto ok.

Se forse non ti fa il refresh, credo sia normare, i meta-tag non vanno nel corpo del documento, se è quello l'errore potresti utilizzare, al posto di quel meta-tag, la funzione header() del php, occhio però che va dichiarata prima di ogni output ( prima di stampare qualsiasi cosa con echo ).

P.S.: Nel codice postato sopra da me, nella seconda if, ho sbagliato la condizione, che, doveva essere questa: $email_isset->num_rows() != 0
 
Ultima modifica:

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Allora, posso dire di aver risolto in questo modo, il controllo vale sia per username sia per email.
Il markup è così:
PHP:
<input type="text" required name="username" tabindex="4" id="username" onchange="check3() "Nickname di fantasia"/>	
<span id="username_ok"></span>
da un file in js carico ajax
PHP:
$(document).ready(function(check3){
	$("#username").change(function(){
		var username2 = $('#username').val();
			$('#username').load(
			"./funzioni_ajax/chkcontatti.php",
			{username: username2},
				function(response) {
					if(response == '0'){
						$("#username_ok").html('');
					} else {
						
					$("#nicknameInfo").hide("");
					$("#username_ok").html('Username non disponibile');
					$("#username_ok").css({
					"border": "2px red solid", "margin-left": "21px",
					"-moz-border-radius": "5px 5px 5px 5px",
					"-webkit-border-radius": "5px 5px 5px 5px",
					"border-radius": "5px 5px 5px 5px",
					"padding":"0 5px"
					});
				$("#username_ok").val("");
			}
		});
	});
});

ed infine con il php elaboro e restituisco il risultato
PHP:
$link = mysqli_connect('localhost', 'root', 'user', 'db');

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

$query="SELECT username FROM utenti_temp WHERE username='$username2'";

$result=mysqli_query($link,$query);
if(mysqli_num_rows($result)>0)
{
	echo '1';
}
else
{
	echo '0';
}

questo per chi volesse prendere spunto. Con il codice in js faccio apparire un div con l'avviso ed elimino un altro elemento per il controllo della compilazione dei campi(#nicknameInfo). Il problema che invece mi trovo adesso è che se clikko su invia i dati il form ovviamente non parte se i campi non sono compilati tutti ma a fianco del div di controllo ajax mi appare l'elemento del controllo campi (#nicknameInfo) che avendo il valore inserito nel tag input mi crea casino. Come posso svuotare il campo input dove inserisco username dopo aver fatto il controllo in ajax?
 

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Il campo input l'ho reso vuoto in questo modo
PHP:
$("id_del_mio_input").val("");

Rimane attivo l'altro problema.
 
Discussioni simili
Autore Titolo Forum Risposte Data
F [PHP] Verifica utente presente nel DB PHP 13
MarcoGrazia [PHP] Verifica dell'input utente tramite funzione generica. PHP 0
G Email: connessione al server e verifica del nome utente PHP 1
E Verifica dell'Età Javascript 0
MarcoGrazia Verifica di una stringa o di un nome proveniente da form Snippet PHP 0
G Problema verifica palindromo e verifica pari e dispari javascript Javascript 0
D verifica codice fiscale persona fisica /aziendale stesso campo HTML e CSS 1
gandalf1959 [PHP] Verifica password per accesso ad area riservata PHP 3
M [Javascript] Verifica calcolo prima di fare insert Javascript 13
Samuele Ronzani [PHP] Verifica se un dato esiste già PHP 1
S [Javascript] Verifica separatore decimale sistema operativo Javascript 2
felino EXCEL: verifica dati mancanti tra due sheet Windows e Software 2
A Verifica validità data in Java Java 2
kikki882 verifica account - dati personali Social Media Marketing 0
S [PHP] Verifica dati tramite form e annullamento codice inserito PHP 7
L Wordpress: consiglio plugin per "verifica disponibilità" WordPress 0
MarcoGrazia Verifica di un indirizzo email Snippet PHP 0
francesco87 [Vendo] Verifica pagina (bollino grigio) Annunci servizi di Social Media Marketing 0
M [PHP] Verifica formato data in tempo reale PHP 2
WebDr [Javascript] verifica input Javascript 8
R [WordPress] Accesso al db e verifica credenziali (password criptata) WordPress 1
A VENDO ACCOUNT DI DIVERSE PIATTAFORME E VERIFICA FACEBOOK ACCOUNT(PHOTO TAG VERIFICATION,VERIFICA TEL Annunci servizi di Social Media Marketing 2
P verifica caratteri per email e password PHP 17
S Verifica Esistenza Codice Fiscale PHP 5
C verifica e invio ordine php PHP 19
MarcoGrazia Verifica della data inserita in un form ( utilizzando bootstrap ) Javascript 7
G verifica caricamento foto originali su social network o sito di hosting immagini Discussioni Varie 3
A Strumenti "ufficiali" per la verifica dei Cookie HTML e CSS 2
A verifica di proprietà bing webmaster tool Google Search Console 0
P Verifica form solo con php senza javascript PHP 15
D Verifica inserimento dati form PHP 12
L [MySQL] Verifica disponibilità camera MySQL 32
L vendo account facebook femmina 5.000 amici con verifica cell e tag superati Annunci servizi di Social Media Marketing 0
V verifica form jQuery 5
filippino Verifica email per attribuzione dei contenuti SEO e Posizionamento 0
N Verifica email di registrazione PHP 0
D Verifica plug-in aggiornati di Firefox non vede gli aggiornamenti effettivi Windows e Software 0
il_bauscia Verifica segnale operatore 5ghz Reti LAN e Wireless 2
Virginia86 [risolto] Problema select e verifica form PHP 38
G php asincrono con ajax 2 campi di verifica PHP 1
P Problema ocon verifica campo in javascript Javascript 7
M Cosa ne pensate del mio primo file PHP (verifica disponibilità stanze)? PHP 0
M adsmanager e messaggio di verifica email Joomla 0
L verifica mail in db con jquery e ajax. Aiuto jQuery 9
asevenx modulo registrazione utenti, cicli if di verifica PHP 9
A Espressione Regolare per verifica stringa PHP 14
A verifica codice PHP 7
M Verifica HTTP o HTTPS PHP 1
M Verifica se una Funzione appartiene ad una Classe PHP 9
F Esiste un programma che verifica la home page e la corregge automaticamente? HTML e CSS 7

Discussioni simili