Avatar billede walkie84 Nybegynder
10. august 2011 - 23:42 Der er 12 kommentarer og
1 løsning

MySQL udtræk og løkke problem

Kære Eksperter,

Jeg har en lille udfordring her, som jeg behøver noget hjælp til.

Jeg har 2 arrays, som kommer fra en form, hvor man skal vælge nogle checkboxes.

Det ene array er valg af nogle holdnavne (hold1, hold2 osv) - som er i MySQL tabellen "tilmelding".
Den anden array er valg af hvilke felter i databasen man vil have vist (personnavn, email osv).

Det er så meningen at man i en tabel skal få vist udtrækkene fra de valgte hold, og kun få vist de valgte felter.

Jeg har fået lavet min SELECT således at den kun udtrækker data, fra de steder hvor holdnavnet indgår i array nr 1 (box1), samt teste af det virker.
Derudover har jeg fået lavet overskrifterne til tabellen, fra den array hvori felterne er valgt (I den første while løkke).

Mit problem opstår så nu, hvor jeg skal have udskrevet al dataen fra databasen.
Det skal være sådan at den kun udskriver de felter, som indgår i arrayet $box2 - mit dårlige gæt kan ses i 2. while løkke.

Har nogen en løsning til dette? :)

På forhånd tak

<walkie>


MIN KODE

$box1=$_POST['box1'];
$box2=$_POST['box2'];
$matches = implode("','", $box1);

$qlist10 = mysql_query("SELECT * FROM tilmelding WHERE hold IN ( '$matches' ) ORDER BY navn") or die(mysql_error());
$rowlist10 = mysql_fetch_array($qlist10)

echo "<table border='1' class=diverse><tr>";

while (list ($key,$val) = @each ($box2)) {
  echo "<td><b>$val</b></td>";
}

echo "</tr><tr>";
   
while (list ($key,$val) = @each ($box2)) {
  echo "<td>" . $rowlist10[ . $val . ] . "</td>";
}

echo "</tr></table>";
Avatar billede ggxdg Nybegynder
11. august 2011 - 08:55 #1
Kan du ikke bare selecte tingene fra $box2

altså:

SELECT $box2 FROM tilmelding WHERE hold IN ( '$matches' ) ORDER BY navn

og så hælde resultatet fra querien ud i en tabel?
Avatar billede walkie84 Nybegynder
11. august 2011 - 10:01 #2
Tak for dit svar ggxdg,

Det har jeg også tænkt på, men så er jeg i tvivl om hvordan jeg får resultatet smidt ind i <td></td>

Vil du være sød at hjælpe med det? :)
Avatar billede ggxdg Nybegynder
11. august 2011 - 16:16 #3
hmm.. jeg har ikke lige mulighed for lige at teste det, og jeg er lidt rusten i MySQL og PHP, så du må lige bære over med små fejl:


$box1=$_POST['box1'];
$box2=$_POST['box2'];
$matches = implode("','", $box1);
$hent = implode(",", $box2);

$qlist10 = mysql_query("SELECT $hent FROM tilmelding WHERE hold IN ( '$matches' ) ORDER BY navn") or die(mysql_error());
echo "<table border='1' class='diverse'><tr>";
while ($thead = $box2) {
  echo "<th>$thead</th>";
}
echo "</tr>";
while($rowlist10 = mysql_fetch_array($qlist10)) {
  echo "<tr>";
  while($celllist10 = $rowlist10) {
    echo "<td>".$celllist10."</td>";
  }
  echo "</tr>";
}
echo "</table>";


Den er ikke foolproof. Hvis der er mulighed for at der ikke er udfyldt noget i enkelte af cellerne skal den lige tweakes lidt hvis den skal kunne fungere som strict HTML.

Som sagt er jeg lige lidt rusten, så jeg kan ikke lige garantere for at man kan iterere gennem de arrays som jeg har gjort her.
Hvis det ikke lige funker, skal man muligvis igang med nogle for each loops.
Sig lige til om det fungerer :)
Avatar billede walkie84 Nybegynder
11. august 2011 - 16:41 #4
Tak for svaret :)

Der er en fejl ved while løkkerne.
Den udskriver dette uendeligt:
http://www.jaded.dk/screenshot.png
Avatar billede walkie84 Nybegynder
11. august 2011 - 16:42 #5
Jeg har forsøgt at rette første while løkke til det jeg havde oprindeligt, da det virkede - men så får jeg samme fejl i den anden while løkke, hvor den bare laver rækker med "Array" :)
Avatar billede ggxdg Nybegynder
11. august 2011 - 18:31 #6
aha...


$box1=$_POST['box1'];
$box2=$_POST['box2'];
$matches = implode("','", $box1);
$hent = implode(",", $box2);

$qlist10 = mysql_query("SELECT $hent FROM tilmelding WHERE hold IN ( '$matches' ) ORDER BY navn") or die(mysql_error());
$rowlist10 = mysql_fetch_array($qlist10);
echo $hent . "<br /><br /><br /><br />";
print_r($rowlist10);


Prøv lige det der og tag et screenshot, eller copy/paste resultatet her, så jeg lige kan se hvad jeg har med at gøre :)
Avatar billede ggxdg Nybegynder
11. august 2011 - 18:33 #7
Jeg vil tro at jeg kan lave det med 2 for each loops i stedet, det burde være et 2d array, men jeg vil gerne lige være sikker.
Avatar billede walkie84 Nybegynder
11. august 2011 - 18:41 #8
Så er output'et dette:

hold,navn,status



Array ( [0] => Hold1 [hold] => Hold1 [1] => Person navn1 [navn] => Person navn1 [2] => Nyoprettet [status] => Nyoprettet )


Hjælper det? :)
Avatar billede ggxdg Nybegynder
11. august 2011 - 19:00 #9
$box1=$_POST['box1'];
$box2=$_POST['box2'];
$matches = implode("','", $box1);
$hent = implode(",", $box2);

$qlist10 = mysql_query("SELECT $hent FROM tilmelding WHERE hold IN ( '$matches' ) ORDER BY navn") or die(mysql_error());
echo "<table border='1' class='diverse'><tr>";
foreach ($box2 as $thead) {
  echo "<th>".$thead."</th>";
}
echo "</tr>";
while($rowlist10 = mysql_fetch_array($qlist10)) {
  echo "<tr>";
  foreach ($rowlist10 as $tcell) {
    echo "<td>".$tcell."</td>";
  }
  echo "</tr>";
}
echo "</table>";


Prøv evt det der, man kan ikke bare bruge while som jeg gjorde før.

Er der ALTID data i de felter man kan vælge, er der nogen af dem som er valgfri?
Avatar billede walkie84 Nybegynder
11. august 2011 - 19:15 #10
Ja nu kommer der noget data ud, og overskrifterne er som de skal være!
Dog komme selve dataen dobbelt ud. Se dette screenshot :)
http://www.jaded.dk/screenshot2.png

P.s. Der er ALTID data i felterne.
Avatar billede ggxdg Nybegynder
11. august 2011 - 19:30 #11
Ah ja.. det er pga af fetch_array, det  kan fikses på 4 måder:

mysql_fetch_array($qlist10, MYSQL_ASSOC)
mysql_fetch_assoc($qlist10)
mysql_fetch_array($qlist10, MYSQL_NUM)
mysql_fetch_row($qlist10)

det er fordi at
mysql_fetch_array($qlist10, MYSQL_BOTH)
er default, hvilket betyder at alt der kommer ud af din query står 2 gange i arrayet, en med associativt navn og en med nummer, men ved at definere en af ovenstående 4 kommer man ud over det problem, speeder siden en anelse op, og reducerer hukommelsesforbrug :)
Avatar billede walkie84 Nybegynder
11. august 2011 - 19:52 #12
Perfekt!

Nu virker det sq :)

Tusind tak for hjælpen!!
Skriv et svar, så skal du få pointene!

Venligst
walkie
Avatar billede ggxdg Nybegynder
11. august 2011 - 20:05 #13
Det kommer her :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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