Avatar billede hrole Mester
08. februar 2013 - 10:30 Der er 14 kommentarer og
1 løsning

Hjælp til mysqludtræk til array og explode

Jeg har følgende db hvis struktur ikke kan ændres (jeg ved den ikke er optimal):

id navn
1 mads / peter / lars
2 ole
3 lise / lone
4 rasmus / hans / bo
5 pia / olga

Ønsket er at lave en dropdown hvor hvert navn (alfabetisk rækkefølge) vises med den givne id:
<option value="4">bo</option>
<option value="4">hans</option>
<option value="1">lars</option>
<option value="3">lise</option>
osv. osv.

Jeg har forsøgt:
$query = "SELECT * FROM navnetabel";
$result = mysqli_query($connect, $query);

$navn = array();

while ($row = mysqli_fetch_row($result)) {
$navn[] = $row['navn'];   
}

$navn_e = explode(" / ", $navn);
$navn_s = ksort($navn_e);

foreach ($navn_s as $navn_s2)  {
echo '<option value=".$???.">'.$navn_s2.'</option>'."\n";
}
Avatar billede olebole Juniormester
08. februar 2013 - 16:49 #1
<ole>

$query = "SELECT * FROM navnetabel ORDER BY id";
$result = mysqli_query($connect, $query);

$html = array();

while ($row = mysqli_fetch_row($result)) {
    $navn = explode(" / ", $row['navn']);
    foreach ($navn as $val) {
        $html[] = '<option value="'.$row['id'].'">'.$val.'</option>'
    } 
}

echo implode('', $html);

- men dels er strukturen ret håbløs, og den vil kun give dig problemer i fremtiden. Nu er det helt rigtige tidspunkt at skifte til en mere fornuftig struktur  *o)

Derudover kan du påregne, at MySQL-API'et helt forsvinder fra PHP ret snart. Derfor er det på høje tid at skifte til MySQLI eller PDO.

/mvh
</bole>
Avatar billede olebole Juniormester
08. februar 2013 - 16:50 #2
Ups  =)

while ($row = mysqli_fetch_assoc($result)) {
Avatar billede hrole Mester
08. februar 2013 - 19:58 #3
olebole: mange tak, et enkelt mangel i forhold til mit ønske i #1: alfabetisk ordnet navn.

Jeg er klar over db-strukturen er elendig, men det må komme senere.

Du skriver videre:
Derudover kan du påregne, at MySQL-API'et helt forsvinder fra PHP ret snart. Derfor er det på høje tid at skifte til MySQLI eller PDO.

Det troede jeg faktisk jeg brugte:
$result = mysql*i*_query($connect, $query);
Avatar billede olebole Juniormester
08. februar 2013 - 20:32 #4
Doooh ... det er da vist mig og min førerhund, der ikke lige kommunikerede ordentligt. Glem alt om MySQL-API'et  *D

Du kan bruge din egen kode, og så trække id'et med over i array'et. Derefter kan du så sortere array'et med en brugerdefineret sorteringsalgoritme, men det er da for bøvlet ... og helt uden grund.

Som du selv er inde på, bør du bruge din ungdom på en bedre måde. Lav en fornuftig datastruktur i stedet  *o)
Avatar billede hrole Mester
08. februar 2013 - 20:50 #5
Ok.

Mja. Men hvordan trækker jeg id'et med over i arrayet? Det kan jeg ikke gennemskue
Avatar billede olebole Juniormester
08. februar 2013 - 22:00 #6
$navn[] = $row;

Så har du de felter, du henter med din SQL, i hvert element af $navn:

echo $navn[2]['id'] . ' :: ' . $navn[2]['navn'];
Avatar billede hrole Mester
09. februar 2013 - 08:12 #7
Joh, men så kan jeg vel ikke explode navn?

Min tankegang er:
hent id og navn i array
explode navn (med tilhørende id)
alfabetisk sortering af navn (med tilhørende id)
skriv dropdown
Avatar billede olebole Juniormester
09. februar 2013 - 16:48 #8
Nej, som sagt er det noget frygteligt rod, du insisterer på at skaffe dig selv på halsen. En fornuftig struktur løser dine nuværende og en masse kommende problemer.

Insisterer du på at bygge et hus på et råddent fundament - og forsøge at udbedre problemerne på et senere tidspunkt - insisterer man på at skabe bunker af helt unødige problemer for sig selv. Problemerne blver blot større for hvert semikolon, du tilføjer - og det samme gør tidsspildet.

Gør dig selv en tjeneste, og gør de ting, der giver mening  *o)
Avatar billede hrole Mester
10. februar 2013 - 12:21 #9
ok, jeg kaster håndklædet i ringen og ændrer strukturen.
Avatar billede olebole Juniormester
10. februar 2013 - 17:10 #10
Du bliver glad for det i længden  *o)
Avatar billede hrole Mester
10. februar 2013 - 19:05 #11
så vidt jeg husker samler du ikke point, er det korrekt?
Avatar billede olebole Juniormester
10. februar 2013 - 19:11 #12
Du har ret. Bare læg et svar selv og accepter det, så tråden lukkes  =)
Avatar billede hrole Mester
10. februar 2013 - 19:41 #13
du skal have mange tak for hjælpen!
Avatar billede olebole Juniormester
10. februar 2013 - 20:37 #14
Selvtak  =)
Avatar billede olebole Juniormester
10. februar 2013 - 20:38 #15
- men du skal nok lige acceptere svaret  *o)
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