Newsgroup: it.comp.www.php
Titolo: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Non capisco cosa ci sia di sbagliato in questo. Mi esce il suddetto 
errore alla linea $row3 = mysql_fetch_assoc($result3);
<?php
if ($HTTP_GET_VARS['categoria'] != "")
{
$query3 = "SELECT * FROM guide WHERE 
categoria=".$HTTP_GET_VARS['categoria'];
$result3 = mysql_query($query3, $db);
$row3 = mysql_fetch_assoc($result3);
}
else {
if ($HTTP_GET_VARS['id'] == "")
{
$query = "SELECT * FROM guide ORDER BY id DESC LIMIT 0 , 5";
$result = mysql_query($query, $db);
$row = mysql_fetch_assoc($result);
}
else {
$query2 = "SELECT * FROM guide WHERE id=".$HTTP_GET_VARS['id'];
$result2 = mysql_query($query2, $db);
$row2 = mysql_fetch_assoc($result2);
}}
?>
-- 
Come è la tua email? www... e poi?
(la mia ragazza)

*Raziel* ha scritto:


-- 
-ciao       Raziel       #ICQ 314405452
[HT] Real Quilian (851574) - Italia - VII.481
http://razielweb.altervista.org

 $row3 = mysql_fetch_assoc($result3);
Significa che $result3 non è un resource valido (vedi cosa può
restituire la funzione mysql_query() 
http://it2.php.net/mysql_query
). Questo perché la query SELECT * FROM guide WHERE non è
sintatticamente corretta. Inoltre la stessa riga 
 $query3 = "SELECT * FROM guide WHERE 
non è terminata correttamente: mancano le virgolette per chiudere la
stringa e il punto e virgola finale.
Correggi la query e poi usa qualcosa del genere:
 ...
 $result3 = mysql_query($query3, $db);
 if ($result3 !== false) {
   $row3 = mysql_fetch_assoc($result3);
   // ...
   // ...
 } else {
   echo mysql_error();
 }
Ciao.
-- 
Federico

  }
grazie a questo mi sono accorto che mancavano gli apici alla query:
$query3 = "SELECT * FROM guide WHERE 
categoria=".$HTTP_GET_VARS['categoria'];
e quando cliccavo su /guide.php?categoria=linux mi diceva: Unknown 
column 'linux' in 'where clause'
corretta così funziona:
$query3 = "SELECT * FROM guide WHERE 
categoria='".$HTTP_GET_VARS['categoria']."'";
grazie mille


 column 'linux' in 'where clause'
In realtą avevo preso fischi per fiaschi. Non mi ero accorto che la
riga 
 categoria=".$HTTP_GET_VARS['categoria'];
fosse, in realtą, la continuazione di quella precedente non notando
l'assenza del $ davanti a categoria. Per questo, quando ho scritto
che la query era errata, ho fatto riferimento alle virgolette e al
punto e virgola...
Se puoi, non usare il vecchio $HTTP_GET_VARS, ma $_GET. Vedi
http://it2.php.net/manual/it/language.variables.predefined.php
.
Inoltre assicurati che la stringa passata attraverso il parametro
categoria superi tutti i controlli del caso prima di utilizzarla
nella query.
Ciao.
-- 
Federico

 nella query.
scusami, ma cosa intendi? nonostante non restituisca errori potrebbe 
esserci qualcosa di sbagliato?
p.s. come avrai notato sono appena agli inizi :) sto mettendo su il mio 
primo sito partendo da zero nel mio serverino casalingo con debian 
etch. Se hai voglia/tempo, dai un'occhiata al sito?


 esserci qualcosa di sbagliato?
Quando si accettano in uno script variabili passate dal client, bisogna 
sempre assicurarsi che corrispondano a quello che ci si aspetta.
Ad esempio nel tuo caso e' possibile che "categoria" debba essere un 
numero intero, e in questo caso puoi trasformare in intero qualsiasi 
valore passato via GET, oppure se e' un testo va trattato in un certo 
modo per assicurarsi che non venga passata una stringa potenzialmente 
dannosa. Se vai su 
html.it
 trovi un buon tutorial su php e sicurezza.
Ciao

 esserci qualcosa di sbagliato?
Ogni parametro che può essere scelto o modificato dall'utente prima di
essere usato *deve* essere sempre controllato per accertarsi che non
sia diverso da quanto aspettato.
Nel tuo caso, prima di usare il parametro `categoria`, devi verificare
che esista e se esiste che contenga quello che ti aspetti (se ti
aspetti un numero intero devi verificare che contenga un nuemro
intero, se ti aspetti una stringa devi verificare che sia una tra la
possibili stringhe accettabili, oppure che non contenga caratteri
proibiti, eccetera...).
Vedi 
http://www.php.net/manual/en/security.php
 (nel tuo caso specifico
Database Security -> SQL Injection).
-- 
Federico

 specifico Database Security -> SQL Injection).
ok, mi stavo già documentando sulle sql injection qui: 
http://php.html.it/guide/leggi/121/guida-sicurezza-di-php/
(penso che sia quello che mi ha inidcato lucamax)
-- 
masterizzami tutto qui!
(la mia ragazza porgendomi un floppy)