Insert

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Sto rescrivendo da capo un form per l'iscrizione, ma ogni volta che inizio c'è sempre qualche difficoltà in corso. Allora, ho il seguente pezzo di codice in php, ma il compilatore, mi da un bel triangolino giall (l'ho battezzato come cartellino giallo). Il codice è il seguente:
PHP:
// verifico la presenza dei campi obbligator
    
 $errore ="";

 if($nome ==""){$errore .=  "Attenzione: il campo nome deve essere compilato. <br> <br>";}
 if($cognome ==""){$errore .=  "Attenzione: il campo cognome deve essere compilato. <br> <br>";}  
}

if($errore !=""){
		echo "<h1>$errore</h1>";

		echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
//echo "<meta http-equiv='Refresh' content='4; URL="location:icrizione.php"($_SERVER['PHP_SELF']).'>";
// echo 'header("location:pagina.php")';
        }else{
 $q_i=mysql_query("INSERT INTO utenti(nome, cognome) VALUES('$nome','$cognome')");
			echo "<h1> <br>Utente registrato correttamente. </h1>";//e torno al form
			echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

}

Spero di avere qualche buon consiglio dagli esperiti e da tutto lo staff grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ragiona un momentino prima di partire:
quali campi ti servono e quali obbligatori o facoltativi?
1. nome e cognome io li eviterei potresti avere grane con la privacy (se non puoi farne a meno: facoltativi)
2. indirizzo email obbligatorio
3. username obbligatorio se lo scegle il cliente
4. password: la fornisci tu (puoi generarla in automatico) o la fai sceglierre all'utente? comunque obbligatoria

rispondi a questo e ti butto giù un esempio
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao,

Visto cher si devono registrare gli amichetti di mio nipote, appunto avevo pensato a nome e cognome, in quanto lui li conosce per nome e anche per cognome (credo), però a priscindere da questo. I campi obbligatori sono i seguenti (secondo me):

1) Indirizzo Email;
2) Username (scelto da chi si iscrive);
3) Password (scelto da chi si iscrive);
4) Data di nascita (per adesso da tenere nascosta come campo facoltativo)

I primi 3 sono obbligatori sempre scelti dalla persona che si iscrive. La cosa fica, sarebbe, se è possibile, mettere una verifica mentre t'iscrivi con una "V" e che ti dice che è libero quello che hai scelto. Ma questa è na cosa secondaria. Grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
a maggior ragione se sono amichetti e quindi minorenni, meglio lasciare perdere nome e cognome.
a parte l'automoatismo della verifica mentre uno scrive in cui necessita ajax e/o jquery (di cui non sono molto esperto), ti preparo un esempio e (spero) entro domani te lo posto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco un esempio.
guarda che ho messo i nomi della tabella e dei suoi campi a caso, verifica che siano i tuoi
PHP:
<?php
if(isset($_POST['log'])){
	//qui i dati di connessione
	//leggo i vari post
	$user=strtolower(strip_tags(trim($_POST['user'])));
	$pass=strip_tags(trim($_POST['pass']));
	$rip_pass=strip_tags(trim($_POST['rip_pass']));
	$email=strip_tags(trim($_POST['email']));
	//inizio i vari controlli
	$ok_ko="";
	//verifico l'username che comunque ho messo gia tutto in minuscolo in quanto poi in lettora si rende case insensitive
	if(!preg_match('/^[a-z0-9 _]{3,12}$/i', $user)){
		$ok_ko .= "username non corretto o vuoto<br>";
	}else{//l'user è corretto verifico che non esiste di gia
		//!!! qui devi vedere la tua tabella io metto dei nomi a caso e anche in seguito !!!
		$q=mysql_query("SELECT user FROM tabella_utenti WHERE user='$user'");
		if(msql_num_rows($q) > 0){
			$ok_ko .= "username esistente, ti prego cambiarlo<br>";
		}
	}
	//verifico la password che generalmente è case sensitive
	if(!preg_match('/^[a-zA-z0-9]{6,12}$/i', $user)){
		$ok_ko .= "password non corretta o vuota<br>";
	}else{
		//verifico l'esistenza
		$q=mysql_query("SELECT pass FROM tabella_utenti WHERE pass='$pass'");
		if(msql_num_rows($q) > 0){
			$ok_ko .= "password esistente, ti prego cambiarla<br>";
		}else{
			if($pass != $rip_pass){
				$ok_ko .= "password e ripetizione non coincidenti<br>";
			}
		}
	}
	//verifico l'indirizzo email
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
		$ok_ko .= "indirizzo email non valido<br>";
	}
	//***fine controlli. se $ok_ko non è vuoto sono stati fatte degli errori, avviso e torno al form pulito
	if{$ok_ko !=""){
		//mostro gli errori fatti
		echo $ok_ko;
		//e torno al form pulito dopo 4 sec
		echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{//non ci sono stati errori
		//qui inserisci tutti i dati nella tabella tabella_utenti (o come la chiamerai)
		//ricordati di codificare la password meglio con sha1 che md5 (verifica lunghezza del campo in tabella)
		echo "$user grazie di esserti registrato";
		// rimandi al form o dove vuoi sostituenedo htmlspecialchars($_SERVER['PHP_SELF']) col nome della pagina
		echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" method="post">
<table width="90%"  border="0" cellspacing="0" cellpadding="2">
  <tr>
	<td>inserisci un username di tua scelta</td>
    <td><input name="user" type="text" id="user"></td>
	<td>(solo caratteri alfanumerici, spazio e underline, minimo 3 massimo 12 caratteri)</td>
  </tr>
  <tr>
	<td>inserisci una password di tua scelta</td> 
	<td><input name="pass" type="text" id="pass"></td> 
	<td>(solo caratteri alfanumeric, minimo 6 massimo 12 caratteri)</td>
  </tr>
  <tr>
	<td>ripeti la password</td> 
	<td><input name="rip_pass" type="text" id="rip_pass"></td><td>&nbsp;</td>
  </tr>
  <tr>
	<td>la tua email</td> 
	<td><input name="email" type="text" id="email"></td><td>&nbsp;</td>
  </tr>
  <tr>
    <td>tutti i campi sono obbligatori</td><td>&nbsp;</td><td><input name="log" type="submit" id="log" value="log"></td>
</table>
</form>
comunque guarda che è schematico sta a te adattarlo alle tue esigenze, anche con gli appositi css
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao,


Grazie per avermi postato il codice, mi mancava esattamente il controllo sull'email, lo stavo iniziando ad aggiustare e a riscrivere nel frattempo. Spero che non mi dia errore di vecchiaia anche se non adoperava questo termine (intendo la formuletta eregi). Comunque lo provo e ti farò sapere. Un'info, avendo una certa funzione all'interno del listato, come si richiama tale funzione racchisa possibilmente in un if (controllo) ???? Ho trovato un esempio che la richiama semplicemente. Ad esempio:

se la funziona si chiama pippo, poi più avanti veniva richiamata semplicemenete pippo. Invece mettendola in un if ??? Mi serve per controllare l'inserimento di un campo. Che stavo scrivendo ieri. Ciao, grazie ancora.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quello che ho capito intendi una cosa del genere
PHP:
<?php
function pippo($c){
	if($c !=""){
		return $c;
	}else{
		return FALSE;
	}
}
//altre mille righe di codice
if(pippo($campo)){
	echo "$campo è valido";
}else{
	echo "non hai inserito un valore valido";
}
//altre tremila righe di codice
//altra alternativa
if(!pippo($campo)){
	echo "non hai inserito un valore valido";
}
//eccetera eccetera.....
?>

poi NON usare eregi, corri il rischio che si pianti con un warning
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
ciao

Ciao,

Perdonami, nell'esempio riportato da te, "pippo" sarebbe la funzione giusto ???? Anche se mi sono espresso da cani quale fosse il mio intento. comunque hai centrato in pieno quello che volevo sapere ti ringrazio. Tanto a quel punto, il controllo lo fa ugualmente della scrittura regolare dell'email o sbaglio ??? Un ultima cosa, ti posto un esempio di codice che ho prelevato ieri sera riguardadante appunto la funzione. Volevo un tuo parere. eccolo qua:

PHP:
<?php

//validazione sintattica indirizzo e-mail
function chkEmail($email)
{
    // elimino spazi, "a capo" e altro alle estremità della stringa
    $email = trim($email);
     // se la stringa è vuota sicuramente non è una mail
    if(!$email) {
        return false;
    }
     // controllo che ci sia una sola @ nella stringa
    $num_at = count(explode( '@', $email )) - 1;
    if($num_at != 1) {
        return false;
    }
     // controllo la presenza di ulteriori caratteri "pericolosi":
    if(strpos($email,';') || strpos($email,',') || strpos($email,' ')) {
        return false;
    }
     // la stringa rispetta il formato classico di una mail?
    if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $email)) {
        return false;
    }
     return true;
}  
?>

Mi dici secondo te da esperto  cosa ne pensi ???? Grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
penso che tu abbia scritto un sacco di codice che fa (odovrebbe) quello che fa
PHP:
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $ok_ko .= "indirizzo email non valido<br>";
    }
in tre righe invece di una ventina
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao,

Ho provato il tuo codice e mi da un errore l'editor che ti posto ora:

PHP:
//***fine controlli. se $ok_ko non è vuoto sono stati fatte degli errori, avviso e torno al form pulito
    if{$ok_ko !=""){
        //mostro gli errori fatti
        echo $ok_ko;
        //e torno al form pulito dopo 4 sec
        echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

    }else{//non ci sono stati errori   <-----> segnala errore cartellino rosso ma siciramente si riferisce a qualche altra riga

        //qui inserisci tutti i dati nella tabella tabella_utenti (o come la chiamerai)
        //ricordati di codificare la password meglio con sha1 che md5 (verifica lunghezza del campo in tabella)
        echo "$user grazie di esserti registrato";
        // rimandi al form o dove vuoi sostituenedo htmlspecialchars($_SERVER['PHP_SELF']) col nome della pagina
        echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    }
}

Quindi non so se funziona o meno
perchè mi blocca. Mi fai sapere se anche a te ti da errore per caso ??? Ciao e grazie. :crying: :crying:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
così è un po' difficile capire, anche se probailmente hai fatto un errore di copy/paste.
comunque quale errore ti da?

p.s.
dovrebbe funziare perche è quello che uso io semplificato perchè il mio è bilingue e si ricorda cosa l'utente ha scritto non errato
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao,

Ora non ricordo più esattamente che errore mida, credo che manchi una parentisi grafe. Comunque io ho sfruttato il controllo della scrittura corretta dell'email e funziona perfettamente. Solo che ho un problema. Devo, far ripetere l'email per essere sicuri come nei siti dei forum, che sia quella. La verifica è molto semplice e si risolve in una riga, solo che non mi dice quando scrivo male l'email e quindi mi da il solito messaggio "utente registrato correttamnete", anche se scrivo per la seconda volta l'email erratta. Forse fa solo il controllo sul primo inserimento dell'email ??? Può' essere ???? Ti posto il codice:


PHP:
//controllo scrittura corretta dell'email
 
 if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $ok_ko .= "indirizzo email non valido<br>";
 //   } //chiude il controllo scrittura corretta dell'email 

        // Controlla se le due email coincidono

if($email != $ripemail){$ok_ko .=  "Attenzione: le due email non coincidono. <br> <br>";}
} //chiude il controllo scrittura corretta dell'email

// Controllo se esiste l'email nel db

$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
	echo "<br> <br> <h1> Attenzione: l'email: ".$email." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();

}

if($ok_ko !=""){
		echo "<h1>$ok_ko</h1>";
		echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();
}else{
 $q_i=mysql_query("INSERT INTO utenti(nome, cognome, username, email) VALUES('$nome','$cognome','$username','$email')");
			echo "<h1> <br>Utente registrato correttamente. </h1>";//e torno al form
			echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";

}
}
?>


Dimmi tu dove la dovrei mettere la riga per favore. Sono commentate, quindi dovresti individuarle facilmente. Grazie.

Risolto il problema, fa la verifica solo sulla prima email e non sulla seconda e per farla anche sulla seconda ???? Perchè magari uno si può sbagliare a scrivere sulla seconda anzicchè sulla prima non ti sembra ????
 
Ultima modifica:

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao,

Facendo svariate prove, ho risolto il problema anche del secondo controllo dell'inserimento email. Ti posto il codice, se ti potesse servire. Un semplice gioco di if doppi. Ecollo:

PHP:
//controllo scrittura corretta dell'email
 
 if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){
     
             $ok_ko .= "indirizzo email non valido<br>";
 //   } //chiude il controllo scrittura corretta dell'email 

        // Controlla se le due email coincidono

if($email != $ripemail){$ok_ko .=  "Attenzione: le due email non coincidono. <br> <br>";}
} //chiude il controllo scrittura corretta dell'email

// Controllo se esiste l'email nel db

$checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'");
$vuota=mysql_num_rows($checkemail);
if($vuota > 0){
	echo "<br> <br> <h1> Attenzione: l'email: ".$email." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();

}

if($ok_ko !=""){
		echo "<h1>$ok_ko</h1>";
		echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
exit();
}

Come vedi, molto semplice. Una cosa, per ritornare indietro a correggere i dati e non perdere quelli scritti, comw debbo fare ????? Grazie.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io uso le sessioni
es.
PHP:
if($nome ==""){
    $ok_ko.="il nome è obbligatorio";
    $_SESSION['nome']="";
}else{
   $_SESSION['nome']=$nome;
}
poi nel campo di input del nome metto il value

PHP:
<input name="nome" type="text" id="nome" size="50" value="<?php if(isset( $_SESSION['nome'])){echo  $_SESSION['nome'];}?>">

analogo per gli altri
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao

Ciao,

Fra poco ti chiederò consiglio sulle sessioni ma tu dici che è meglio aprire un altro post giusto ????? Te lo chiedo visto che hai postato i codici per le sessioni che adoperi.
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Access: recuperare Indice dopo un insert into MS Access 0
R INSERT INTO tabella non funziona Classic ASP 2
Z problemi con foreach insert into PHP 10
Y INSERT INTO PHP 0
M più insert tramite while loop PHP 1
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
G Insert into select - Aiuto MySQL 0
L Insert php sql da una form multipla PHP 6
A [PHP] Problema query insert [RISOLTO] PHP 14
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
P [PHP] INSERT e UPDATE PHP 1
D [ASP] Mysql insert e update Classic ASP 2
M [Javascript] Verifica calcolo prima di fare insert Javascript 13
Monital [PHP] Insert into non inserisce tutti i dati PHP 1
trattorino [PHP] problema entrata immagini insert PHP 1
C [Visual Basic] Errore INSERT su DB MySQL (VB.Net) Visual Basic 4
3_g errore con mysql insert in PDO PHP 29
Merlina3377 php insert dati su tabella sql PHP 9
T [PHP] impedire un doppio INSERT INTO dopo reload della pagina PHP 3
daniele8808 Insert a converted php array in a js object PHP 4
P [MySQL] Query su DB 1 e Insert su DB 2 PHP 11
Laskot Query al DB con php (INSERT) PHP 2
P [PHP] merge di 2 tabelle e insert su terza tabella PHP 15
giancadeejay [PHP] INSERT into tabella tramite scelta checkbox PHP 0
E [PHP] problema insert query PHP 9
O errore INSERT con oggeto datetime MySQL 2
A insert ed upload PHP 1
E Problemi auto increment con query Insert Into Select MySQL 2
A Insert multiple a partire da form html PHP 3
stellare21 insert con Sqlite e PHP PHP 4
Marco_88 Aiuto con istruzione INSERT Database 8
A Insert non inserirsce tutti i valori MySQL 11
MarcoGrazia [PDO] insert che non inserisce e non da errori PHP 1
MarcoGrazia Insert into che da errore: numero di parametri non validi.... MySQL 7
S Insert into....on duplicate key update MySQL 2
M Problemi con la insert PHP 1
I Insert con select da tabella e valori predefiniti MySQL 2
A Insert da ciclo for PHP 4
Monital [risolto] insert into if select non presente MySQL 7
G Inserimento loop in una INSERT query in PHP e MySQL PHP 2
S INSERT e UPDATE non funzionano PHP 1
H [RISOLTO]Problema connessione + insert mysqli PHP 10
L insert into da query select PHP 0
S Tempi per INSERT MySQL 7
A insert funziona in server locale ma non in remoto MySQL 7
Emix Problema Insert... PHP 10
C Aiuto INSERT INTO... ON DUPLICATE KEY UPDATE PHP 1
M Sicurezza dati form per insert e select in database PHP 11
E Problema con INSERT INTO Classic ASP 2
F insert immagini database PHP 2

Discussioni simili