Registrazione PHP

  • Creatore Discussione Creatore Discussione ispanic
  • Data di inizio Data di inizio

ispanic

Utente Attivo
28 Ago 2014
119
0
0
Ciao ragazzi, ho creato perfettamente una registrazione in php e ogni volta che c'è un errore questa rimanda l'utente in una pagina dove appunto è scritto l'errore commesso, ma vorrei modifcarla in modo che se l'utente commette un errore, l'input di testo diventa con un background-color diverso dal precedente (magari rosso) e quindi cambia solamente il colore della casella ma non riporta ad un'altra pagina, come fare?
 
si può fare in diversi modi,
ma non hai postato il tuo codice, quindi è difficile inventarsi qualcosa che puoi immettere direttamente nel codice che hai sviluppato
per cui, di seguito, trovi un esempio funzionante da cui puoi trarre un'idea
ciao
Marino

PHP:
<FORM method="post">
<?php

# http://localhost/test_site/php/test/x.php

  if (!empty($_POST['btnER']))
    echo '<INPUT type="text" name="text" STYLE="color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: red;">';
  else
    echo '<INPUT type="text" name="text" STYLE="color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: white;">';
?>
 <input type="submit" name="btnOK" value="dati ok">
 <input type="submit" name="btnER" value="dati errati">
</FORM>
 
PHP:
<form method="post" action="pagina.php">
<?php

session_start();
include ("connessione.php");

$nome_utente = ($_POST['nome_utente']);
$password = ($_POST['password']);


$sql = "SELECT * FROM users WHERE nome_utente = '$nome_utente'
and password = '$password'";
$result = mysql_query($sql);

$count= mysql_num_rows($result);

if ($count == 1)
{
	$_SESSION['nome_utente'] = $nome_utente;
	$_SESSION['password'] = $password;
	header("location:pagina_log.php");
	exit;

}


else 

{

        echo '<input placeholder="Nome utente" tabindex="1" class="nuvola_rossa"  name="nome_utente" type="text" maxlength="40"/>';
	exit;
}
 
?>
<fieldset class="nuvola">
<input placeholder="Nome utente" tabindex="1" class="nuvola"  name="nome_utente" type="text" maxlength="40"/>

dopo continuerà con password e form, ma già in questo modo non funziona, è così? cosa ho sbagliato?
 
non ho mysql ed ho simulato l'errore commentando le istruzioni per leggere il database e forzando il contatore
prova il codice così, poi riportalo con mysql attivo
se hai ancora problemi, fatti vivo
ciao
Marino
PHP:
<?php 

# http://localhost/test_site/php/test/pagina.php

session_start(); 

$tipo_nuvola = "nuvola";

if (!empty($_POST['nome_utente']))
{ 
  include ("connessione.php"); 

  $nome_utente = ($_POST['nome_utente']); 
  $password = ($_POST['password']); 

  $sql = "SELECT * FROM users WHERE nome_utente = '$nome_utente' and password = '$password'"; 
//  $result = mysql_query($sql); 

//  $count= mysql_num_rows($result);

$count=2;

  if ($count == 1) 
  { 
    $_SESSION['nome_utente'] = $nome_utente; 
    $_SESSION['password'] = $password; 
    header("location:pagina_log.php"); 
    exit; 
  } 
  else  
  { 
    $tipo_nuvola = "nuvola_rossa";
  } 
} 
?> 
<!DOCTYPE html>
<head>
<style type="text/css">
.nuvola		{ color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: white;}
.nuvola_rossa	{ color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: red;}
</style>
</head>
<body>
<form method="post" action="pagina.php"> 
<input placeholder="Nome utente" tabindex="1" class="<?= $tipo_nuvola; ?>" name="nome_utente" type="text" maxlength="40"/>
</form>
</body>
</html>
 
Ciao marino, ho provato il tuo script ma c'è un errore... la variabile $tipo può avere solo un assegnamento e così in questo modo tu cambi l'assegnazione e i font saranno o tutti bianchi o tutti di un altro colore
 
non so se interpreto bene le tue parole, provo con questo suggerimento,
se vuoi gestire la condizione di errore per più input del form, puoi definire più variabili, una per ogni input
(es. $nome_nuvola, $pass_nuvola ... )
modificando di conseguenza il css (se necessario)
e gestendo tutto con la stessa tecnica
se non ho interpretato bene, fai sapere
ciao
Marino
 
Ultima modifica:
Sì marino questo sì però non intendevo ciò.
Voglio dire che se magari inzializzo una variabile prima facendo così $tipo = "form";
e poi metto una condizione sulla variabile e se questa è vera $tipo = "form_1" non funziona..
Perchè $tipo sarà sempre uguale a $tipo = "fom_1", almeno a me succede questo, infatti le caselle sono sempre rosse, non solo quando si sbaglia ad immettere i dati, ma da subito
 
Ok, allora invece che il login ho provato a modificare la registrazione

PHP:
<?php

session_start ();
include ("connessione.php");

$tipo = "form";

$password = ($_POST['password']);
$conferma_password = ($_POST['conferma_password']);

if ($password != $conferma_password)
{
	$tipo = "form_1";
	
}

else  {

$query = "insert into users (password)
values ('$password')";

$result = mysql_query ($query, $connessione);

if ($result == 0) 
{
 die ("Errore di registrazione");
} 

else


{
	header ("location:registrazione_completa.html");
	exit;
}
   
}
Il problema è che non funge, i campi all'apertura della pagina si presentano subito rossi e all'errore non cambiano il loro colore
 
il tuo script php è "ben messo", probabilmente l'errore è in un'altra posizione
d'altra parte non hai postato l'intero "set"

in ogni caso per dimostrarti il funzionamento,
ho usato il tuo script php
ho aggiunto la parte html con css
ho disabilitato "mysql_query" mettendo il risultato a 1
ed infine ho evitato di chiamare il passo successivo "registrazione_completa.html"

puoi eseguire "registrazione.php" sotto riportato,
cliccando quante volte vuoi il bottone "registra", i campi restano bianchi
se inserisci "a" e "b" cliccando il bottone "registra", i campi diventano rossi e se clicchi una seconda volta tornano bianchi
infine se inserisci "a" e "a" restano bianchi

non so che altro inventare per capire dove puoi avere l'errore
ma quanto ti ho suggerito funziona perchè provato prima di postarlo
fai sapere, ciao
Marino

PHP:
<?php 

# http://localhost/test_site/php/test/ispanic/registrazione.php

session_start (); 
include ("connessione.php"); 

$tipo = "form"; 

if (!empty($_POST['password']))
{ 
  $password = ($_POST['password']); 
  $conferma_password = ($_POST['conferma_password']); 

  if ($password != $conferma_password) 
  { 
    $tipo = "form_1"; 
  } 
  else
  { 
    $query = "insert into users (password) values ('$password')"; 
//    $result = mysql_query ($query, $connessione); 
$result = 1;
    if ($result == 0)  
    { 
      die ("Errore di registrazione"); 
    }  
    else 
    { 
//      header ("location:registrazione_completa.html"); 
//      exit; 
    } 
  }  
}  
?>  
<!DOCTYPE html> 
<head> 
<style type="text/css"> 
.form	{ color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: white;} 
.form_1	{ color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: red;} 
</style> 
</head> 
<body> 
<form method="post" action="registrazione.php"> 
<input placeholder="password" tabindex="1" class="<?= $tipo; ?>" name="password" type="text" maxlength="40" /> 
<input placeholder="conferma password" class="<?= $tipo; ?>" name="conferma_password" type="text" maxlength="40" /> 
<input name="submit" type="submit" value="Registra" />
</form> 
</body> 
</html>
 
Bah, non capisco proprio, ora ti posto tutto il codice e la finiamo.. volevo riuscire a capire da solo il mio errore ma non lo trovo proprio: sempre stesso problema tutti i form rossi sempre.

PHP:
<?php


session_start ();
include ("connessione.php");

$tipo = "form";

$nome_utente = ($_POST['nome_utente']);
$password = ($_POST['password']);
$conferma_password = ($_POST['conferma_password']);
$email = ($_POST['email']);
$conferma_email = ($_POST['conferma_email']);
$anno = ($_POST['anno']);
$mese = ($_POST['mese']);
$giorno = ($_POST['giorno']);

if($POST['spam'] != '') header("location:pagina.html");

if ($password != $conferma_password)
{
	$tipo = "form_1";
	
}

elseif ($email != $conferma_email)
{
       $tipo = "form_1";
	
}

if (strlen ($password) < 6)
{
	$tipo = "form_1";

}

$pattern = "/[^A-Z0-9]/i";

$result = preg_match($pattern, $nome_utente);

if ($result)

{
	$tipo = "form_1";

	
}

$pattern = "/[^A-Z0-9]/i";

$result = preg_match($pattern, $password);

if ($result)

{
	$tipo = "form_1";

	
}


	$email = trim($email);
	
	if(!$email)
{

	 $tipo = "form_1";
	 
	     
}

	$num_at = count(explode('@', $email)) -1;
	if($num_at != 1)
	{

	 $tipo = "form_1";

	 
	     
}
	if (strpos($email, ';') and strpos($email, ',') and strpos($email, ''))
	{

	 $tipo = "form_1";

	 
	     
}
	if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $email))
	{

	 $tipo = "form_1";
}


else {

$query = "insert into users (nome_utente, password, email, anno, mese, giorno)
values ('$nome_utente' , '$password' , '$email', '$anno', '$mese', '$giorno')";

$result = mysql_query ($query, $connessione);

if ($result == 0) 
{
 die ("Errore di registrazione");
} 

else

{  
	header ("location:registrazione_completa.html");
	exit;
}
   
}

?>

HTML:
<form method="post" action="">
<input placeholder="Nome utente" class="<?= $tipo; ?>"  name="nome_utente" type="text" maxlength="40"/>//altri form uguali e identici.
All'inizio della pagina si trova il codice php e dopo tutto quello html, mentre il codice css si trova in un foglio di stile esterno.
 
ciao
parlando di errori (salvo che sia un errore di copy/paste) qui c'è un errore

PHP:
<form method="post" action="pagina.php">
<?php
session_start();
include ("connessione.php");
//...ecc...
?>
session_start deve essere la prima istruzione, prima di qualsiasi output html (anche uno spazio) a meno che tu non usi il reindirizzamento del flusso ob_start();.... ob_end_flush();
dovresti correggere così
PHP:
<?php
session_start();
?>
<form method="post" action="pagina.php">
<?php
include ("connessione.php");
//...ecc...
?>
 
come ti avevo detto in un post precedente,
devi differenziare il "tipo" gestendone uno specifico, per ogni campo che intendi controllare
se tutti i campi vengono controllati dallo stesso tipo, sicuramente o sono tutti bianchi o tutti rossi

ho modificato anche "$POST['spam']" probabilmente manca il tratto

scusa ma ho modificato il controllo degli errori,
mi sembra che il tuo script, permetta la scrittura del db, nel caso psw e mail siano uguali al loro duplicato

ho aggiunto un "trim" sul controllo della password altrimenti 6 spazi erano sufficienti per essere accettata

ho aggiunto il controllo sul nome

ho gestito il bottone per "submit"

poi ... lavoraci tu, modifica e vedi l'effetto che fa
ciao
Marino
PHP:
<?php 
session_start (); 
include ("connessione.php"); 

$tipo_pass = "form"; 
$tipo_email = "form"; 
$tipo_nome = "form";
$count_err = 0;

if (!empty($_POST['submit'])){ 

	$nome_utente = ($_POST['nome_utente']); 
	$password = ($_POST['password']); 
	$conferma_password = ($_POST['conferma_password']); 
	$email = ($_POST['email']); 
	$conferma_email = ($_POST['conferma_email']); 
	$anno = ($_POST['anno']); 
	$mese = ($_POST['mese']); 
	$giorno = ($_POST['giorno']); 

	if($_POST['spam'] != '') header("location:pagina.html"); 

	if ($password != $conferma_password) 
	{ 
		$tipo_pass = "form_1"; 
		$count_err = 1;
	} 

	if ($email != $conferma_email) 
	{ 
		$tipo_email = "form_1"; 
		$count_err = 1;
	} 

	if (strlen (trim($password)) < 6) 
	{ 
		$tipo_pass = "form_1"; 
		$count_err = 1;
	} 

	if (strlen (trim($nome_utente)) == 0) 
	{ 
		$tipo_nome = "form_1"; 
		$count_err = 1;
	} 

	$pattern = "/[^A-Z0-9]/i"; 
	$result = preg_match($pattern, $nome_utente); 
	if ($result) 
	{ 
		$tipo_nome = "form_1"; 
		$count_err = 1;
	} 

	$pattern = "/[^A-Z0-9]/i"; 
	$result = preg_match($pattern, $password); 
	if ($result) 
	{ 
		$tipo_pass = "form_1"; 
		$count_err = 1;
	} 

	$email = trim($email); 
	if(!$email) 
	{ 
		$tipo_email = "form_1"; 
		$count_err = 1;
	} 

	$num_at = count(explode('@', $email)) -1; 
	if($num_at != 1) 
	{ 
		$tipo_email = "form_1"; 
		$count_err = 1;
	} 

	if (strpos($email, ';') and strpos($email, ',') and strpos($email, '')) 
	{ 
		$tipo_email = "form_1"; 
		$count_err = 1;
	} 

	if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $email)) 
	{ 
		$tipo_email = "form_1"; 
		$count_err = 1;
	} 

	if($count_err == 0) { 

		$query = "insert into users (nome_utente, password, email, anno, mese, giorno) 
		values ('$nome_utente' , '$password' , '$email', '$anno', '$mese', '$giorno')"; 

		$result = mysql_query ($query, $connessione); 

		if ($result == 0)  
		{ 
			die ("Errore di registrazione"); 
		}  
		else 
		{   
			header ("location:registrazione_completa.html"); 
			exit; 
		} 
	} 
} 
?> 
<!DOCTYPE html>
<head>
<style type="text/css">
.form	{ color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: white;}
.form_1	{ color: black; font-family: Verdana; font-weight: bold; font-size: 12px; background-color: red;}
</style>
</head>
<body>
<form method="post" action="pagina.php"> 
<form method="post" action="">
<input placeholder="Nome utente" class="<?= $tipo_nome; ?>"  name="nome_utente" type="text" maxlength="40" /><br />
<input placeholder="Password" class="<?= $tipo_pass; ?>"  name="password" type="text" maxlength="40" /><br />
<input placeholder="Conferma password" class="<?= $tipo_pass; ?>"  name="conferma_password" type="text" maxlength="40" /><br />
<input placeholder="email" class="<?= $tipo_email; ?>"  name="email" type="text" maxlength="40" /><br />
<input placeholder="Conferma email" class="<?= $tipo_email; ?>"  name="conferma_email" type="text" maxlength="40" /><br />
<input placeholder="anno di nascita" class="form" name="anno" type="text" maxlength="4" /><br />
<input placeholder="mese" class="form" name="mese" type="text" maxlength="4" /><br />
<input placeholder="giorno" class="form" name="giorno" type="text" maxlength="4" /><br />
<input name="submit" type="submit" value="Registra" />
</form>
</body>
</html>
 
ciao
scusa perche fai tutto qull'ambaradan per la verifica dell'email?
basta
PHP:
<?php
//.....
$email=filter_var($email, FILTER_SANITIZE_EMAIL);
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
	$tipo_email = "form_1"; 
	$count_err = 1;
}
//.....
?>
 

Discussioni simili