- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
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?
-
A quale url accedi?
-
Ciao TheDarkita,
cosa intendi con quale url accedo ?
se parli dell'url del sito sta su altervista (visto che l'ho messo online ieri)
comunque l'errore è sempre presente.
se vuoi puoi andare a vederlo:
[HTML]bjh.altervista.org[/HTML]
il sito è a buon punto, ci sto ancora lavorando, e mi sono permesso di menzionarti nella pagina "advices" . Ovviamente è piuttosto spartano ma quasi funzionale: gli unici problemi che devo risolvere adesso sono il recupero/cambiamento della pass e la visualizzazione degli utenti con relativa cancellazione da parte dell' admin (che ho fatto con dreamweaver), ma non riesco ad accedere, si vede che dreamweaver ha dei problemi di script e collegamento al Db.
Se hai qualche scritp da presentarmi per la cancellazione da parte dell'Admin degli utenti ben venga.
Per adesso ti ringrazio per l'aiuto.
ciao
-
Ciao arkom,
Nel sito hai messo il link errato, dovevi linkare la pagina che io ho chiamato recupero.php.
-
Provvedo a cambiare, grazie.
-
Grazie TheDarkita, risolto il problema della reset della password. Ho ripreso tutto il tutorial dall'ignizio e ho visto dove stavo sbagliando.
Adesso mi guardo meglio quella della lista utenti.
Ciao, al mio prossimo problema con il php.:o
-
Ciao TheDarkita, riprendendo il discorso di qualche pagina indietro,
volevo sapere come modificare il codice per visualizzare la lista utenti qua in basso, non visualizzando la password e aggiungere vicino ad ogni user un tasto di cancellazione, nel caso come amministratore volessi cancellare un utente specifico.
[PHP]<?php
// Includo la connessione al database
require('config.php');
$query="select * from utenti order by user";
$result= mysql_query($query);
$numfields = mysql_num_fields($result);
echo "<table>\n<tr>";
for ($i=0; $i < $numfields; $i++)
{
echo '<th>'.mysql_field_name($result, $i).'</th>';
}
echo "</tr>\n";while ($row = mysql_fetch_row($result))
{
echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>\n";
}
echo "</table>\n";
?> [/PHP]
Inoltre come potrei (per motivi estetici) integrare il codice dentro una tabella tra i tags "body".
Grazie.
Ah dimenticavo ho visto che hai efettuato la registrzione al sito.
-
[php]
<?php
// Includo la connessione al database
require('config.php');
$query=mysql_query("select * from utenti order by user");echo '<table>';
while($a = mysql_fetch_array($query))
echo '<tr><td>'.$a['user'].'</td></tr>';
echo '</table>';
[/php]
Per la cancellazione puoi utlizzare la pagina di cancellazione account con qualche piccola modifica.
Si mi sono registrato, per provare il recupero password, altrimenti come vedevo cosa sbagliavi.
-
Ciao!
C'è qualche errore qui?[PHP]<?php
require('config.php');
// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
header('Location: index.php');
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area privata</title>
</head>
<body>
<a href="">Pagina privata!</a><br /> // HO MODIFICATO METTENDO IL LINK E NON MI VA PIU'
<br />
<br />
<a href="logout.php">Logout</a><br />
</body>
</html>[/PHP]Grazie!
-
Non mi sembra di vedere nessun errore, che problemi ti dà?
-
Appena clicco login mi esce
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\programmi\easyphp1-8\www\login.php:1) in c:\programmi\easyphp1-8\www\config.php on line 2
Quando invece faccio il login mi esce questo
Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\login.php:1) in c:\programmi\easyphp1-8\www\login.php on line 35
La riga 35 è questa
header('Location: privata.php');
Io non ho spostato nulla di riga te lo garantisco, appena metto a href mi viene fuori questo, appena lo tolgo non me lo fà più...
-
Ho rifatto tutto da capo dallo zip che hai lasciato, ho messo il link anche su registrato e và tutto perfettamente, anche la privata va bene, ma appena metto il link <a href="">Pagina privata!</a><br /> mi dà quell'avvertimento...
-
L'errore che hai postato, riguarda altre pagine config.php e login.php, non lo script che hai incollato tu.