- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Hai messo:
[php]$nome != $nome[/php]
Un tantinello impossibile che si verifichi....
-
Salve, vorrei utilizzare questo script per proteggere una pagina, dove sono contenuti in una tabella dei dati un po delicati, secondo voi questo metodo va bene ed e sicuro oppure dovrei adottare altro?
-
Ciao Bivio,
il metodo è sicuro.
-
Ciao TheDarkita, sono sempre io... è da giorni (forse settimane) che provo e riprovo, ma non riesco proprio... ti chiedo l'ultima cortesia... mi spieghi esattamente il significato del codice che ho scritto (ammesso che ne abbia uno) se riesco a capire davvero cosa vuol dire allora FORSE riuscirò anche a riscriverne uno funzionante... Non vorrei che me ne scrivessi uno tu, perché non sarebbe corretto... Grazie mille.
[PHP]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['Modifica']))
{// Dati Inviati dal modulo $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : ''; // Metto nella variabile 'name' il dato inviato dal modulo, se non viene inviato dò di default '' $cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : ''; // Metto nella variabile 'surname' il dato inviato dal modulo, se non viene inviato dò di default '' $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'username' il dato inviato dal modulo, se non viene inviato dò di default '' $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'password' 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()) { $nome = addslashes($nome); $cognome = addslashes($cognome); $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail);
}
if($nomeattuale != $nome && $nome != '') $setquery = ((isset($setquery)) ? $setquery.",nome = '$nome'" : "nomeattuale = '$nome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($cognomeattuale != $cognome && $cognome != '') $setquery = ((isset($setquery)) ? $setquery.",cognome = '$cognome'" : "cognomeattuale = '$cognome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($userattuale != $user && $user != '') $setquery = ((isset($setquery)) ? $setquery.",user = '$user'" : "userattuale = '$user'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($passattuale != $password) $setquery = ((isset($setquery)) ? $setquery.",pass = '$pass'" : "passattuake = '$pass'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($confermaattuale != $password) $setquery = ((isset($setquery)) ? $setquery.",pass = '$pass'" : "passattuake = '$pass'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($mailattuale != $mail) $setquery = ((isset($setquery)) ? $setquery.",mail = '$mail'" : "mailattuale = '$mail'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) // Crypt delle password per garantire una miglior sicurezza $pass = md5($pass);
if(isset($setquery))
$strSQL = "UPDATE utenti (nome,cognome,user,pass,conferma,mail)";
$strSQL .= "VALUES('$nome', '$cognome', '$user', '$pass', '$conferma', '$mail')";
mysql_query($strSQL);
}
?>[/PHP]
-
La variabile $nomeattuale non ha nessun valore per cui un confronto è inutile.
L'hash della password andrebbe fatto prima di generare la query.
La sintassi della query di update è errata.
Sarebbe meglio studiare prima un pò di teoria, altrimenti non potrai mai realizzare niente...
-
Ciao Thedarkita... mi scuso per il post precedente, mi sono lasciato travolgere dalla fretta di finire tutto ed ho postato il codice sbagliato. Questo è il codice che volevo postarti. In realtà è già stato di nuovo modificato (c'era un errore stupidissimo) ed ora funziona correttamente, ed è anche leggermente modificato rispetto a quelli precedentemente postati. Le caratteristiche sono: la possibilità di modificare il profilo (tutti i campi tranne la password) e la richiesta PER CONFERMA della password. Viene poi inviata in automatico una mail con i nuovi dati aggiornati, e qui subentra il problema, forse per mia mancanza teorica, ma non so come scrivere il codice per far comparire nella mail i nuovi campi nome, congnome ecc... non ho trovato nulla di utile nelle mie guide, quindi mi rivolgo a te. Posto il codice intero così anche altri utenti potranno sfruttare questa pagina.
MODIFICA.php
[PHP]<?php
// Includo la connessione al database
require('config.php');// Definisco le variabili
$nomettuale = $_SESSION ['nome'];
$cognomeattuale = $_SESSION ['cognome'];
$userattuale = $_SESSION ['user'];
$passattuale = $_SESSION ['pass'];
$confermaattuale = $_SESSION ['conferma'];
$mailattuale = $_SESSION ['mail'];// Se il modulo viene inviato...
if(isset($_POST['Modifica']))
{
// Dati Inviati dal modulo
$nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : 'nomeattuale'; // Metto nella variabile 'nome' il dato inviato dal modulo, se non viene inviato dò di default 'nomeattuale'
$cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : 'cognomeattuale'; // Metto nella variabile 'cognome' il dato inviato dal modulo, se non viene inviato dò di default 'cognomeattuale'
$user = (isset($_POST['user'])) ? trim($_POST['user']) : 'userattuale'; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default 'userattuale'
$pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : 'passattuale'; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default 'passattuale'
$conferma = (isset($_POST['conferma'])) ? trim($_POST['conferma']) : 'confermaattuale'; // Metto nella variabile 'conferma' il dato inviato dal modulo, se non viene inviato dò di default 'confermaattuale'
$mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : 'mailattuale'; // Metto nella variabile 'mail' il dato inviato dal modulo, se non viene inviato dò di default 'mailattuale'// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $nome = addslashes($nome); $cognome = addslashes($cognome); $user = addslashes($user); $pass = addslashes($pass); $mail = addslashes($mail); } $pass = md5($pass); $query = mysql_query("SELECT id FROM utenti WHERE pass = '$pass' LIMIT 1"); // Controllo se la password è giusta if(mysql_num_rows($query) == 0) die('Password non valida'); else { if($nome != $nomeattuale && $nome != '') $setquery = ((isset($setquery)) ? $setquery.",nome = '$nome'" : "nome = '$nome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($cognome != $cognomeattuale && $cognome != '') $setquery = ((isset($setquery)) ? $setquery.",cognome = '$cognome'" : "cognome = '$cognome'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($user != $userattuale && $user != '') $setquery = ((isset($setquery)) ? $setquery.",user = '$user'" : "user = '$user'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if($mail != $mailattuale) $setquery = ((isset($setquery)) ? $setquery.",mail = '$mail'" : "mail = '$mail'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE) if(isset($setquery)) mysql_query("UPDATE utenti SET $setquery WHERE id = {$_SESSION['login']}"); // Inviamo l'email di conferma all'utente $message = 'Il tuo profilo è stato modificato con successo, i tuoi dati aggiornati sono: <br /><br />Nome: .$nomeattuale<br />Cognome: .$cognomeattuale<br />Username: .$userattuale<br />Indirizzo email: .$mailattuale.<br /><br />Torna a visitare il tuo profilo al seguente link:<a href="[...]Profilo.php">Profilo Utente</a>, ma ricordati che devi loggarti nuovamente per vedere la pagina aggiornata!'; // Header dell'email, per mandarla in formato html $headers = "From: Semplicemente Poesia <semplicementepoesia.it>\r\n"; $headers .= "Reply-To: [email protected]\r\n"; $headers .= "Return-Path: [email protected]\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, 'Semplicemente Poesia - Modifica Profilo', $message, $headers); die('Ti è appena stata inviata una email contenente i nuovi dati inseriti, controlla subito la posta elettronica e verifica la correttezza dei dati!<br /> Effettua il <a href="Logout.php">Logout</a>');
}
}
?>[/PHP]FORM di modifica
[HTML]<form class="loginContent" action="" method="post">
Nome<br />
<input class="field" name="nome" type="text" id="nome" size="35" value="<?php echo $_SESSION["nome"];?>" onfocus="if(this.value=='nome') this.value='nome';" /><br />
<br />
Cognome<br />
<input class="field" name="cognome" type="text" id="cognome" size="35" value="<?php echo $_SESSION["cognome"];?>" onfocus="if(this.value=='cognome') this.value='cognome';" /><br />
<br />
Username<br />
<input class="field" name="user" type="text" id="user" size="35" value="<?php echo $_SESSION["user"];?>" onfocus="if(this.value=='user') this.value='user';" /><br />
<br />
Indirizzo email<br />
<input class="field" name="mail" type="text" id="mail" size="35" value="<?php echo $_SESSION["mail"];?>" onfocus="if(this.value=='mail') this.value='mail';" /><br />
<br />
Inserisci la Password prima di confermare le modifiche<br />
<input class="field" name="pass" type="password" id="pass" size="35" value="" onfocus="if(this.value=='pass') this.value='pass';" /><br />
<br />
<input class="Modifica" name="Modifica" id="Modifica" type="submit" value="" /><br />
<br />
</form>[/HTML]
-
Ciao TheDarkita, sembre in gamba!
Volevo una delucidazione in merito ad un form che riguarda la cancellazione degli utenti da parte dell'amministratore del sito;
ossia: ho una tabella che visualizza gli utenti del sito e vorrei eliminare degli utenti che si sono registrati clicando su "elimina".
Ho già fatto un form ma questo non procede all'eliminazione dell'utente.
ecco il codice:[php]<style type="text/css">
<!--
.Stile1 {
color: #FF0000;
font-weight: bold;
font-size: 24px;
}
-->
</style>
<div align="center" class="Stile1">Cancellazione Utenti</div>
<?php
// Includo la connessione al database
require('config.php');
if($_POST)
{
$ids = isset($_POST['id']) ? $_POST['id'] : array();
elimina_record($ids);
}
elseif(isset($_GET['id']))
{
elimina_record(array($_GET['id']));
}
else
mostra_lista();
function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
// preparo la query
$query = "SELECT user FROM utenti";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
echo '
<form name="form1" method="post" action="">
<table border="1">
<tr>
<th> </th>
<th>Nome</th>
<th> </th>
</tr>';
while ($row = mysql_fetch_assoc($result))
{
$nome = htmlentities($row['user']);
// preparo il link per la modifica dei dati del record
$link = $_SERVER['PHP_SELF'].'?id=' . $row['id'];
echo "<tr>
<td><input name="id[]" type="checkbox" value="$row[id]" /></td>
<td>$nome</td>
<td><a href="$link">elimina</a></td>
</tr>";
}
echo '</table>
<br />
<input type="submit" name="Submit" value="Elimina record selezionati" />
</form>';
// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);
// chiudo la connessione a MySQL
mysql_close();
}
function elimina_record($ids)
{
// verifico che almeno un id sia stato selezionato
if(count($ids) < 1)
{
$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;
}
// per precauzione converto gli ID in interi
$ids = array_map('intval',$ids);
// creo una lista di ID per la query
$ids = implode(',',$ids);
// preparo la query
$query = "DELETE FROM utenti WHERE id IN ($ids)";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
// conto il numero di record cancellati
$num_record = mysql_affected_rows();
// chiudo la connessione a MySQL
mysql_close();
$messaggio = urlencode("Numero record cancellati: $num_record");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}
?>[/php]Ogni qualvolta clicco su "elimina" il responso è "
Numero record cancellati: 0
Il Db comprende user mail pass e accetta (accettazione dell'informativa di registrazione al sito spuntando una casella)
Se hai un'altra soluzione ben venga.
Grazie anticipato.
Ciao
-
Ciao arkom,
fai un echo della query.
-
Ciao TheDarkita,
come dovrei fare un "echo" sulla query?Di "echo" ne ho una sfilza
Se mi potresti fare la correzione te ne sarei molto grato
Grazie.
-
Da:
[php]$query = "DELETE FROM utenti WHERE id IN ($ids)";[/php]
A:
[php]
$query = "DELETE FROM utenti WHERE id IN ($ids)";
echo $query;
[/php]
-
Ciao TheDarkita,
purtroppo la "echo" inserita nella query non cambia niente[PHP]// preparo la query
$query = "DELETE FROM utenti WHERE id IN ($ids)";
echo $query; [/PHP]Non è che hai un' altra soluzione che mi visualizza i tre campi:
id, user e mail e che mi permetta di cancellare un'utente?Grazie
-
L'echo deve restituirti in output una stringa con la query eseguita dovresti incollarla qua per vedere se la query generata è corretta.
-
Ciao Thedarkita,
ti rispedisco il codice modificato come mi ai consigliato[PHP]<?php
// Includo la connessione al database
require('config.php');
if($_POST)
{
$ids = isset($_POST['id']) ? $_POST['id'] : array();
elimina_record($ids);
}
elseif(isset($_GET['id']))
{
elimina_record(array($_GET['id']));
}
else
mostra_lista();
function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
// preparo la query
$query = "SELECT user FROM utenti";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
echo '
<form name="form1" method="post" action="">
<table border="1">
<tr>
<th> </th>
<th>Nome</th>
<th> </th>
</tr>';
while ($row = mysql_fetch_assoc($result))
{
$nome = htmlentities($row['user']);
// preparo il link per la modifica dei dati del record
$link = $_SERVER['PHP_SELF'].'?id=' . $row['id'];
echo "<tr>
<td><input name="id[]" type="checkbox" value="$row[id]" /></td>
<td>$nome</td>
<td><a href="$link">elimina</a></td>
</tr>";
}
echo '</table>
<br />
<input type="submit" name="Submit" value="Elimina record selezionati" />
</form>';
// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);
// chiudo la connessione a MySQL
mysql_close();
}
function elimina_record($ids)
{
// verifico che almeno un id sia stato selezionato
if(count($ids) < 1)
{
$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;
}
// per precauzione converto gli ID in interi
$ids = array_map('intval',$ids);
// creo una lista di ID per la query
$ids = implode(',',$ids);
// preparo la query
$query = "DELETE FROM utenti WHERE id IN ($ids)";
echo $query;
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
// conto il numero di record cancellati
$num_record = mysql_affected_rows();
// chiudo la connessione a MySQL
mysql_close();
$messaggio = urlencode("Numero record cancellati: $num_record");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}
?>[/PHP]Ahimè non so dove mettere le mani adesso!
Un "Hekp" e doveroso.
Grazie
-
Scusami Thedarkita, sto scrivendo un'italiano da sc...fo
"hai" e "Help"
-
Commenta la funzione header in modo da eliminare il redirect ed incolla qua l'output restituito dallo script da te postato.
-
Penso che tu ti riferisca a una di queste stringhe:
[php]$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;[/php]e
[php]$messaggio = urlencode("Numero record cancellati: $num_record");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);[/php]Nella prima stringa sembra non che ci sono stati messaggi di output,
invece nella seconda al momento di cliccare su "elimina" dalla funzione:
[php]<td><input name="id[]" type="checkbox" value="$row[id]" /></td>
<td>$nome</td>
<td><a href="$link">elimina</a></td>[/php]e anche da:
[php]<input type="submit" name="Submit" value="Elimina record selezionati" />
[/php]del form, la risposta è uguale:
Numero record cancellati: 0
Purtroppo navigo nel buio.
-
Ciao TheDarkita,
forse sei molto impegnato.
Stavo aspettando una tua soluzione per la cancellazione degli utenti da parte dell' Admin.Grazie.
-
Ciao TheDarkita,
posto per tutti gli utenti, la risoluzione per la cancellazione degli utenti registrati da parte dell' amministratore. Funzionante al 100%
[PHP]<?php
// Includo la connessione al database
require('config.php');
if($_POST)
{
$ids = isset($_POST['id']) ? $_POST['id'] : array();
elimina_record($ids);
}
elseif(isset($_GET['id']))
{
elimina_record(array($_GET['id']));
}
else
mostra_lista();
function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
// preparo la query
$query = "SELECT id,user FROM utenti";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
echo '
<form name="form1" method="post" action="">
<table border="1">
<tr>
<th> </th>
<th>Nome Utente</th>
<th> </th>
</tr>';
while ($row = mysql_fetch_assoc($result))
{
$nome = htmlentities($row['user']);
// preparo il link per la modifica dei dati del record
$link = $_SERVER['PHP_SELF'].'?id=' . $row['id'];
echo "<tr>
<td><input name="id[]" type="checkbox" value="$row[id]" /></td>
<td>$nome</td>
<td><a href="$link">elimina</a></td>
</tr>";
}
echo '</table>
<br />
<input type="submit" name="Submit" value="Elimina record selezionati" />
</form>';
// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);
// chiudo la connessione a MySQL
mysql_close();
}
function elimina_record($ids)
{
// verifico che almeno un id sia stato selezionato
if(count($ids) < 1)
{
$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;
}
// per precauzione converto gli ID in interi
$ids = array_map('intval',$ids);
// creo una lista di ID per la query
$ids = implode(',',$ids);
// preparo la query
$query = "DELETE FROM utenti WHERE id IN ($ids)";
// invio la query
$result = mysql_query($query);
// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
// conto il numero di record cancellati
$num_record = mysql_affected_rows();
// chiudo la connessione a MySQL
mysql_close();
$messaggio = urlencode("Numero record cancellati: $num_record");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}
?>
[/PHP]Spero che a qualcuno servirà.
Ciao.
-
Ciao TheDarkita, sono nuovo da queste parti e ti faccio i miei complimenti perché, anche se non ho mai scritto una riga di php, grazie a questo tutorial sto piano piano mettendo un'area riservata nel mio sito. Tuttavia ho dei problemi. Seguendo le indicazioni fra pag 9 e 10 sto cercando di inserire la funzione che consente di resettare la password. ricevo correttamente l'email con l'indirizzo ma quando clicco sul link ricevo sempre il messaggio di errore, Link non valido, i motivi potrebbero essere i seguenti: Hai già; modificato la tua password oppure hai seguito un link errato. Eppure anche il link dall'email mi sembra corretto. Spero che tu mi possa aiutare. Grazie in anticipo.
-
Scusa, come non detto mi erano sfuggite le ultime modifiche che avevi inserito all'utente che aveva già posto la stessa domanda. Grazie, funziona