12. september 2009 - 22:53Der er
30 kommentarer og 1 løsning
Reload af side efter valg i select-box
Jeg har ikke så meget forstand på JS, så jeg har et lille problem. Jeg kan se at der er skrevet en del om emnet, men jeg har ikke kunnet tilpasse de tidligere beskrevne løsninger til mine behov.
Jeg har en select-box hvor options findes i min mySQL database. Nå man foretager et valg, så skal siden reloades. Værdien fra select-boxen skal bruges i et opslag i databasen. Hvordan gør man det?
En anden ting: Jeg kommer vist ikke udenom at lære noget JS, så er der nogen der kan anbefale en bog om emnet?
Jeg har en side som viser nogle lagkage-diagrammer (JPgraph) ud fra nogle data i min database. Jeg havde så tænkt mig at jeg ville have en select-box, hvor man kunne vælge en sub-gruppe af data. Når man foretager et nyt valg i select-boxen skal siden loades igen, så lagkage-diagrammerne kan laves ud fra de nye data. Jeg har lavet min select-box, jeg skal bare have siden til at loade igen og "gemme" indholdet af select-boxen i en variabel så jeg kan bruge det i min nye søgestreng.
OK, nu reloader siden godt nok, men der resterer 2 problemer:
1) Mit valg i select-boxen bliver post'et rigtig nok, da jeg kan udskrive indholdet med
print $_POST[lokalitet];
Når man sætter $_POST[lokalitet] ind i min søgestreng, så bliver den imidlertid opfattet som tom (lokalitet = ''). Min søgestreng ser ud som følger:
$sql = mysqli_query ($conn, "SELECT asa, COUNT(asa) AS antal FROM erfaring WHERE user = '$_SESSION[user]' AND lokalitet = '$_POST[lokalitet]' GROUP BY asa");
2) Kan man lave det sådan, at mit valg i select-boxen forbliver "selected" efter at siden er reloaded?
Jeg beklager at jeg sikkert ikke lige bruger de rigtige fagtermer:-)
$sSql = "SELECT asa, COUNT(asa) AS antal FROM erfaring WHERE user = '".$_SESSION['user']."' AND lokalitet = '".$_POST['lokalitet']."' GROUP BY asa"; $sql = mysqli_query ($conn, $sSql) or die ("SQL: ".$sSql."<hr>".mysql_error());
Det der med prepared statements må jeg kigge på senere.
Jeg kan ikke helt bruge din fejlfindingsmetode, da jeg bruger JpGraph til at lave mine figurer.
Jeg indsætter lagkage-diagrammet med:
<img src="images/pie_asa.php">
Det er i pie_asa.php jeg laver min mySQL-søgning:
<?php session_start(); include ("../../jpgraph/src/jpgraph.php"); include ("../../jpgraph/src/jpgraph_pie.php"); include ("../../jpgraph/src/jpgraph_pie3d.php"); include ("../../dbconnect.inc"); $data = array(); $leg = array(); $sSql = "SELECT asa, COUNT(asa) AS antal FROM erfaring WHERE user = '".$_SESSION['user']."' AND lokalitet = '".$_POST['lokalitet']."' GROUP BY asa"; $sql = mysqli_query ($conn, $sSql) or die ("SQL: ".$sSql."<hr>".mysqli_error()); while ($row = mysqli_fetch_array($sql)) { $data[] = $row['antal']; $leg[] = $row['asa']." (".$row['antal'].")"; } $graph = new PieGraph(475,200,"auto"); $graph->title->SetFont(FF_ARIAL,FS_NORMAL,10); $p1 = new PiePlot3D($data); $p1->SetCenter(0.30); $p1->SetLegends($leg); $graph->Add($p1); $graph->legend->SetFont(FF_ARIAL,FS_NORMAL,8); $graph->Stroke(); ?>
JpGraph leveret et bitmap hvis søgningen giver et resultat, og ellers kommer der ingenting. Jeg kan altså ikke se en evt. mysqli_error. Er det et eller andet med at $_POST['lokalitet'] ikke er en "global" variabel og derfor ikke er defineret i den fil jeg "includer"?
$sSql = "SELECT asa, COUNT(asa) AS antal FROM erfaring WHERE user = '".$_SESSION['user']."' AND lokalitet = '".$_POST['lokalitet']."' GROUP BY asa"; $sql = mysqli_query ($conn, $sSql));
Ja, det virker. Der er ingen mysqli_error. Det eneste problem er at "lokalitet" er tom:
SQL: SELECT asa, COUNT(asa) AS antal FROM erfaring WHERE user = 'XXX' AND lokalitet = '' GROUP BY asa Error:
Det må være et eller andet med at indholdet af en $_POST ikke kan ses af den stump kode jeg includerer, for det virker jo fint i "hovedfilen", hvis du forstår hvad jeg mener; Jeg kan godt bruge
Hvis $_POST['lokalitet'] ikke indeholder noget i den kode, du viser ovenfor, er det fordi, du ikke sender den. Koden ovenfor skal kunne se den, hvis den er til stede i request'en =)
Nu er jeg med. Det bliver sgu lidt langhåret, for valgmulighederne i min select-box hentes fra databasen:
$query = mysqli_query ($conn, "SELECT lokalitet, COUNT(lokalitet) AS antal FROM erfaring WHERE user = '$_SESSION[user]' AND lokalitet != '' GROUP BY lokalitet"); echo "<select name=lokalitet onchange='this.form.submit()'>"; echo "<option value=''>Alle</option>"; while($nt=mysqli_fetch_array($query)){ echo "<option value=$nt[lokalitet]>$nt[lokalitet] ($nt[antal])</option>"; } echo "</select>";
Nå, jeg kigger på det. Du skal have tusind tak for hjælpen. Sender du et svar så du kan få dine velfortjente point?
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.