Avatar billede doncarnage Nybegynder
22. oktober 2010 - 18:16 Der er 15 kommentarer og
1 løsning

Select option med flere valgmuligheder vha. split-funktionen

Godaften,

Jeg har lavet en dynamisk dropdownmenu for en masse rækker i min tabel i databasen med to valgmuligheder: "Udført" og "Ikke udført". Til denne har jeg tilføjet id'et på den pågældende række i databasen adskilt med et "#", og når man så ændrer i en af dropdown-menuerne opdateres siden automatisk vha. javascript. Det ser ud som her:

-------------------------------------------------------

<?php

      while ($row = mysql_fetch_assoc($query)) {

        echo '<div class="r1">'.$row['time'].'</div>';
    echo '<div class="r2"><a href="todo_vis.php?id='.$row['TodoID'].'" title="'.$row['Text'].'" alt="'.$row['Text'].'">'.$row['Title'].'</a></div>';
    echo '<div class="r3"><select name="todo_status" class="input8" onChange="document.status.submit()">';


      if($row['Status'] == 'Udført') {
          echo '<option value="Udført#'.$row['TodoID'].'" selected="selected">Ja</option>';
      echo '<option value="Ikke udført#'.$row['TodoID'].'">Nej</option>';
      } else if($row['Status'] == 'Ikke udført') {
          echo '<option value="Udført#'.$row['TodoID'].'">Ja</option>';
      echo '<option value="Ikke udført#'.$row['TodoID'].'" selected="selected">Nej</option>';
        }

    echo '</select></div>';
    }
?>

-------------------------------------------------------


Formålet er at værdierne automatisk skal opdateres i databasen når man ændrer i en af dropdown-menuerne...

For at gøre dette har jeg først og fremmest prøvet at få udskrevet de to værdier fra den pågældende dropdown-menu, som man ændrer i vha. dette:

-------------------------------------------------------

<?php

if ($_POST['referer'] == 'todo_updatequick') {

$clean_status = clean($_POST['todo_status']);

list($parent, $parent2) = split( '#', $clean_status);
echo $parent .' (id:'.$parent2.')';

}

?>

-------------------------------------------------------


PROBLEMET
Problemet er bare at når jeg prøver at udskrive værdien som jeg får med, udskriver den kun den SIDSTE række og SIDSTE værdi fra databasen uanset hvilken en af dropdown-menuerne man ændrer i :S I mit tilfælde får jeg derfor hele tiden udskrevet "id nr. 12" og "Udført/Ikke udført" alt afhængigt af hvordan den ser ud i række 12...

Hvordan får jeg skrevet den rigtige værdi fra den "ændrede" dropdown-menu med?
Avatar billede majbom Novice
22. oktober 2010 - 21:41 #1
jeg er ikke helt med på hvad dit problem er, eller hvordan det opstår, men af er der en bestemt grund til at du bruger en select i stedet for checkbox eller radiobuttons? med en select skal brugeren trykke 2 gange, først fold ud og derefter vælge en af de 2 muligheder...
Avatar billede doncarnage Nybegynder
22. oktober 2010 - 21:47 #2
Nej, slet ikke.. Du har ret i at det er nemmere at løse med checkboxe ;)

Men problemet er bare at hvis man trykker på checkbox nr. 5, så henter den værdierne ud fra den sidste checkbox i rækken i stedet for checkbox nr. 5 :/ Håber det er til at forstå ? Ellers kan jeg godt prøve at trække et simpelt eksempel ud og vise..
Avatar billede majbom Novice
22. oktober 2010 - 22:45 #3
jeg vil gerne se det simple eksempel :p
Avatar billede doncarnage Nybegynder
22. oktober 2010 - 23:16 #4
Her er et simpelt eksempel, dog stadig med dropdown-menu (går i gang med at lave checkboxe nu her i stedet)

http://www.valuable.dk/eksperten/select/

Men som du kan se henter den 10 rækker ud fra databasen. Når man så ændrer i én af dropdown-menuerne udskriver den i toppen "Udført" eller "Ikke udført", samt id nr. 10. Her tager den dog UDELUKKENDE ud fra den sidste række i tabellen og det den står på...

Hvordan får jeg gjort så den udskriver værdi fra den man ændrer på i stedet for den sidste i tabellen?


Den simple side på ovenstående URL ser ud som her:
----------------------------------------------------------

<?php
include_once('sql.php');

if ($_POST['referer'] == 'todo_updatequick') {
list($parent, $parent2) = split( '#', $_POST['todo_status']);
echo $parent .' (id:'.$parent2.')';
}
?>

<form action="" method="post" name="status">
<input type="hidden" name="referer" value="todo_updatequick" />

<table border="1" cellpadding="0" cellspacing="0"><tr>

  <?php
    $query = mysql_query("SELECT * FROM test") or die(mysql_error());

      while ($row = mysql_fetch_assoc($query)) {
    echo '<tr><td width="200"><a href="#.php?id='.$row['id'].'">'.$row['title'].'</a></td><td>';
    echo '<select name="todo_status" onChange="document.status.submit()">';

      if($row['status'] == 'Udført') {
          echo '<option value="Udført#'.$row['id'].'" selected="selected">Ja</option>';
      echo '<option value="Ikke udført#'.$row['id'].'">Nej</option>';
      } else if($row['status'] == 'Ikke udført') {
          echo '<option value="Udført#'.$row['id'].'">Ja</option>';
      echo '<option value="Ikke udført#'.$row['id'].'" selected="selected">Nej</option>';
        }
    echo '</td></tr></select><br />';
    }
  ?>

</table>
</form>

----------------------------------------------------------
Avatar billede doncarnage Nybegynder
22. oktober 2010 - 23:32 #5
Jeg har prøvet med checkboxe herinde: http://www.valuable.dk/eksperten/select2/

Det er som om det virker lidt bedre derinde, men det spiller desværre stadig ikke efter hensigten :/ Her ser siden sådan her ud:

----------------------------------------------------------

<?php
include_once('sql.php');

if ($_POST['referer'] == 'todo_updatequick') {
list($parent, $parent2) = split( '#', $_POST['todo_status']);
echo $parent .' (id:'.$parent2.')';
}
?>

<form action="" method="post" name="status">
<input type="hidden" name="referer" value="todo_updatequick" />

<table border="1" cellpadding="0" cellspacing="0"><tr>

  <?php
    $query = mysql_query("SELECT * FROM test") or die(mysql_error());

      while ($row = mysql_fetch_assoc($query)) {
    echo '<tr><td width="200"><a href="#.php?id='.$row['id'].'">'.$row['title'].'</a></td><td>';

      if($row['status'] == 'Udført') {
          echo '<input type="checkbox" value="Udført#'.$row['id'].'" name="todo_status" checked="checked" onClick="document.status.submit()" />';
      } else if($row['status'] == 'Ikke udført') {
      echo '<input type="checkbox" value="Ikke udført#'.$row['id'].'" name="todo_status" onClick="document.status.submit()" />';
        }
    echo '</td></tr><br />';
    }
  ?>

</table>
</form>

----------------------------------------------------------
Avatar billede majbom Novice
24. oktober 2010 - 19:20 #6
alle dine felter hedder det samme: todo_status

jeg ville nok gøre det på en anden måde; når der klikkes på en checkbox, sætter man værdien i et hidden input til 'ikkeudført#3' f.eks. og efter submit aflæses dette felt...
Avatar billede doncarnage Nybegynder
24. oktober 2010 - 19:40 #7
Hvordan vil du sætte den den så i eksemplet jeg har med checkboxe for hvert klik :S?
Avatar billede doncarnage Nybegynder
24. oktober 2010 - 19:52 #8
Den jeg har lavet med checkbox eksemplet virker fint nok hvis jeg fjerner "checked=checked".. Men jeg vil jo gerne have at de er afkrydsede når de er sat til "Udført", så der sidder jeg fast :S
Avatar billede majbom Novice
25. oktober 2010 - 08:58 #9
i starten af formen:
<input type="hidden" name="selectedField" value="">


og i din while:
echo '<input type="checkbox" value="Udført#'.$row['id'].'" name="todo_status" checked="checked"onclick="this.form.selectedField=this.id+'#'+this.checked; document.status.submit()" id="check_'.$row['id'].'" />';


når formen så bliver submittet, har du id og checked-status på den valgte checkbox i $_POST['selectedField']
Avatar billede doncarnage Nybegynder
25. oktober 2010 - 15:19 #10
Får desværre følgende fejl når jeg prøver den:

Parse error: syntax error, unexpected T_ECHO, expecting ',' or ';'
Avatar billede doncarnage Nybegynder
26. oktober 2010 - 02:43 #11
Jeg fandt en anden midlertidig løsning, da jeg havde lidt travlt med opgaven.. Så jeg prøver at kigge på din løsning på et andet tidspunkt når jeg får tid..

Men smid et svar så du kan få points for hjælpen
Avatar billede majbom Novice
26. oktober 2010 - 09:21 #12
hvor får du fejlen?
Avatar billede doncarnage Nybegynder
26. oktober 2010 - 13:30 #13
checked="checked" onclick="this.form.selectedField=this.id+'#'+this.checked; document.status.submit()"

<- Fejlen lå et eller andet sted i ovenstående...
Avatar billede majbom Novice
26. oktober 2010 - 13:53 #14
der er osse noget ged med dine ' og "

kan du ikke poste hele linjen?
Avatar billede doncarnage Nybegynder
26. oktober 2010 - 21:32 #15
Jo naturligvis ;) Jeg prøvede med den du skrev :


echo '<input type="checkbox" value="Udført#'.$row['id'].'" name="todo_status" checked="checked" onclick="this.form.selectedField=this.id+'#'+this.checked; document.status.submit()" id="check_'.$row['id'].'" />';
Avatar billede majbom Novice
27. oktober 2010 - 09:18 #16
echo '<input type="checkbox" value="Udført#'.$row['id'].'" name="todo_status" checked="checked" onclick="this.form.selectedField=this.id+\'#\'+this.checked; document.status.submit()" id="check_'.$row['id'].'" />';


så...
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