problema query

symon83

Nuovo Utente
29 Set 2009
5
0
0
Ciao a tutti, ho fatto un piccolo form da dove posso inviare delle mail agli iscritti alla newsletter.
Gli iscritti posso iscriversi alla newsletter con differenti categorie, ad esempio uno si può ricevere newletter come utente, piuttosto che solo di ristoranti ecc.

Al momento dell'invio ho messo dei check box ognuno corrispondente ad una categoria in modo che possso scegliere a chi è indirizzata la mia mail.
Il problem si presenta quando voglio mandarla a più di una categoria. ho impostato la query così:

PHP:
$cat1='';if (isset($_POST['utente'])){$cat1=$_POST['utente'];}
$cat2='';if (isset($_POST['azienda'])){$cat2=$_POST['azienda'];}
$cat3='';if (isset($_POST['enoteca'])){$cat3=$_POST['enoteca'];}
$cat4='';if (isset($_POST['ristorante'])){$cat4=$_POST['ristorante'];}
$cat5='';if (isset($_POST['winebar'])){$cat5=$_POST['winebar'];}
$cat6='';if (isset($_POST['prova'])){$cat6=$_POST['prova'];}

$sql='SELECT ute_id,ute_email FROM utente AS utente INNER JOIN categoria AS categoria WHERE utente.ute_cate_id=categoria.cate_id AND (categoria.cate_nome="'.$cat1.'" ';
if ($cat1!=''){$sql=$sql.')';}
if ($cat2!=''){$sql=$sql.' OR categoria.cate_nome="'.$cat2.'")';}
if ($cat3!=''){$sql=$sql.' OR categoria.cate_nome="'.$cat3.'")';}
if ($cat4!=''){$sql=$sql.' OR categoria.cate_nome="'.$cat4.'")';}
if ($cat5!=''){$sql=$sql.' OR categoria.cate_nome="'.$cat5.'")';}
if ($cat6!=''){$sql=$sql.' OR categoria.cate_nome="'.$cat6.'")';}
$dati=mysql_query($sql,$miaconn) or die ($sql); 


in questo modo però se seleziono tutti la query verrà così:

SELECT ute_id,ute_email FROM utente AS utente INNER JOIN categoria AS categoria WHERE utente.ute_cate_id=categoria.cate_id AND (categoria.cate_nome="utente" ) OR categoria.cate_nome="azienda") OR categoria.cate_nome="enoteca") OR categoria.cate_nome="ristorante") OR categoria.cate_nome="winebar") OR categoria.cate_nome="prova")



e ovviamente non funziona...come posso impostarla? qualche consiglio? grazie ciao simone
Modifica/elimina messaggio
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao, prova così

PHP:
if ($cat1!=''){$wh=$wh.'';}
if ($cat2!=''){$wh.=$wh.' OR categoria.cate_nome="'.$cat2.'" ';}
if ($cat3!=''){$wh.=$wh.' OR categoria.cate_nome="'.$cat3.'" ';}
if ($cat4!=''){$wh.=$wh.' OR categoria.cate_nome="'.$cat4.'" ';}
if ($cat5!=''){$wh.=$wh.' OR categoria.cate_nome="'.$cat5.'" ';}
if ($cat6!=''){$wh.=$wh.=' OR categoria.cate_nome="'.$cat6.'" ';}
$wh.=$wh.' )';

$sql=$sql.$wh;
/*
se cat tutte  vuote
risulta
SELECT ute_id,ute_email FROM utente AS utente INNER JOIN categoria AS categoria WHERE utente.ute_cate_id=categoria.cate_id AND (categoria.cate_nome="utente" )
con una o più non vuote
SELECT ute_id,ute_email FROM utente AS utente INNER JOIN categoria AS categoria WHERE utente.ute_cate_id=categoria.cate_id AND (categoria.cate_nome="utente" OR ...)
*/
 

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
32
Sant'Antioco (CI)
Io ti ocnsiglio di rimettere mano al codice e farlo leggermente più ordinato, poi ovviamente ognuno scrive come meglio gli pare!

In ogni caso se hai messo i checkboxes, non avrai solo valori uguali ad 1 e 0 (true o false)?

Prova ad usare questo codice:
PHP:
$cat1 = (!empty($_POST['utente'])) 	 ? $_POST['utente'] : '';
$cat2 = (!empty($_POST['azienda']))     ? $_POST['azienda'] : '';
$cat3 = (!empty($_POST['enoteca'])) 	? $_POST['enoteca'] : '';
$cat4 = (!empty($_POST['ristorante']))  ? $_POST['ristorante'] : '';
$cat5 = (!empty($_POST['winebar'])) 	? $_POST['winebar'] : '';
$cat6 = (!empty($_POST['prova'])) 	  ? $_POST['prova'] : '';

$sql = "SELECT ute_id, ute_email 
	FROM utente AS utente 
	INNER JOIN categoria AS categoria 
	WHERE utente.ute_cate_id=categoria.cate_id 
		AND categoria.cate_nome = '" . $cat1 . "'";

$sql .= (!empty($cat2)) ? " OR categoria.cate_nome = '" . $cat2 . "'" : '';
$sql .= (!empty($cat3)) ? " OR categoria.cate_nome = '" . $cat3 . "'" : '';
$sql .= (!empty($cat4)) ? " OR categoria.cate_nome = '" . $cat4 . "'" : '';
$sql .= (!empty($cat5)) ? " OR categoria.cate_nome = '" . $cat5 . "'" : '';
$sql .= (!empty($cat6)) ? " OR categoria.cate_nome = '" . $cat6 . "'" : '';

if(!($dati = mysql_query($sql,$miaconn)))
{
	die('Errore nella query: ' . mysql_error() . '<br /><br />' . $sql);
}

Ti consiglio di postare il form html e di utilizzare gli array in modo da risparmiare molte righe di codice e fare tutto con un semplice foreach() o for().
 
Ultima modifica:

symon83

Nuovo Utente
29 Set 2009
5
0
0
Grazie per le dritte ragazzi. ora la query sembra farla correttamente.
Dopodichè per recuperare le mail ho usato questo cod:

PHP:
for($i=0;$i<$num;$i++) {
$mail = mysql_result($dati, $i, 'ute_email');
echo $mail;
}
//istanziamo la classe
$messaggio = new PHPmailer();
$messaggio->IsHTML(true);
//definiamo le intestazioni e il corpo del messaggio
$messaggio->From='[email protected]';
$messaggio->AddAddress($mail);
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject=$oggetto;
$messaggio->Body=stripslashes($mess);

il problema ora è che le mail le salva tipo: [email protected]@hotmail.it ecc. quindi quando gli passo la variabile $mail alla classe di phpmailer non mi dà errore, mi conferma il messaggio di mail inviata, però non arriva la mail, mentre se nel addAddres scrivo proprio l'indirizzo mail, la manda correttamente. Come faccio a separare i vari indirizzi con un punto e virgola?
 
Ultima modifica:

symon83

Nuovo Utente
29 Set 2009
5
0
0
Grazie per le dritte ragazzi. ora la query sembra farla correttamente.
Dopodichè per recuperare le mail ho usato questo cod:

PHP:
for($i=0;$i<$num;$i++) {
$mail = mysql_result($dati, $i, 'ute_email');
echo $mail;
}
//istanziamo la classe
$messaggio = new PHPmailer();
$messaggio->IsHTML(true);
//definiamo le intestazioni e il corpo del messaggio
$messaggio->From='[email protected]';
$messaggio->AddAddress($mail);
$messaggio->AddReplyTo('[email protected]'); 
$messaggio->Subject=$oggetto;
$messaggio->Body=stripslashes($mess);

il problema ora è che le mail le salva tipo: [email protected]@hotmail.it ecc. quindi quando gli passo la variabile $mail alla classe di phpmailer non mi dà errore, mi conferma il messaggio di mail inviata, però non arriva la mail, mentre se nel addAddres scrivo proprio l'indirizzo mail, la manda correttamente. Come faccio a separare i vari indirizzi con un punto e virgola?

Mi correggo ho detto una sciocchezza...non posso passargli più indirizzi contemporaneamente, devo passargli un indirizzo per volta, dovrei quindi usare un foreach come mi hai consigliato tu?
 
Ultima modifica:

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
32
Sant'Antioco (CI)
No un foreach() per forza, in ogni caso un ciclo in modo che tutto sia ricorsivo.

Fai un ciclo e dopo ogni invio della mail, mettici la funzione sleep() per evitare di caricare troppo il server oppure fai un controllo con la % (percentuale) e ogni TOT di email inviate ci metti sleep().
 

symon83

Nuovo Utente
29 Set 2009
5
0
0
Ok, ho usato il ciclo for ora funziona tutto correttamente, grazie ragazzi buona giornata! :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
O problema con query PHP 4
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
M Problema su query JOIN in tre tabelle PHP 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
A [PHP] Problema query insert [RISOLTO] PHP 14
M [PHP] Problema con query select PHP 2
T [php] problema creazione query select-where PHP 5
V [MySQL] problema query con date su server MySQL 5
trattorino problema raccapricciante php conteggio query PHP 4
L [PHP] Problema creazione query a numero di parametri variabile PHP 6
G Mysql ( Query) problema interrogazione MySQL 0
D Problema con query in php PHP 5
E [PHP] problema insert query PHP 9
M [PHP] Problema con query PHP 17
Rikk73 [C#] problema con stampa da query linq EnumerableRowCollection .NET Framework 0
M Problema con query PHP 15
G Problema con una query. PHP 5
F problema su query con nome tabella variabile PHP 20
G problema query mysql in php PHP 5
F PHP problema doppi apici all'interno di una query SQL PHP 1
M problema con media query CSS HTML e CSS 1
D Problema caratteri jolle su criterio Query MS Access 0
L problema creazione query con campo float PHP 2
elpirata Query di ricerca problema campo data italiano PHP 2
andrea.peo Problema query con join visualizzazione record ripetuti PHP 5
X Problema di sostituzione tramite query sql MySQL 5
S Problema Query PHP 2
S Problema query PHP 25
Emix Problema query inserimento... PHP 6
B problema query PHP 6
Emix Dubbio e problema su query con operatore LIKE PHP 56
S Problema query con sum MySQL 4
G Problema con query mysql MySQL 1
B problema query mysql php PHP 1
L PHP: problema con query mysql. PHP 3
A problema query e javascript Javascript 0
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
D E' natale lo so... ma ho un problema su una query :S MySQL 7
Boscagoo Problema query mySQL MySQL 6
L query sqlite problema PHP 3
EffeElle Php problema query select PHP 5
Trapano Problema con query MySQL 32
EffeElle Problema per una query di aggiornamento record php PHP 35
M Problema query MySQL MySQL 13
V Problema query PHP 3
Longo8 Problema query in rete PHP 3
K problema con query complessa MySQL 4
K [MYSQL] problema con una query in loop MySQL 1

Discussioni simili