- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Ok TheDarkita per il checkbox tutto ok grazie. Adesso provo lo script per il recupero/cambio della password visto che non ho ancora provato. Se c'è qualcosa che non mi quadra ti faccio sapere.
Thank.
-
Prego.
-
Meno male che ci sei tu TheDarkita.
Avrei un'altro problema, sto facendo la pagina per la cancellazione da parte degli utenti se lo desiderano, ma riscontro un problema ecco il codice:
[PHP]<?php
session_start();
// Includo la connessione al database
require('config.php');
// Se il modulo viene inviato...
if(isset($_POST['cancella']))
{// 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 '' // 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); } // Controllo il Nome Utente if(strlen($user) < 4 || strlen($user) > 12) die('Il nome utente non corrisponde a quello inserito al momento della registrazione'); // Controllo la Password elseif(strlen($pass) < 4 || strlen($pass) > 12) die('La password non corrisponde a quella inserita al momento della registrazione'); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('La email non corrisponde a quella inserita al momento della registrazione'); // Controllo il nome utente non sia già cancellato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Questa username non esiste nel nostro database! Verificare la username'); // Controllo l'indirizzo email non sia già cancellata elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email non esiste nel nostro database. Verificare la email'); // Cancellazione dell'utente nel database else { // Query per la cancellazione dell'utente nel database $strSQL = "DELETE FROM utenti (id,user,pass,mail)"; $strSQL .= "VALUES('$user', '$pass', '$mail')"; mysql_query($strSQL) OR die("Errore 003. <br>
Possibile cause: <br>
-
uno o più dati sono errati.<br>
-
non ha inserito i suoi dati correttamente.<br>
-
errore del sistema.<br>
Si prega tornare indietro e riprovare a cancellarsi o<br>
contattare l'amministratore.<br>
Failure because: ".mysql_error());// Messaggio d'errore die('NOME SITO - CANCELLAZIONE UTENTE CONFERMATA.<br>
Grazie per avere utilizzato i nostri servizi,<br>
sperando di riaverla prossimamente come utente<br><br>
Saremmo lieti comunque sapere, inviadoci un email, se la sua cancellazione<br>
al sito è dovuto a problemi riscontrati o<br>
insoddisfazioni<BR>
Grazie');
exit;
}
}
?>[/PHP]
Da notarsi che ho integrato la cancellazione dell'id:
[PHP] $strSQL = "DELETE FROM utenti (id,user,pass,mail)";
[/PHP].
E' giusto? o devo modificare tutto il codice?
ed ecco il form di cancellazione:
[PHP]<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') 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 />
<br />
<input name="cancella" type="submit" value="Cancellarsi" />
<input type="submit" name="reset" id="reset" value="Reset Campi" />
<br />
</form>[/PHP]
Quando provo a eseguire (in locale con nome fittizio inserito già nel db) mi da questa risposta che ho integrato nello script:
[PHP]Questa username non esiste nel nostro database! Verificare la username[/PHP]
dove sto sbagliando?
grazie.
-
-
La sintassi corretta per la query di DELETE è la seguente:
[php]
$strSQL = "DELETE FROM utenti WHERE id = '$id' LIMIT 1";
[/php]
In $id ci deve essere l'id dell'utente da cancellare.
-
Spiacente TheDarkita, ma lo script per la cancellazione non và, sicuramente sto sbagliando qualcosa.
Ho creato un nuovo utente registrato e poi successivamente ho fatto in modo che questo utente si cancellase dal sito, (ahimè !:() non ho ottenuto la cancellazione.
Potresti scrivermi il codice e il form? forse da li potrò capire dove sbaglio.
Caspita se vede che sono proprio negato pe il php
Grazie.
-
Ciao arkom,
Non capisco perché hai rimesso controlli su email, password, ecc.
Dovresti chiedere esclusivamente l'email di cancellazione e la password, fare una query per verificare che siano corretti, e se corretti far partire quella query di eliminazione.
-
Spero di avere capito. La soluzione dovrebbe essere cosi?
[PHP]<?php
session_start();
// Includo la connessione al database
require('config.php');
// Se il modulo viene inviato...
if(isset($_POST['cancella']))
{// Dati Inviati dal modulo ['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 '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $pass = addslashes($pass); $mail = addslashes($mail); } // Controllo se la password sia giusta
if(mysql_num_rows(mysql_query("SELECT pass FROM utenti WHERE pass = '$pass' LIMIT 1")) == 1)
die('Questa password non corrisponde a quella di registrazione. Verificare campo password!);
// Controllo l'indirizzo email non sia già cancellata
elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
die('Questo indirizzo email non corrisponde a quella di registrazione. Verificare campo email');
// Cancellazione dell'utente nel database
else
{// Query per la cancellazione dell'utente nel database $strSQL = "DELETE FROM utenti WHERE id = '$id' LIMIT 1"; $strSQL .= "VALUES('$pass', '$mail')"; mysql_query($strSQL) OR die("Errore 003. <br>
Possibile cause: <br>
-
uno o più dati sono errati.<br>
-
non ha inserito i suoi dati correttamente.<br>
-
errore del sistema.<br>
Si prega tornare indietro e riprovare a cancellarsi o<br>
contattare l'amministratore.<br>
Failure because: ".mysql_error());// Messaggio d'errore die('NOME SITO - CANCELLAZIONE UTENTE CONFERMATA.<br>
Grazie per avere utilizzato i nostri servizi,<br>
sperando di riaverla prossimamente come utente<br><br>
Saremmo lieti comunque sapere, inviadoci un email, se la sua cancellazione<br>
al sito è dovuto a problemi riscontrati o<br>
insoddisfazioni<BR>
Grazie');
exit;
}
}
?> [/PHP]
e cosi il form:
[PHP]form action="" method="post">
<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 />
<br />
<input name="cancella" type="submit" value="Cancellarsi" />
<input type="submit" name="reset" id="reset" value="Reset Campi" />
<br />
</form>
[/PHP]Questo è il massimo che ho potuto capire, spero che sia giusto.
Grazie per tuo aiuto fino adesso.
-
-
Come hai fatto tu c'è un problema, facendo le 2 query in quel modo, cerchi prima un qualsiasi utente con quella password e dopo un utente con quell'email, è possibile che si trovi l'utente A che usi quella password e l'utente B che usi quell'email, in pratica i dati sono errati.
[php]
<?php
session_start();
// Includo la connessione al database
require('config.php');
// Se il modulo viene inviato...
if(isset($_POST['cancella']))
{// Dati Inviati dal modulo ['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 '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $pass = addslashes($pass); $mail = addslashes($mail); } $query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' ANDpass = '$pass' LIMIT 1"); // Controllo se la password sia giusta
if(mysql_num_rows($query) == 0)
die('Password e/o indirizzo email non valido');
else
{
$a = mysql_fetch_array($query);
// Query per la cancellazione dell'utente nel database
$strSQL = mysql_query("DELETE FROM utenti WHERE id = '{$a['id']}' LIMIT 1");// Messaggio d'errore die('NOME SITO - CANCELLAZIONE UTENTE CONFERMATA.<br>
Grazie per avere utilizzato i nostri servizi,<br>
sperando di riaverla prossimamente come utente<br><br>
Saremmo lieti comunque sapere, inviadoci un email, se la sua cancellazione<br>
al sito è dovuto a problemi riscontrati o<br>
insoddisfazioni<BR>
Grazie');
}
}
?>
[/php]
-
Forse c' è un errore nello codice Thedarkita nella linea 10:
[PHP]<?php
session_start();
// Includo la connessione al database
require('config.php');
// Se il modulo viene inviato...
if(isset($_POST['cancella']))
{// Dati Inviati dal modulo ['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 '' // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $pass = addslashes($pass); $mail = addslashes($mail); } $query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' AND pass = '$pass' LIMIT 1"); // Controllo se la password sia giusta
if(mysql_num_rows($query) == 0)
die('Password e/o indirizzo email non valido');
else
{
$a = mysql_fetch_array($query);
// Query per la cancellazione dell'utente nel database
$strSQL = mysql_query("DELETE FROM utenti WHERE id = '{$a['id']}' LIMIT 1");// Messaggio d'errore die('ERRORE NELLA CANCELLAZIONE UTENTE.<br>
Possibile cause: <br>
- non ha inserito i suoi dati correttamente.<br>
- errore del sistema.<br>
Si prega tornare indietro e riprovare a registrarsi o<br>
contattare amministratore del sito<BR>
Grazie');
// Reindirizzo l'utente ad una pagina di conferma della cancellazione
header('Location: user_delete_ok.php');
exit;
}
}
?>
[/PHP]
ossia in questa porzione del codice:
[PHP] ['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, [/PHP]
messaggio di errore:
[HTML]Parse error: parse error in C:\Programmi\EasyPHP 3.0\www\self_delete.php on line 10[/HTML]
Ahhh per la tua informazione avevo commesso un' errore alla fine del codice che ho modificato con un "header" in quanto nel codice immettevo un "die" con la scritta:
[PHP]// Messaggio d'errore
die('NOME SITO - CANCELLAZIONE UTENTE CONFERMATA.<br>
Grazie per avere utilizzato i nostri servizi,<br>
sperando di riaverla prossimamente come utente<br><br>
Saremmo lieti comunque sapere, inviadoci un email, se la sua cancellazione<br>
al sito è dovuto a problemi riscontrati o<br>
insoddisfazioni<BR>
Grazie');
exit;
}
}
?> [/PHP]
Ok aspetto la tua risposta per il parse error
Grazie
-
La riga incriminata devi toglierla, tu l'hai incollata cosi, e io non ci ho fatto caso.
Per l'header non ho ben capito che hai fatto.
Prego.
-
Ho provveduto a eliminare la righa fin qua tutto ok, ma quando provo con il form di cancellazione mi dice:
[HTML]Password e/o indirizzo email non valido[/HTML]
Penso che riguarda questa parte del codice che non va:
[PHP]$query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' AND pass = '$pass' LIMIT 1");
// Controllo se la password sia giusta
if(mysql_num_rows($query) == 0)
die('Password e/o indirizzo email non valido');[/PHP]
Eppure l'utente fittizio che ho creato è stato registrato correttamente; in quanto ho esaminato il DB è vi è inserito.Per quello che riguarda la fine del codice era un errore mio, invece di rimandare l'utente ad una pagina di conferma dell' avenuta cancellazione della sua registrazione avevo inserito un'interruzione del processo con un "die". Errore madornale
Per adesso grazie, e spero che ce la faciamo a funzionare sto codice di cancellazione utente, aspetto un'ennesimo tuo parere.
-
Ah dimenticavo un piccolo particolare, ma non sarebbe più giusto che l'utente che desidera eliminare la sua registrazione immetta nel form il suo nick "user" e il suo indirizzo email "mail" che "pass" e "mail" ?
Ovviamente se consideri questa soluzione più giusta sarebbe opportuno avere il codice php e il form.
grazie
-
Solitamente viene chiesto solo email e password, inserire il nome utente mi sembra superfluo.
La password l'abbiamo inserita come hash md5, pertanto devi sostiture questo:
[php]
$query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' AND pass = '$pass' LIMIT 1");
// Controllo se la password sia giusta
if(mysql_num_rows($query) == 0)
die('Password e/o indirizzo email non valido');
[/php]
Con questo:
[php]
$pass = md5($pass);
$query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' AND pass = '$pass' LIMIT 1");
// Controllo se la password sia giusta
if(mysql_num_rows($query) == 0)
die('Password e/o indirizzo email non valido');
[/php]
-
Ok TheDarkita, risolto il problema per la cancellazione dell'utente, grazie.
Ma sto testando in locale il codice per il recupero/sostituzione della pass come da te descritto nel tuo ultimo post in merito al recupero, purtroppo l'errore è sempre:
[HTML]Notice: Undefined index: code in C:\Programmi\EasyPHP 3.0\www\recupero_password.php on line 6
Link non valido, i motivi potrebbero essere i seguenti:- Hai già modificato la tua password
- Hai seguito un link errato[/HTML]
appena apro la pagina.
Preciso che sto testando in locale.
ecco il codice che avevi inserito:
[PHP]<?php
// Includo la connessione al database
require('config.php');
// Prelevo il codice trasmesso come variabile GET, il contenuto della variabile è nella url della pagina per questo facilmente modificabile da tutti e bisogna fare opportuni controlli quando la utilizziamo
$code = $_GET['code'];
// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
if (!get_magic_quotes_gpc())
$code = addslashes($code);// Cerco se c'è un utente registrato che ha effettuato la richiesta ed è stato assegnato questo codice $query_recupero = mysql_query("SELECT utenti_recupero.r_utente,utenti.mail FROM utenti_recupero INNER JOIN utenti ON utenti.id=utenti_recupero.r_utente WHERE code = '$code' LIMIT 1") or die(mysql_error()); // La richiesta non esiste if(mysql_num_rows($query_recupero) == 0) die('Link non valido, i motivi potrebbero essere i seguenti:<br />- Hai già modificato la tua password<br />- Hai seguito un link errato');
// La richiesta esiste, elimino la richiesta e procedo a reimpostare una nuova password
else
mysql_query("DELETE FROM utenti_recupero WHERE code = '$code' LIMIT 1");// Inseriscol'id dell'utente recuperato mediante la query in un array $recupero = mysql_fetch_array($query_recupero); // Creo una password di 8 caratteri alfanumerici $randomcode = ''; for($x=1; $x<=8; $x++) $randomcode = (($x%2 == 0) ? $randomcode.rand(0,9) : $randomcode.chr(rand(97,122))); // Facciamo un ciclo da 1 a 8, per generare 8 caratteri, sfruttiamo la variabile contatore controllando se è pari o dispari. Se è pari aggiungiamo alla stringa un numero, se è dispari agiungiamo un carattere dell'alfabeto. Avremo cosi in $randomcode una stringa del tipo a1b2c3d4 // Nel database per motivi di sicurezza inseriamo le password in hash md5, quindi la convertiamo in md5 per poter effettuare l'update nel database $hashrandomcode = md5($randomcode); // Aggiorno la password nel database mysql_query("UPDATE utenti SET pass = '$hashrandomcode' WHERE id = '{$recupero['r_utente']}' LIMIT 1") or die(mysql_error()); // Inviamo l'email all'utente $message = 'Gentile Utente, Abbiamo provveduto a modificare la sua password.<br />La sua nuova password è: '.$randomcode; // Header dell'email, per mandarla in formato html $headers = "From: Security Now <Nome [email protected]>\r\n"; $headers .= "Reply-To: Nome [email protected]\r\n"; $headers .= "Return-Path: Nome [email protected]\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($recupero['mail'], 'Reset password - Area Privata', $message, $headers); die('Le abbiamo inviato un email contenente la Sua nuova password, controlli la Sua casella email!');
?> [/PHP]
-
Sostituisci questo:
[php]
$code = $_GET['code'];
[/php]In questo:
[php]
$code = ((isset($_GET['code'])) ? $_GET['code'] : '');
[/php]
-
Non funge ancora la sostituzione della password
Ho cambiato con :
[PHP]$code = ((isset($_GET['code'])) ? $_GET['code'] : '');[/PHP]
ma come prima all'apertura, solo con la scritta diversa:
[HTML]Link non valido, i motivi potrebbero essere i seguenti:- Hai già modificato la tua password
- Hai seguito un link errato[/HTML]
-
Io non capisco come fa a funzionare ad un utente si e ad uno no.
Comunque quell'errore lo dava perchè nell'url in cui sei tu la variabile GET code non veniva passata, l'url dove lo hai preso? Manualmente?
-
Mica ho capito cosa intendi per "l'url dove lo hai preso? Manualmente?"
Be se intendi l'url del sito o dell' email? allora sono fittizi e la prova in locale.
Se mi spieghi meglio, forse potrei darti più delucidazioni.
grazie.
-
L'url che visiti tu sembrerebbe sia pagina.php, e non pagina.php?code=MIOCODICE pertanto viene detto che il link non è valido.
-
Dunque come devo risolvere?