-
Aiuto con Database
Salve,
ho un problema riscontratomi in un metodo di Registrazione sul mio sito.
qquando l'utente compila il form e preme il bottone di conferma
questo dovrebbe poireindirizzare tramite get e controllare vari errori
qualora ci fossero.
Tutto funziona correttamente tranne una cosa
quando deve "copiare" le informazioni e inviarle al database
l'Email non la scrive bensì nella tabella esce scritto "1"
il codice per l'invio dei file al db è questo
(Nome tabella: Registrati)
Codice PHP:
mysql_query("INSERT INTO Registrati
(id , username , Password , Email )
VALUES
('', '$username', '$Password', '$Email' )") OR DIE(mysql_error());
nella tabella riporta tutto correttamente anche l'id con l'auto-increment
solo "Email" mi scrive "1".
P.S. NON è con valore auto-increment
la mia domanda è:
come fare per salvare correttamente l'email nel db?
-
Ma nella variabile cosa c'è? Hai provato a fartela stampare?
-
Aggiungo che senza lo script che comprende la valorizzazione delle variabili utilizzate, viene difficile aiutare. Posta lo script in modo da capire.
Poi aggiungi all'inizio dello script:
Codice:
error_reporting(E_ALL);
e posta gli eventuali errori col codice.
:wink:
-
[QUOTE=biccheddu;882861]
[QUOTE=saitfainder;882843]
mi spiego meglio.
in pratica ho creato un sistema di registrazioni che include la connessione al db.
questo dopo aver controllato che ci siano tutti i campi e svariati errori
invia le informazioni nella tabella "Registrati"
li scrive tutti giusti tranne il campo Email che mi scrive all'interno del valore "1" e non l'email usata nel form.
Seguo il consiglio di biccheddu
e provo a srivere il codice fornito all'inizio del codice e mi da errore di compilazione.
questo è la pagina riguardante l'invio dei dati alla tabella (tengo a precisare che i valori ho controllato e sono questi)
Codice PHP:
<?php
if ( $_GET['stato'] == "confermato" ) {
// Recupera i dati
$Nome = $_POST['Nome'];
$Cognome = $_POST['Cognome'];
$username = $_POST['username'];
$Password1 = $_POST['Password1'];
$Password2 = $_POST['Password2'];
$Email = $_POST['Email'];
// campi compilati
if ( $Nome == TRUE && $Cognome == TRUE && $username == TRUE && $Password1 == TRUE && $Password2 == TRUE && $Email == TRUE ) {
// controlla se il campo mail non sia stato scritto in maniera errata
$Email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$Email);
if ( $Email == TRUE ) {
// controlla se l'Email è presente nel database
$sql = mysql_query("SELECT * FROM Registrati WHERE Email = '$Email'") or die ("E-Mail già Registrata Accedi tramite Login");
$num_rows = mysql_num_rows($sql);
if ( $num_rows == 0 ) {
// controlla se l'username è presente nel database
$sql = mysql_query("SELECT * FROM Registrati WHERE username = '$username'") or die ("Nick già in uso");
$num_rows = mysql_num_rows($sql);
if ( $num_rows == 0 ) {
// ora controlliamo che le password inserite siano identiche
if ( $Password1 == $Password2 ) {
// criptiamo la password con md5
$pass_md5 = md5($Password2);
$username = mysql_real_escape_string($username);
$Nome = mysql_real_escape_string($Nome);
mysql_query("INSERT INTO Registrati
(id , Nome , Cognome , username , Password1 , Password2 , Email )
VALUES
('','$Nome', '$Cognome', '$username', '$Password1', '$pass_md5', '$Email' )") OR DIE(mysql_error());
// invia una mail con la riuscita registazione (ANCHE QUESTO STO CERCANDO DI AGIUSTARE IN QUANTO L'EMAIL NON LA MANDA)
mail ($Email, "Registrazione", "Complimenti registrazione effettuata con successo.", "From: [email]admin@waspes.it[/email]");
// messaggio da far visualizzare all'utente finale
echo "<script>location='Registrati.php?registrazione=completata';</script>";
}
} else {
echo "<script>location='Registrati.php?Error=5';</script>";
}
} else {
echo "<script>location='Registrati.php?Error=4';</script>";
}
} else {
echo "<script>location='Registrati.php?Error=3';</script>";
}
} else {
echo "<script>location='Registrati.php?Error=2';</script>";
}
} else {
echo "";
}
?>
<!-- Fine Dati al DataBase -->
<!-- Errori -->
<?php
// attraverso un if controlla l'errore 2
if ( $_GET['Error'] == "2" ) {
echo "Dati mancanti... Si prega di controllare.";
}
// attraverso un if controlla l'errore 3
if ( $_GET['Error'] == "3" ) {
echo "L'Email inserita non e idonea per l'iscrizione.";
}
// attraverso un if controlla l'errore 4
if ( $_GET['Error'] == "4" ) {
echo "L'Indirizzo Email e Gia Presente Prova a Loggarti";
}
// attraverso un if controlla l'errore 5
if ( $_GET['Error'] == "5" ) {
echo "Nick già in uso!";
}
// attraverso un if controlla l'errore 6
if ( $_GET['Error'] == "6" ) {
echo "Le password non corrispondono, si prega di correggere";
}
// attraverso un if reinviamo alla pagina di completamento
if ( $_GET['registrazione'] == "completata" ) {
echo "<script>location='Completato.php';</script>";
}
?>
<!-- /Errori -->
invece questa e la tabella con i suoi valori scrivo 2 righe di esempio
Codice:
id Nome Cognome username Password1 Password2 Email
1 Tizio Rossi rosso 123 pw in md5 1
2 Tizio2 Rossi2 rosso2 12345 pw in md5 1
siccome il codice della pagina è impostato sul controllo di non registrarsi con la stessa email
da errore all'utente come giusto che sia quindi l'esempio 2 è per far capire che il campo Email non viene auto-incrementato come ID ma ben si ha sempre quel valore li
-
Codice PHP:
// controlla se il campo mail non sia stato scritto in maniera errata
$Email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$Email);
Qui effettui l'eregi, per di più funzione deprecata, sulla stessa variabile che ne contiene il valore inviato tramite il form. Questa riga ne sostituisce il valore alla variabile e lo trasforma nel risultato della funzione, quando è 1 true e quando è 0 false: fai una condizione o cambia il nome della variabile.
Poi preg_match() o filter_var() per il controllo dell'email, ma eregi() lasciala perdere a priori.
:wink:
-
[QUOTE=biccheddu;883075]
Quindi il codice diventerà cosi?
Codice PHP:
// controlla se il campo mail non sia stato scritto in maniera errata
$Email = preg_match("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$Email);
se non è cosi puoi scrivermi l'esempio
grazie :wink:
P.S. un'altra cosa quando la registrazionbe è andata a buon fine
questo rimanda alla pagina "completato.php"
è possibile fargli copiare le variabili username e Password1 anche in un'altra tabella per esempio UTENTi
se si mi dici il codice e dove inserirlo? (penso sarà sempre un include con una pagina di connessione alla tabella )
-
Cambia
Codice PHP:
if ( $Email == TRUE ) {
con:
Codice PHP:
if (preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]{0,63})*[.][a-z]{2,4}$/i', $Email) {
in questo modo la variabile $Email rimane col dato inviato dal form.
Per copiare i dati, basta che fai una seconda query, no?
:wink:
-
[QUOTE=biccheddu;883381]Cambia
mi da errore
Parse error: syntax error, unexpected T_VARIABLE in :top:
se usi skype posso aggiungerti come amico (me lo invii con msg privato se ti va)
grazie
per l'altra cosa come posso fare ? copio manualmente i dati da una tabella all'altra?
-
Prima di:
Codice PHP:
// invia una mail con la riuscita registazione (ANCHE QUESTO STO CERCANDO DI AGIUSTARE IN QUANTO L'EMAIL NON LA MANDA)
Aggiungi un'altra query e la esegui con mysql_query(), è più semplice di quanto pensi. Prova, se sbagli riprova e poi chiedi aiuto.
Skype è nel mio profilo qui su AV, ma non pensare ti riesca ad aiutare, lo uso esclusivamente per lavoro :tongue
:wink:
-
Dopo:
Codice PHP:
mysql_query("INSERT INTO Registrati
(id , Nome , Cognome , username , Password1 , Password2 , Email )
VALUES
('','$Nome', '$Cognome', '$username', '$Password1', '$pass_md5', '$Email' )") OR DIE(mysql_error());
Aggiungi:
Codice PHP:
mysql_query("Query per copiare i dati nella tabella che vuoi") OR DIE(mysql_error());
Se non hai le minime conoscenze di php e MySQL, ti consiglio o di studiare ed "allenarti" o di lasciare perdere, perché andare avanti chiedendo codici agli altri non ti aiuterà tantissimo.
:wink:
-
Citazione:
Originalmente inviato da
biccheddu
L'invio alle 2 tabelle funziona.
il mio problema è quando controlla la mail
con:
Codice PHP:
if (preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]{0,63})*[.][a-z]{2,4}$/i', $Email) {
mi da errore.
-
Utilizza filter_var('', FILTER_VALIDATE_EMAIL).
@biccheddu: me l'avevi detto proprio tu in una discussione... :lol:
Ciao! :wink:
-
O filter_var() o preg_match(), ma NON eregi().
Comunque che errore?
:wink:
-
Scusa non ci avevo fatto caso!
:lolloso:
Comunque @waspescreazioni dovresti effettuare dei controlli ai dati ricevuti altrimenti rischi molto! :wink:
-
DOVE devo mettere il codice???
devo cambiare la riga
Codice PHP:
$Email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$Email);
con una di queste??
Codice PHP:
if (filter_var('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]{0,63})*[.][a-z]{2,4}$/i', $Email) {
o
Codice PHP:
if (preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]{0,63})*[.][a-z]{2,4}$/i', $Email) {
l'errore è
Parse error: syntax error, unexpected '{'
-
Con questo:
Codice PHP:
if(preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]{0,63})*[.][a-z]{2,4}$/i', $Email)) {
mancava la )
-
ma dove lo metto al posto di cosa?
-
Sostituisci:
Codice PHP:
$Email = eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$",$Email);
if ( $Email == TRUE ) {
con
Codice PHP:
if(preg_match('/^[^0-9][a-z0-9_]+([.][a-z0-9_]+)*[@][a-z0-9_]+([.][a-z0-9_]{0,63})*[.][a-z]{2,4}$/i', $Email)) {
-
grazie finalmente qualcuno che capisce il mio dubbio :D
-------------
eliminate pure questo topic ;)