Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in

megarospo

Utente Attivo
25 Set 2007
147
0
0
Questo script dovrebbe spedire delle emai in automatico con l'ausilio di Phpmailer. Ricevo invece un warning e i messaggi di posta non vengono spediti. La query è corretta infatti riesco a stampare i dati a video. Da cosa può dipendere? Grazie.

<?php


MYSQL_CONNECT('localhost', 'PASS', 'ADMIN');
mysql_select_db("db");

$query1=mysql_query("SELECT clienti.email, clienti.nome, clienti.cognome, prodotti.nome, prodotti.stato
FROM clienti, prodotti
WHERE prodotti.stato='intermedio'");

$result=mysql_query($query1);
if (mysql_num_rows($result)>0) // QUESTA E' LA RIGA INCRIMINATA MA ANCHE QUELLA SOTTO TALVOLTA MI DA LO STESSO WARNING
{
while ($email_arr=mysql_fetch_array($result))
{
$to=$email_arr[0];

//istanziamo la classe e definiamo le intestazioni e il corpo del messaggio
$messaggio = new PHPmailer();
$messaggio->IsSMTP();
$messaggio->Host='mail.posta.it';//questo host è di esempio
$messaggio->From='posta@posta.it';
$messaggio->AddAddress($to);
$messaggio->AddReplyTo('posta@posta.it');
$messaggio->Subject='scadenza data';
$messaggio->Body=stripslashes('Al termine della data.........');
{
//definiamo i comportamenti in caso di invio corretto
//o di errore
if(!$messaggio->Send()){
echo $messaggio->ErrorInfo;
}else{
echo 'Email inviata correttamente!';
}}

//chiudiamo la connessione
$messaggio->SmtpClose();
unset($messaggio);
}}
?>

Grazie!!
 
mysql_num_rows() ti dà errore perchè il risultato della query non è valido (diciamo che non può essere contato); per questo motivo hai un errore anche da mysql_fetch_array perchè lavora su una array non valido.

Probabile che l'errore stia nella query inziale, prova a mettere un mysql_error() davanti:

PHP:
$query1=mysql_query("SELECT clienti.email, clienti.nome, clienti.cognome, prodotti.nome, prodotti.stato
FROM clienti, prodotti
WHERE prodotti.stato='intermedio'") or die (mysql_error());

e vedi cosa ti restituisce
 
acch!! ho provato il tuo consiglio ma non ho riscontrato cambiamenti. ma da lo stesso warming. come è possibile???
Secondo te perchè le righe non sono contabili? Per "FORM clienti, prodotti", o per cosa?
Ho fatto una prova modificando la query e facendo la SELECT solo su una tabella ma ho ottenuto lo stesso risultato. Che ne pensi?
Ciao e grazie :)
 
Hai notato che usi mysql_query 2 volte?:
PHP:
$query1=mysql_query("SELECT clienti.email, clienti.nome, clienti.cognome, prodotti.nome, prodotti.stato
FROM clienti, prodotti
WHERE prodotti.stato='intermedio'");

$result=mysql_query($query1); ///QUESTO E' SBAGLIATO

quindi diventa:
PHP:
if (mysql_num_rows($query1)>0) 
....

e

PHP:
while ($email_arr=mysql_fetch_array($query1))
....
 
doppio invio di e-mail

Sei veramente un mostro!! :) Hai trovato l'intoppo!!!
ora spedisce le e-mail solo che continua a spedirne il doppio! Sul databese sono 2, ma vengono spedite 4 e.mail. hai idea da cosa possa dipendere??
Grazie per i suggerimenti.
 
invece di inviare le mail, stampati i risultati della query e vedi se le voci vengono stampate doppie
 
alla fine, a forza di riscrivere , provare e riprovare ora funzione tutto come vorrei.
Grazie per il tuo prezioso aiuto!!:fonzie:
 

Discussioni simili