Avatar billede netroam Nybegynder
18. september 2009 - 08:48 Der er 5 kommentarer og
1 løsning

Explode og derefter hent værdi i db

Jeg har en formular, hvor man alt efter hvilken radio button man trykker på, sender en mail til en bestemt gruppe personer.

I databasen har jeg så lavet sådan, at man ud fra radio button A har nogle personer i et felt, der hedder $til. Disse er skrevet ud fra deres brugerID og er separeret med et komma - f.eks. "M6256168, H4365846, P3138541".

Jeg ønsker nu at lave en fuldkommen liste over alle radio buttons inkl. de personer, der står i databasen til at modtage mails på den specifikke radio button. Det skal se ud nogenlunde sådan:


Radio Button      Til
A                  Bruger 1, Bruger 2, Bruger 4
B                  Bruger 1, Bruger 3, Bruger 5
C                  Bruger 2, Bruger 6, Bruger 7


Mit spørgsmål er derfor ... Hvordan får jeg exploded de værdier / brugerID i hver record i tabellen, så jeg kan få brugerens fulde navn (har en anden tabel i databasen, jeg kan køre en query på) stående under Til-kolonnen på siden?
Avatar billede netroam Nybegynder
18. september 2009 - 08:55 #1
Det jeg har forsøgt at lave indtil nu er som følger:


<tr height="24" class="bg1">
  <td width="80"><b>Type</b></td>
  <td width="310"><b>Til</b></td>
</tr>
<?
connectDatabase();
$query = "select * from afvigelser_mail order by type asc";
$result = mysql_query($query) or die("".mysql_errno()." Error: ".mysql_error());

if ($result && mysql_num_rows($result) > 0)
{
  while($row = mysql_fetch_array($result))
  {
    $ID = $row['ID'];
    $type = $row['type'];
    $til = $row['til'];
                       
    $tilNavnArr = explode(", ", $til);
    for ($tilNavnNo=0; $tilNavnNo<count($tilNavnArr); $tilNavnNo++)
    {
      $tilNavn = $tilNavnArr[$tilNavnNo];
                       
      $query1 = "select * from brugere where brugerNavn = '$tilNavn'";
      $result1 = mysql_query($query1) or die("".mysql_errno()." Error: ".mysql_error());

      if ($result1 && mysql_num_rows($result1) > 0)
      {
        while($row1 = mysql_fetch_array($result1))
        {
          $tilNavn = $row1['brugerFuldnavn'];
        }
      }

      $tilNavne .= $tilNavn;
      $tilNavne .= "<br>";
    }
?>
<tr class="bg2" height="30">
  <td valign="top"><?= $type ?></td>
  <td valign="top"><?= $tilNavne ?></td>
</tr>
<?
  }
}


Dette virker også fint men kun på den første record i databasen. Når anden record kommer, så kopierer den sådan set resultaterne fra første record og lægger ned i anden record FØR den henter dataene fra anden record - lidt i denne stil:

Radio Button            Til
A                        Bruger 1, Bruger 2
B                        Bruger 1, Bruger 2, Bruger 3, Bruger 4

A indeholder oprindeligt kun Bruger 1 og Bruger 2
B indeholder oprindeligt kun Bruger 3 og Bruger 4

Hvad gør jeg galt ovenfor?
Avatar billede sw_red_6 Nybegynder
18. september 2009 - 12:13 #2
hmm optimalt ville du have lavet den kommaseparerede streng som en tabel i stedet for..

Det her kunne muligvis gøre det:
$sql = "SELECT afvigelser_mail.ID, afvigelser_mail.`type`, afvigelser_mail.til, brugere.brugerFuldnavn
FROM afvigelser_mail
INNER JOIN brugere ON FIND_IN_SET(afvigelser_mail.til,brugere.brugerNavn)
ORDER BY type ASC;";
$result = mysql_query($sql) or die("".mysql_errno()." Error: ".mysql_error());
while($row=mysql_fetch_array($result)) {
  $arr[$row[0]]['type'] = $row['type'];
  $arr[$row[0]]['til'] = $row['til'];
  $arr[$row[0]]['brugernavn'] = $row['brugerNavn'];
}

Jeg har ikke testet det så jeg er ikke sikker på det virker..
Avatar billede netroam Nybegynder
18. september 2009 - 13:34 #3
Tak for svaret! Jeg ved faktisk heller ikke selv, om det fungerer, for har ikke testet det. Jeg forsøgte efter jeg lavede indlægget at fortsætte med fejlfindingen i den oprindelige kode, jeg lavede ... det viser sig, at jeg bare skulle tilføje en simpel ting.

I starten skulle jeg bare lave en $tilNavne = ""; inden min mysql query streng ... så "nulstiller" den variablen før hver record i databasen og så virker alt som det skal.

Vil du have en bid af pointsene for besværet?
Avatar billede sw_red_6 Nybegynder
18. september 2009 - 14:21 #4
nej, det er lige meget..

Din løsning virker og det var dig selv som fik det til at virke, bare husk at hver kald til DB tager tid og resourcer...
Avatar billede netroam Nybegynder
18. september 2009 - 14:59 #5
Ja, det har du selvfølgelig ret i - er dog ikke fuldkommen haj i PHP, så har ikke lige den fornødne kendskab til at bruge INNER JOINs og FIND_IN_SET osv. ... derfor mine "løsninger" måske bliver lidt for primitive nogle gange :)

Jeg napper bare pointsene så. Mange tak for svaret.
Avatar billede sw_red_6 Nybegynder
21. september 2009 - 08:47 #6
nu er det godt nok sql..

Du kan læse en del om det her:
http://dev.mysql.com/doc/refman/5.0/en/index.html
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

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