Newsgroup: it.comp.www.php
Titolo: Dati da mySQL con variabile

Ciao a tutti,
la domanda per chi conosce la materia e' sicuramente banalissima, ma io ho
appena iniziato a pasticciare con PHP.
Attualmente ho questo frammento di codice:
$sql = 'SELECT `phpbb_users`.`user_password` FROM phpbb_users WHERE (
`phpbb_users`.`username` LIKE \'Tizio\' )';
$result = mysql_query($sql);
$row = mysql_fetch_object($result);
$pw = $row->user_password;
Prima domanda: cosi' funziona, ma mi sembra strano che ci vogliano cosi'
tanti comandi per ottenere la variabile che voglio. C'e' un metodo piu'
efficiente?
Seconda domanda: questo e' per un test, in realta' ho bisogno che venga
cercata non la password di Tizio, ma la password dell'utente specificato
nella variabile $uname
Come si fa? Una semplice sotituzione non ha portato al risultato cercato.
Vista la banalita' della domanda va bene anche che mi rispondiate con
RTFM, basta che mi indichiate dove trovare il *fine* manual, visto che
php.net
 e' sicuramente completissimo, ma non e' per niente
principiante-friendly...
Ciao Boiler
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


scaricati il chm (e leggiti le funzioni php che ci sono)
e' molto piu facile
ti dico gli argomenti
class
predefined variable
variable scope
is_????????


 
No, i comandi sopra riportati sono: definizione della query, esecuzione 
della medesima e fetch del risultato. Su questi non puoi risparmiare!
Se vuoi, puoi convertire 3 righe in un unica riga ma dalla triplice 
lunghezza (sconsigliato)
Buona norma è l'aggiunta della visualizzazione di info nel caso di sql 
sintatticamente errata:
$res = mysql_query($sql) or die("Errore nella query" . mysql_error());
	Francesco

 e' molto piu facile
Questo?
http://ch2.php.net/download-docs.php
Grazie mille


 Quale è la query sintatticamente corretta che fa cio'?
Learning by doing ;-)
Ci sono riuscito:
$sql = "SELECT * FROM " . phpbb_users . " WHERE username = '$uname'";
Saluti e grazie


 Saluti e grazie
Apporta un'ulteriore modifica: se uname arriva via GET, usa 
$_GET['uname'] altrimenti $_POST['uname'] e aggiungi anche il relativo 
comando per escapare eventuali apici e cose del genere
$sql = "Select * from phpbb_users . " WHERE username = '" . 
mysql_real_escape_string($_GET['uname']) . "';";
	Francesco

Francesco F ha scritto:


D'accordo, mi spieghi perň anche quali vantaggi porta? ("escapare gli
apici" non so cosa voglia dire)
Grazie e ciao


 
Se uname contiene "D'angelo" la stringa sql finale č:
Select * from ...where username='D'angelo''; quindi hai un errore 
sintattico. Escapare significa aggiungere \ davanti agli apici, per 
trattarli come carattere normale e non come apice, vedi 
http://se.php.net/addslashes
Ti ho suggerito mysql_real_escape_string in quanto ogni dbms (database) 
ha i propri caratteri "particolari" e tale funzione provvede a 
"neutralizzare" tali caratteri, presenti nel campo di testo.
Un ultima cosa, occhio all'sql injection, pertanto provvedi alla 
verifica preventiva prima di eseguire la query (se ti aspetti un numero 
intero, verifica che il valore che hai in get/post sia un numero 
intero). Fortunatamente mysql non esegue piů istruzioni sql in una 
query[1] (normalmente separate da ;) e racchiudendo tra apici anche i 
valori numerici [2]ti salvi abbastanza da eventuali sql-inj
	Francesco
[1] $sql="Select * from tb; delete from tb";
La seconda istruzione, *fortunatamente* non viene eseguita
[2] $sql = "Select * from tb where id='123'";

 Francesco