Newsgroup: it.comp.www.php
Titolo: script di ricerca con Like

salve a tutti
qualcuno di buona volonta' mi dice che errore c'e' in questo script?
i parametri di $nome sono passati precedentemente da un form che e' il
seguente:
<FORM METHOD="post" ACTION="cerca.php"><TABLE WIDTH="203" BORDER="0"
CELLSPACING="0"
CELLPADDING="0"><TR><TD VALIGN="TOP">Nome</TD><TD VALIGN="TOP">
<INPUT TYPE="text" NAME="nome"> </TD></TR><TR><TD
VALIGN="TOP">Cognome</TD><TD
VALIGN="TOP"><INPUT TYPE="text" NAME="cognome"></TD></TR><TR><TD
VALIGN="TOP">Produzione</TD><TD VALIGN="TOP"><INPUT TYPE="text"
NAME="produzione"></TD></TR><TR ALIGN="CENTER"><TD VALIGN="TOP"
COLSPAN="2"><INPUT
TYPE="submit" NAME="Submit" VALUE="Cerca"></TD></TR></TABLE></FORM>
</BODY>
*************questo e' lo script "cerca.php"
<?
$dbaddress="localhost";
$login="";
$passwordd="";
$dbname="forniture";
if(!($conn=mysql_connect($dbaddress, $login, $password)))
{
echo "Connessione al server non riuscita";
}
mysql_select_db($dbname, $conn);
$query=mysql_query ("select nome FROM PRODUTTORI WHERE NOME like '$nome %'
",$conn);
$num_row=mysql_num_rows($query);
$num_field=mysql_num_fields($query);
for ($i=0; $i < num_row; $i++)
{
  $riga=mysql_fetch_row($query);
   for($j=0; $j < $num_field; $j++)
   echo "$riga[$j]";
   echo"<br>";
}
?>
Mi da 3 warning :
 Warning: Supplied argument is not a valid MySQL result resource in
c:/easyphp/www/prova/cerca.php on line 16
Warning: Supplied argument is not a valid MySQL result resource in
c:/easyphp/www/prova/cerca.php on line 17
Warning: Supplied argument is not a valid MySQL result resource in
c:/easyphp/www/prova/cerca.php on line 19
Grazie a tutti in anticipo


Ahhh, dovrebbe essere un errore di query... prova a scrivere mysql_query("
SELECT blabla... ") or die("L'errore è nella query");
Se lo script dopo ti risponde "L'errore è nella query" sei al 100% percento
che l'errore è li...
Alex


e il vero problema non e' il wildcard mancante... l'errore consiste
nel come e' formata la stringa. prima propongo la versione corretta
(spero ;-) ! ) poi la spiego.
(tutto su una riga, io spezzo per leggibilita')
$query=mysql_query ("select nome FROM PRODUTTORI WHERE NOME
 like '" . $nome . "%'",$conn);
dopo la parola like e dopo il wildcard % seguono un apice singolo ' e
un doppio apice " nell'ordine che ho indicato (con il font che uso ora
non si distingue bene).
PERCHE': in php le stringhe possono essere delimitate sia da una
coppia di doppi apici "blabla" che da una coppia di singoli apici
'blabla' , ma se si inizia una stringa con una delle due forme, es.
doppio apice, sara' solo un doppio apice a terminarla e gli apici
singoli saranno considerati caratteri interni alla stringa.
in pratica nel tuo caso, iniziando la stringa con " la query che
risultava data in pasto a mysql e':
select nome FROM PRODUTTORI WHERE NOME like '$nome %'
ovvero php considerava $nome non come variabile a cui sostituire il
valore, ma come caratteri della stringa in quanto    '     non era,
nel caso, delimitatore di fine stringa.
essendo previsto apice singolo come delimitatore di stringhe per SQL
per una generica query 
SELECT nome FROM persone WHERE cognome LIKE 'Ro%'
risulta obbligatorio delimitare le stringhe per le query in php con
idoppi apici.
infine il punto (nel caso tu gia non lo sappia) e' l'operatore di
concatenamento di stringhe in php, il che obbliga php a sostituire
alla variabile $nome il suo valore in stringa (convertirebbe se fosse
un numero).
spero di esserti stato d'aiuto con questo poema epico,
Roberto Padovani
----------------
ICQ#125729644
----------------