22. januar 2010 - 12:57Der er
30 kommentarer og 1 løsning
Problem med to dropdown menuer hvor oplysningerne trækkes fra mysql
Hej,
Jeg har to forms på en side hvor jeg trækker oplysningerne til en dropdown menu i hver form fra en database med følgende script. Problemet er at oplysningerne fra database udtrækket kun vises i den første form. Hvis jeg inaktivere scriptet i første form, med /**/, vises dropdown menuen fint i den anden form. Jeg kan ikke se hvad jeg overser - kan I hjælpe?
<?php require_once('../../Connections/con_a.php'); $query_f_s = mysql_query("SELECT `id` FROM tabel WHERE status = 'a'"); while ($row = mysql_fetch_array($query_f_s)) { $id = $row['id']; require_once('../../Connections/con_b.php'); $query_f_s2 = mysql_query("SELECT * FROM tabel WHERE (id = '$id' AND tabel2 = 'tekst')"); while ($row = mysql_fetch_row($query_f_s2)) { echo '<option value="'.$row[0].'"'; if ($row[0] == $_GET['soeg']) { echo ' selected="selected"'; } echo '>'.$row[4].' '.$row[2].' '.$row[5].' '.$row[3].'</option>'."\n"; } } ?>
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hvis du højreklikker på og bruger "vis kilde" kan du ofte se hvad som går galt. Et hurtigt bud er at du bruger "tabel2" som et kolonne navn i tabel i din anden query
Du har fuldstændig ret, jeg bruger "tabel2" som kolonne navn i tabel i anden query. Det var jeg ikke klar over var et problem. Med mit oprindelige script er fejlmeddelelsen: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Er der andre måder at løse problemet på udover dit forslag i #3?
Hvis jeg lige må tillade at kommentere lidt på dit første spørgsmål.
For at kunne bruge to mySQL databaser samtidig, bliver du nød til at angive hvilken forbindelse du vil bruge til dine query's. http://dk2.php.net/mysql_query Ved at angive en ressource som anden parameter, fortæller du mysql funktionen hvilken forbindelse den skal bruge, altså hvilken database.
Angående sidste spørgsmål, så prøv: $next = "SELECT * FROM tabel2 WHERE id IN (".implode(',',$ref).") AND ditnavnpåfelt = 'tekst'";
Ellers må du vise hvordan din kode ser ud. ( Altså den du tester som fejler )
dkfire: det troede jeg egentlig også jeg gjorde da jeg først har: require_once('../../Connections/con_a.php'); og herefter: require_once('../../Connections/con_b.php'); som henviser til <?php include ("ingenforbindelse.php"); mysql_connect("XXX", "YYY", "afskrift") or die($fejl); mysql_select_db("ZZZ") or die($fejl); ?> Hvor ZZZ er forskellig for con_a og con_b.
Den nye kode er: <table><tr> <td>Valg:</td> <td><select name="valg" id="valg" > <?php require_once('../../Connections/con_a.php'); $query_f_s = mysql_query("SELECT id FROM tabel WHERE status = 'a'"); $ref = array(); while ($row = mysql_fetch_array($query_f_s)) { $ref = $row['id']; } mysql_close(); $next = "SELECT * FROM tabel2 WHERE id IN (".implode(',',$ref).") AND ditnavnpåfelt = 'tekst'"; require_once('../../Connections/con_b.php'); $query_f_s2 = mysql_query($next); while ($row = mysql_fetch_row($query_f_s2)) { echo '<option value="'.$row[0].'"'; if ($row[0] == $_GET['soeg']) { echo ' selected="selected"'; } echo '>'.$row[4].' '.$row[2].' '.$row[5].' '.$row[3].'</option>'."\n"; } ?> </selected></td> </tr> </table>
Ved at ændre $ref = $row['id']; } til $ref[] = $row['id']; } fungere scriptet, MEN samme problem opstår som beskrevet i mit første indlæg. Hvis jeg har to forms på samme side og bruger scriptet en gang i hver form til at danne dropdownmenu, vises kun den første. Jeg vil lige tilføje at jeg har sat en mysql_close(); inden ?>.
Scriptet virker nu som nævnt i #18, men problemet er når scriptet kører i form nummer 2. Altså når samme script indsættes i en ny form på samme side til at danne en dropdownmenu. Her vises ingen resultater i dropdownmenuen.
Problemet er løst ved at flytte al php koden udenfor tabel, så kun while løkken er i <td>. Hvis I vil se den endelige kode, så sig til. Tak til showsource for at hjælpe på vej - smid svar.
At du forbinder til en mysql database to gange er ikke det samme som at php ved hvilken forbindelse den skal bruge til hvilken query. Det er lige præcis derfor at der er yderligere en parameter både i mysql_select_db og mysql_query. Du bliver nød til at fortælle php hvilken forbindelse du vil bruge, hvis du vil have flere end en forbindelse åben.
Det kan gøres med: [div] <?php include ("ingenforbindelse.php"); // hvad laver lige den ?? $conn1 = mysql_connect("XXX", "YYY", "***") or die($fejl); mysql_select_db("ZZZ", $conn1) or die(mysql_error());
$result1 = mysql_query("SELECT * FROM tabel1", $conn1) or die(mysql_error()); $result2 = mysqk_query("SELECT * FROM tabel2", $conn2) or die(mysql_error()); ?>
Men hvis det bare handler om at vælge mellem flere forskellige databaser for samme bruger og på samme server, så behøver du ikke at oprette en ny forbindelse, du kan "bare" skifte mellem databaserne.
Tak for forklaringen. include ("ingenforbindelse.php"); er blot $fejl = 'Der kunne ikke forbindes til databasen.';, så mysqlfejlmeddelelse ikke vises for de besøgende på siden. Men når jeg tester bruger jeg or die(mysql_error()); i stedet for or die($fejl);.
Hvis jeg har forskellige require_once('Connections/con_b.php'); som henviser til <?php include ("ingenforbindelse.php"); mysql_connect("XXX", "YYY", "afskrift") or die($fejl); mysql_select_db("ZZZ") or die($fejl); ?> og con_c.php henviser til en anden mysql_connect og mysql_connect_db på samme server med forskellig brugernavn og kodeord, og con_d.php henviser til... osv.
Har jeg forstået korrekt at jeg da fx kan gøre følgende: require_once('Connections/con_b.php'); while... { require_once('Connections/con_c.php'); while... { require_once('Connections/con_d.php'); } }
Og Nej du skal ikke have nogen require_once i dine while løkker, det er rigtig dårlig programmering.
Hvis du vil have flere forbindelser åbne på samme tid bliver du nød til at fortælle hvilken forbindelse du vil bruge på hvilke tidspunkt. Derfor SKAL du gemme forbindelsen i en variabel: $CONN = mysql_connect( ???, ???, ???);
Dernæst skal du bruge henne variabel når du vil lave noget med din forbindelse, som at vælge en database eller lave en query: mysql_select_db(???, $CONN); og mysql_query("SELECT ....", $CONN);
Ok, jeg er med på hvad du mener. Det virker også noget mere logisk, end den metode jeg benyttede (som i øvrigt er fra Larry Ullman's PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide). Tak for forklaringen.
Synes godt om
Ny brugerNybegynder
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.