Avatar billede sj.netomia Nybegynder
25. april 2007 - 15:15 Der er 13 kommentarer og
1 løsning

Nyhedsbrev query problem.

Hej Eksperter.

Jeg har et nyhedsbrev system, som jeg ikke helt kan få til at fungere, jeg har 7 forskellige kategorier som man kan sende nyhedsbrevet til, hvor folk så krydser af hvad de kan lide.

Problemet er så med query at jeg ikke ved hvordan jeg skal få den til at sende til dem man krydser af, jeg har prøvet sådan her.

$query        ="SELECT * FROM nyhedsbrev where $send_til1='ja' OR $send_til2='ja' OR $send_til3='ja' OR $send_til4='ja' OR $send_til5='ja' OR $send_til6='ja' OR $send_til7='ja' GROUP by email";

Men det giver eks dette resultat.
SELECT * FROM nyhedsbrev where privat='ja' OR virksomhed='ja' OR ='ja' OR grafik='ja' OR ='ja' OR ='ja' OR ='ja' GROUP by email


Her er mit script som sender.

elseif (($send_til1) || ($send_til2) || ($send_til3) || ($send_til4) || ($send_til5) || ($send_til6) || ($send_til7)) {
$query        ="SELECT * FROM nyhedsbrev where $send_til1='ja' OR $send_til2='ja' OR $send_til3='ja' OR $send_til4='ja' OR $send_til5='ja' OR $send_til6='ja' OR $send_til7='ja' GROUP by email";
print ("$query");
$result        = mysql_db_query ($database, $query);
    while($row = mysql_fetch_array($result)){
        $id      = $row[id];
        $email    = $row[email];
        $navn    = $row[navn];
        $kat_hent = $row[kat];
        $html_start = "<HTML><HEAD><TITLE></TITLE><META http-equiv=Content-Type content=\"html ; charset=iso-8859-1\"></HEAD>";
    mail("$email","Nyhedsbrev $hentdato","
    $html_start
    $css
    $top
    <font size=4>Galleri Brænderigården nyhedsbrev $hentdato</font><br><br>
    Kære $navn<br>
    $indhold
    $bottom
    </font></html>","From: $fra_title<$mail_fra>\nContent-type:text/html");
    }
    $mysql_query = "UPDATE nyhedsbrev_indhold SET indhold='$indhold' where kat='$katid'";
    mysql_query("$mysql_query");
}

Og her er min form.

<form NAME="forside" ACTION="send.php?katid=<?echo "$kat";?>" METHOD="POST">
<br><br><FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="2">Send kun til mig:<input type="checkbox" name="test_send" value="1" checked="1">
            <FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="1"><br><b>Fjern denne for at sende til alle på listen.</b></FONT><br><br>
            <b>Send til:</b> Private:<input type="checkbox" name="send_til1" value="privat"<?if ($kat == "privat") {print ("checked");}?>>
            &nbsp;&nbsp;&nbsp;Firmaer:<input type="checkbox" name="send_til2" value="virksomhed"<?if ($kat == "virksomhed") {print ("checked");}?>>
            &nbsp;&nbsp;&nbsp;Maleri:<input type="checkbox" name="send_til3" value="maleri" <?if ($kat == "maleri") {print ("checked");}?>>
            &nbsp;&nbsp;&nbsp;Grafik:<input type="checkbox" name="send_til4" value="grafik" <?if ($kat == "grafik") {print ("checked");}?>>
            &nbsp;&nbsp;&nbsp;Skulptur:<input type="checkbox" name="send_til5" value="skulptur" <?if ($kat == "skulptur") {print ("checked");}?>>
            &nbsp;&nbsp;&nbsp;Museum:<input type="checkbox" name="send_til6" value="museum" <?if ($kat == "museum") {print ("checked");}?>>
            &nbsp;&nbsp;&nbsp;Kunstforening:<input type="checkbox" name="send_til7" value="kunstforening"<?if ($kat == "kunstforening") {print ("checked");}?>>
            <input type="hidden" name="send_til">
            <FONT FACE="Verdana, Arial, Helvetica, sans-serif" SIZE="1"><br><b>Hvis ingen vælges sendes til alle på listen med mindre at <i> Send kun til mig </i> er valgt</b></FONT><br><br>
            </FONT>
            <p><input type="submit" value="Send Nyhedsbrev"></p>
        </form>
Avatar billede jakobdo Ekspert
25. april 2007 - 16:16 #1
OR betyder jo eller, og virker på den måde, at hvis:
a = b eller c = d eller e = e, så vil det i melde TRUE eller sandt.
Bliver der genereret en email til hver kategori eller skal emailen bygges op sådan, at hvis brugeren har valgt ja i alle emner, så kommer emailen til at indeholder alle 7 emner?
Avatar billede sj.netomia Nybegynder
25. april 2007 - 16:59 #2
det skal forståes på denne måde, jeg har 7 kategorier

`id` int(11) NOT NULL auto_increment,
  `firma` text NOT NULL,
  `navn` text NOT NULL,
  `adresse1` text NOT NULL,
  `adresse2` text NOT NULL,
  `postby` text NOT NULL,
  `email` text NOT NULL,
  `maleri` text NOT NULL,
  `grafik` text NOT NULL,
  `skulptur` text NOT NULL,
  `virksomhed` text NOT NULL,
  `privat` text NOT NULL,
  `kunstforening` text NOT NULL,
  `museum` text NOT NULL,
  `admin` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=321 ;


Admin skriver så et nyhedsbrev, og vælger hvilke personer / firmaer som skal modtage nyhedsbrevet (altså de 7 kategorier) så den sender i realiteten kun et nyhedsbrev flere gange. Group by email er for at folk ikke modtager 2 mails hvis de har registeret sig på 2 kategorier.

Håber at du forstår ellers skal jeg prøve og uddybe det.
Avatar billede sj.netomia Nybegynder
25. april 2007 - 17:02 #3
fik vist den forkerte sql fil.
Den rigtige kommer her.

CREATE TABLE `nyhedsbrev_indhold` (
  `id` int(11) NOT NULL auto_increment,
  `indhold` text NOT NULL,
  `kat` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

i kat feltet står der.

privat
virksomhed
maleri
grafik
skulptur
museum
kunstforening

Den gemmer dem så i indhold i de 7 forskellige kategorier, sådan at man kan hente dem frem igen og rette i dem hvis det skulle blive nødvendigt, altså inden man har sendt dem :-)
Avatar billede jakobdo Ekspert
25. april 2007 - 18:00 #4
Den første sql så da rigtig ud. Den sidste har jo ingen email adresse?
Hvis det er den første der er rigtig, så har du vel kun folks emails en gang i tabellen?
Avatar billede sj.netomia Nybegynder
25. april 2007 - 19:07 #5
ja det er rigtigt nok, det er faktisk dem begge 2, den ene er til brugerne og den anden er til de 7 "forskellige" nyhedsbreve.
Avatar billede jakobdo Ekspert
25. april 2007 - 20:08 #6
Hvis du skyder denne SQL af i phpmyadmin, får du så ikke kun emails en gang:

SELECT * FROM nyhedsbrev where privat='ja' OR virksomhed='ja' OR museum='ja' OR grafik='ja' OR kunstforening='ja' OR skulptur='ja' OR maleri='ja' GROUP by email
Avatar billede sj.netomia Nybegynder
25. april 2007 - 21:59 #7
ja det gør jeg, men det jeg efterlyser er at jeg kan klikke på flere af kategorierne altså checkbox'ene. Og den så sender.

Det kan jeg ikke nu, jeg skal med den query du har lavet sende til dem allesammen, jeg vil gerne kunne sende til eks. privat og museum.
Avatar billede jakobdo Ekspert
25. april 2007 - 22:18 #8
Så skal du lave en opstilling ala:

<input type="checkbox" name="privat">
<input type="checkbox" name="museum">
<input type="checkbox" name="virksomhed">
osv...

$sql = array();
if(isset($_POST['privat']))
  $sql[] = "privat = 'ja'";
if(isset($_POST['virksomhed']))
  $sql[] = "virksomhed = 'ja'";
if(isset($_POST['museum']))
  $sql[] = "museum = 'ja'";
osv...

if(count($sql)>0)
  $sqlStr = 'WHERE ' . implode(' OR ',$sql);

$query = mysql_query("SELECT * FROM nyhedsbrev $sqlStr");
gør som du plejer...
Avatar billede sj.netomia Nybegynder
26. april 2007 - 00:07 #9
ok, kan bare ikke få min elseif sætning til at virke nu.

elseif (($privat) || ($virksomhed) || ($museum) || ($maleri) || ($grafik) || ($skulptur) || ($kunstforening)) {
$sql = array();
if(isset($_POST['privat']))
  $sql[] = "privat = 'ja'";
if(isset($_POST['virksomhed']))
  $sql[] = "virksomhed = 'ja'";
if(isset($_POST['museum']))
  $sql[] = "museum = 'ja'";
if(isset($_POST['maleri']))
  $sql[] = "maleri = 'ja'";
  if(isset($_POST['grafik']))
  $sql[] = "grafik = 'ja'";
  if(isset($_POST['skulptur']))
  $sql[] = "skulptur = 'ja'";
  if(isset($_POST['kunstforening']))
  $sql[] = "kunstforening = 'ja'";
 
  if(count($sql)>0)
  $sqlStr = 'WHERE ' . implode(' OR ',$sql);
$query = mysql_query("SELECT * FROM nyhedsbrev $sqlStr");
print ("$query");
exit();
$result        = mysql_db_query ($database, $query);
    while($row = mysql_fetch_array($result)){
        $id      = $row[id];
        $email    = $row[email];
        $navn    = $row[navn];
        $kat_hent = $row[kat];
        $html_start = "<HTML><HEAD><TITLE></TITLE><META http-equiv=Content-Type content=\"html ; charset=iso-8859-1\"></HEAD>";
    mail("$email","Nyhedsbrev $hentdato","
    $html_start
    $css
    $top
    <font size=4>Galleri Brænderigården nyhedsbrev $hentdato</font><br><br>
    Kære $navn<br>
    $indhold
    $bottom
    </font></html>","From: $fra_title<$mail_fra>\nContent-type:text/html");
    }
    $mysql_query = "UPDATE nyhedsbrev_indhold SET indhold='$indhold' where kat='$katid'";
    mysql_query("$mysql_query");
}
Avatar billede sj.netomia Nybegynder
26. april 2007 - 00:11 #10
forkert jeg kan godt få min elseif sætning til at virke, kan bare ikke printe $query hvordan kan det være ?
Avatar billede sj.netomia Nybegynder
26. april 2007 - 00:17 #11
nevermind har fundet ud af det, jeg tester det lige i nat og i morgen, hvis det virker skal du nok få point :-)
Avatar billede sj.netomia Nybegynder
30. april 2007 - 09:56 #12
sorry, jeg glemte helt at skrive at scriptet virker fint, smid et svar.

måske du også kan hjælpe mig her.
http://www.eksperten.dk/spm/775615

Tak for hjælpen.
Avatar billede jakobdo Ekspert
30. april 2007 - 10:06 #13
Svar!
Avatar billede jakobdo Ekspert
30. april 2007 - 14:03 #14
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester