Avatar billede hcthorsen Praktikant
12. september 2009 - 22:53 Der 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?
Avatar billede olebole Juniormester
13. september 2009 - 14:17 #1
<ole>

Jeg er ikke sikker på, jeg forstår, hvad du vil  =)

/mvh
</bole>
Avatar billede hcthorsen Praktikant
13. september 2009 - 14:31 #2
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.
Avatar billede olebole Juniormester
13. september 2009 - 14:47 #3
Så er det nok dette, du skal bruge:

<select onchange="this.form.submit()">


- selvfølgelig forudsat, at din select ligger i en form  =)
Avatar billede hcthorsen Praktikant
13. september 2009 - 15:10 #4
Mit barn er vågnet, så jeg får ikke lige tid til at kigge på det nu. Vender tilbage...
Avatar billede olebole Juniormester
13. september 2009 - 15:17 #5
Stik dog ungen en flad! Schhh ... far koder!  ;D

Du tjekker det bare, når du får tid  ;o)
Avatar billede hcthorsen Praktikant
13. september 2009 - 21:03 #6
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:-)
Avatar billede olebole Juniormester
13. september 2009 - 21:36 #7
Prøv:


$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());

Avatar billede olebole Juniormester
13. september 2009 - 21:37 #8
Njaarrhhhh ...

$sql = mysqli_query ($conn, $sSql) or die ("SQL: ".$sSql."<hr>".mysqli_error());
Avatar billede olebole Juniormester
13. september 2009 - 21:39 #9
- men hvorfor bruger du ikke prepared statements, når du i forvejen bruger mysqli? Så ville du være sikret mod SQL-injection:
    http://dk2.php.net/manual/en/mysqli-stmt.prepare.php
Avatar billede hcthorsen Praktikant
13. september 2009 - 22:40 #10
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"?
Avatar billede olebole Juniormester
13. september 2009 - 23:15 #11
Så kan du vel noget i retning af:


$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));

if (mysqli_errno()) {
    $fp = fopen("log.txt", "a");
    fwrite("SQL: ".$sSql."\r\nError: ".mysqli_error()."\r\n====\r\n");
    fclose($fp);
}

Avatar billede olebole Juniormester
13. september 2009 - 23:15 #12
Ups ...

fwrite($fp, "SQL: ".$sSql."\r\nError: ".mysqli_error()."\r\n====\r\n");
Avatar billede hcthorsen Praktikant
14. september 2009 - 10:18 #13
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

print $_POST[lokalitet];

i "hovedfilen".
Avatar billede olebole Juniormester
14. september 2009 - 10:30 #14
Det er vel ikke fordi, du har udeladt navnet på selct'en:

<select name="lokalitet" onchange="this.form.submit()">
Avatar billede hcthorsen Praktikant
14. september 2009 - 10:38 #15
Nope, desværre.
Avatar billede hcthorsen Praktikant
14. september 2009 - 11:52 #16
Problemet ligger på en eller anden måde i, at $_POST ikke "kan ses" i pie_asa.php, som kaldes med

<img src="images/pie_asa.php">

Jeg kan sgu ikke lige gennemskue hvorfor det går galt.
Avatar billede olebole Juniormester
14. september 2009 - 12:26 #17
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  =)

Men hvis du kalder scriptet med:

<img src="images/pie_asa.php">


- poster du jo intet til det  =)
Avatar billede olebole Juniormester
14. september 2009 - 12:28 #18
Mon ikke, du skal bruge:

<img src="images/pie_asa.php?lokalitet=blabla">


Så vil $_GET['lokalitet'] indeholde blabla
Avatar billede hcthorsen Praktikant
14. september 2009 - 12:43 #19
OK, har fået det til at virke med følgende

<img src="images/pie_asa.php?lokalitet=<?php echo $_POST['lokalitet'];?>">

hvorefter jeg bruger $_GET['lokalitet']. Det er jo noget klodset. Er det virkelig nødvendigt.
Avatar billede hcthorsen Praktikant
14. september 2009 - 12:45 #20
Jeg vender tilbage til et af mine tidligere spørgsmål:

Kan man lave det sådan, at mit valg i select-boxen forbliver "selected" efter at siden er reloaded?
Avatar billede olebole Juniormester
14. september 2009 - 12:54 #21
Hvad 'klodset' skulle der være i det? Det er da lige præcis efter bogen - og sådan som teknologierne er indrettet  =)

Ja, på serveren sætter du selected="selected" på den ønskede option. Så er den valgt, når select'en renderes i browseren
Avatar billede hcthorsen Praktikant
14. september 2009 - 13:01 #22
Jeg er nok lidt tung i det, men den sidste der kræver lidt mere forklaring. Hvordan sætter jeg selected="selected" på serveren (kode-eksempel).
Avatar billede olebole Juniormester
14. september 2009 - 13:38 #23
Det kan jeg af indlysende grunde ikke have nogen idé om, men du skal ende op med noget à la:


<select onchange="this.form.submit()">
    <option value="v_1">Valg #1</option>
    <option value="v_2">Valg #2</option>
    <option value="v_3" selected="selected">Valg #3</option>
    <option value="v_4">Valg #4</option>
</select>



Det er formodentlig noget med en løkke og en if-sætning
Avatar billede hcthorsen Praktikant
14. september 2009 - 13:52 #24
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?
Avatar billede hcthorsen Praktikant
14. september 2009 - 14:05 #25
Det kan sikkert laves kønnere, men dette her virker:

$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)){
if ($nt[lokalitet]==$_POST['lokalitet']){
echo "<option value=$nt[lokalitet] selected='selected'>$nt[lokalitet]</option>";
}
else{
echo "<option value=$nt[lokalitet]>$nt[lokalitet] ($nt[antal])</option>";
}
}
echo "</select>;
Avatar billede olebole Juniormester
14. september 2009 - 14:07 #26
Måske med en bette spytkrølle - men ikke decideret langhåret  ;o)


while($nt=mysqli_fetch_array($query)){
    $sel = $nt['lokalitet']==$_GET['lokalitet'] ? ' selected="selected"' : '';
    echo "<option value=$nt[lokalitet]".$sel.">$nt[lokalitet] ($nt[antal])</option>";
}

Avatar billede olebole Juniormester
14. september 2009 - 14:13 #27
Præcis! Vi skrev vist samtidigt ... og jeg fik fejlagtgig brugt $_GET i stedet for $_POST  =)
Avatar billede hcthorsen Praktikant
14. september 2009 - 14:17 #28
Ja, det var noget mere elegant. Så kan jeg vist snart ikke finde på mere:-)
Avatar billede hcthorsen Praktikant
14. september 2009 - 15:01 #29
Sender du et svar. Endnu engang tak for hjælpen.
Avatar billede olebole Juniormester
14. september 2009 - 15:24 #30
Selvtak  ;o)
Avatar billede olebole Juniormester
15. september 2009 - 13:34 #31
- og tak for points  =)
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