- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Ho risolto....c'ho sbattuto la testa un altro paio di orette Ma cosa sono questi magicquotes? Mai sentiti..
-
Ciao eretis,
Magic_quotes_gpc è un impostazione del config di php, che permette di filtrare autamicamente gli ' ricevuti in input tramite GET, POST e COOKIE, aggiungendo un escape.
Noi nello script abbiamo controllato se il php.ini è configurato per filtrarli ,altrimenti lo facciamo noi con la funzione addslashes, ciò impedisce che si verifichino SQL injection.
-
Nooooooooo...ho reinstallato wm server tools perchè mi dava problemi....stessa versione e tutto...e stesso codice (avevo fatto il backup) perchè ora non mi partono di nuovo più le sessioni?
Mi dice Nickname o Password errati..Riposto di nuovo...
Login:
[PHP]<?php
include "config.php";
if(isset($_POST['Nickname'])) {
$nickname= trim($_POST['Nickname']);
$password= trim($_POST['Password']);$password= md5($password);
$query= mysql_query("SELECT * FROM lista_utenti WHERE Nickname = '$nickname' AND Password = '$password'");
$utente=mysql_num_rows($query);if(!$utente==1) {
die('Nickname o Password errati');
}
else {
$_SESSION['Nickname'] = $nickname;
header("Location: frames.php");
}
}
?>[/PHP]
in una privata:
[PHP]<?php
include "config.php";
If (!isset($_SESSION['Nickname'])) {
die("non risulti loggato");
exit;}
?>[/PHP]
-
Ciao eretis,
Dopo un header metti sempre un exit altrimenti oltre ad avere problemi su alcuni browser ci sono problemi legati alla sicurezza in alcuni casi.
Mettere un exit dopo un die è superfluo puoi pure toglierlo perchè il die interrompe lo script.Se il problema è il login le sessioni non centrano, fai un echo della query e controlliamo che la query sia corretta e quanti record ci restituisce.
-
Ciao TheDarkita,
ho tolto gli exit superflui e li ho messi dove servivano XD Sulle guide su internet non parlano nemmeno di exit!!
Stampando a video le righe indagate mi esce come valore 0...
[php]$query= mysql_query("SELECT * FROM lista_utenti WHERE Nickname = '$nickname' AND Password = '$password'");
$utente=mysql_num_rows($query);[/php]:?
-
Ciao eretis,
Fai un echo della query:
[php]
echo "SELECT * FROM lista_utenti WHERE Nickname = '$nickname' AND Password = '$password'";
[/php]
-
esce: Resource id #4
Ho fatto così:
[php]echo mysql_query("SELECT * FROM lista_utenti WHERE Nickname = '$nickname' AND Password = '$password'");[/php]Per visualizzarla l'ho tolta dai vari if ecc..spero di aver fatto bene
-
CIao eretis,
Devi usare il codice che ti ho detto io, lo metti subito dopo che esegue la query cosi vediamo cosa effettua.
-
Ok, scusa l'ignoranza
Ho registrato un utente con nickname: nanana, password: nanana
Se metto [PHP]echo "SELECT * FROM lista_utenti WHERE Nickname = '$nickname' AND Password = '$password'"; [/PHP]
esce:SELECT * FROM lista_utenti WHERE Nickname = 'nanana' AND Password = 'bb9ec852de3e8f7609d3676ede4444fa'Nickname o Password errati
Mentre se metto come prima
[PHP]echo $query;[/PHP]
esce sempre resource id #4
-
Ciao eretis,
A noi serviva proprio la query e quindi il select * from lista_utenti....Ora verifica che nella tabella ci siano record che hanno quei valori...
-
mmmm ecco dovè l'errore!!!!!!! La password criptata in md5...differisce da quella presente nella tabella!!!! Ma come mai? Non ho fatto un doppia criptazione o cose del genere
Forse è colpa di questa stringa nella registrazione?
[PHP]$password= md5($password); //criptazione della password[/PHP]
-
Ciao eretis,
Evidentemente hai fatto qualche errore nella registrazione dell'account.
-
Ecco qua....avevo messo nella tabella "lista_utenti" a password varchar 20...quindi la registrazione della pass si fermava a 20 caratteri, invece che 32...ke noob x:x
Grazie mille darkita, sempre disponibile
-
Figurati.
-
Ciao,
ho anch'io dei problemi con questo script e non sono molto pratico, aiuteresti anche me per favore?Comincio con la tabella, l'ho fatta così:
id int 11 auto_increment
user text
pass text
ses text
data date
citta text
mail textIl file registrazione.php che ho fatto io penso che andrebbe censurato.
Attendo il via per postarlo, intanto va bene la tabella? O invece di text devo metterci varchar?
Grazie.
-
Ciao Player1,
La tabella va bene, comunque per le date è più comodo usare il formato time.
-
Difatti è quello uno dei miei problemi che mi restituisce 0000/00/00
ora provo grazie,e per le immagini 'che poi saranno avatar' è meglio nel db o in una cartella?
-
Ciao Player1,
Nel database dovresti salvare il codice dell'immagine poi rigenrare l'immaggine da un file php.
Dal punto di vista prestazionale direi sia meglio salvare solo il percorso nel db, e salvare fisicamente il file in una cartella.
-
Ciao thedarkita,
Questa delle immagini devo studiarmela ancora, (sono agli inizi)
per data intendo la data di nascita poi per data di registrazione 'datetime', ma non essendo pratico sto cercando di risolvere una cosa alla volta ti posto il file registraz.php<?php // Includo la connessione al database require('config.php'); // Se il modulo viene inviato... if(isset($_POST['registra'])) { // 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 '' $ses =(isset($_POST['ses'])) ? trim($_POST['ses']) : ''; $data =(isset($_POST['data'])); $citta =(isset($_POST['citta'])) ? trim($_POST['citta']) : ''; $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); $ses = addslashes($ses); $citta = addslashes($citta); $mail = addslashes($mail); } // Controllo il Nome Utente if(strlen($user) < 4 || strlen($user) > 12) die('Nome Utente troppo corto, o troppo lungo'); // Controllo la Password elseif(strlen($pass) < 4 || strlen($pass) > 12) die('Password troppo corta, o troppo lunga'); elseif(strlen($ses) < 0 || strlen($ses) > 7); elseif(strlen($citta) < 2 || strlen($citta) > 12); // Controllo l'email elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail)) die('Email non valida'); // Controllo il nome utente non sia già occupato elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) die('Nome Utente non disponibile'); // Controllo l'indirizzo email non sia già registrato elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) die('Questo indirizzo email risulta già registrato ad un altro utente'); // Registrazione dell'utente nel database else { // Crypt della password per garantire una miglior sicurezza $pass = md5($pass); // Query per l'inserimento dell'utente nel database $strSQL = "INSERT INTO utenti (user,pass,ses,data,citta,mail)"; $strSQL .= "VALUES('$user', '$pass', '$ses', '$data', '$citta', '$mail')"; mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error()); // Reindirizzo l'utente ad una pagina di conferma della registrazione header('Location: home.php'); exit; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "hxxxxxxxx.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="htxxxxxxxxw.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Registrazione</title> </head> <body> <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 /> Sesso: M<input name="ses" type="radio" id="ses" value="maschio"> F<input name="ses" type="radio" id="ses" value="femmina"> <br> Data di nascita:<br> <select name="giorno"> <?php for($i=1;$i<32;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select> <select name="mese"> <?php for($i=1;$i<13;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select> <select name="anno"> <?php for($i=1920;$i<2010;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select><br> <input name="citta" type="text" id="citta" value="Citta" onfocus="if(this.value=='citta') this.value='';" /><br /> <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br /> <input name="registra" type="submit" value="Registrati" /><br /> </form> </body> </html>
Mi sa che devo fargli qualcosa qui per la data(che mi restituisce tutti zeri), ma sono fermo qui non riesco ad andare avanti.
-
Ciao Player1,
Allora trasforma il campo della tabella in tipo INT.
Dopo di che puoi usare la funzione mktime per generarti la data in formato time.
In ogni caso non viene inviato data ma viene inviato giorno, mese ed anno perciò devi prendere dalle variabile POST quei 3 valori.