Newsgroup: it.comp.www.php
Titolo: Problema controllo dati da MySQL

Ciao a tutti,
ho un problema nel controllo di alcuni dati da un database MySQL.
Uso il database per gestire le autenticazioni, controllando se esiste un
record corrispondente alla coppia user/pass inserita dall'utente attraverso
la finestra di autenticazione HTTP/401. Faccio una cosa del genere:
  mysql_connect('localhost', 'user', 'pass')
   or die('Unable to connect to DB server.');
  mysql_select_db('auth')
   or die ('Unable to select database.');
  $sql = "SELECT * FROM users WHERE
   username = '$_SERVER['PHP_AUTH_USER']' AND
   password = '$_SERVER['PHP_AUTH_PW']'";
  $result = mysql_query($sql)
   or die ('Unable to execute query.');
  $num = mysql_numrows($result);
  if ($num != 1)
   return false;
  return true;
Non viene dato alcun errore dal db: mi collego ed eseguo la query (tutti
esatti i parametri), ma $num rimane a 0, nonostante immetta user e pass
corretti. Ho compilato io stesso il db, e ho anche provato a stampare a
schermo i valori di $_SERVER['PHP_AUTH_USER'] e $_SERVER['PHP_AUTH_PW'], che
coincidono perfettamente con username e password nel db.
Ho l'impressione che ci sia qualche particolare che mi sfugge, ma al momento
non riesco proprio a capire quale (e la query mi sembra vada bene, spero che
il problema non sia quello)... ho gia' fatto query su MySQL, e non ho mai
avuto problemi di questo tipo.
Ah, sono su Win2k con Explorer 5.
Qualcuno mi sa dire qualcosa?
Grazie e ciao,
Ritz

Ciao,
prova a stampare $sql dopo che l'hai definita.
Capirai perchè non ottieni alcun record.


 Capirai perchè non ottieni alcun record.
Grazie, avevo risolto con una cosa del tipo
  $user = $_SERVER['PHP_AUTH_USER'];
  $pass = $_SERVER['PHP_AUTH_PW'];
prima del codice che ho pastato nel msg precedente, e stampando $sql ho
capito effettivamente che la query "non era corretta".
Continuo pero' a non capire il perche' con $user e $pass funzia, mentre con
le altre due no... e perche' la query e' esatta solo nel primo caso.
Ritz

Perchè quando usi le virgolette doppie l'interprete cerca di valutare
immediatamente le le varibili $qualcosa. Se queste variabili non sono di
tipo semplice(numeri o stringhe) avrai devi problemi.
Ad esempio se scrivi:
$giorni=new Array('lun','mar','mer' ...);
echo "Il primo giorno della settimana è $giorni[0]";
...
Otterrai :
Il primo giorno della settimana è Array[0]
Se non mi sono spiegato bene richiedi pure 
Ciao


 Se non mi sono spiegato bene richiedi pure
Ah, ho capito... con le virgolette doppie vengono interpretati solo numeri o
stringhe, e non tipi piu' "complicati" (come gli array).
Ecco perche' ha funzionato copiando il valore dall'array a una variabile.
Continuo pero' a non capire una cosa: perche'? Cioe', c'e' un motivo preciso
per cui php funziona cosi'?
Grazie ancora
Ritz

Sì, poichè nelle virgolette doppie dovrebbero esserci stringhe, per inserire
parentesi quadre che non fanno parte della sintassi degli array dovresti
usare dei caratteri di escape, così pure con la notazione "->" degli
oggetti e forse in altri casi...
In ogni caso compreso come funziona la faccenda non avrai più problemi.
Ciao


 In ogni caso compreso come funziona la faccenda non avrai piů problemi.
Chiarissimo =).
Grazie e ciao,
Ritz