Gå til innhold

Hente data fra dynamiske checkboxer


Anbefalte innlegg

Hei!

 

Jeg har en kode som lager en dynamisk checkboks for hver rad jeg skriver fra databasen.

Under alle checkboksene er det en Lagre-knapp som skal oppdatere databasen om disse er haket av eller ikke (gir en verdi hvis de er haket av).

 

Checkboksene blir laget i en while-løkke, noe som gjør at jeg ikke klarer å få hentet ut dataen på en fornuftig måte.

 

Noen innspill?

Lenke til kommentar
Videoannonse
Annonse

Det kommer jo veldig an på hvordan dette er satt opp. Kanskje du kan gi eksempler? Men uten å vite mer vil jeg tro den beste løsningen er å bruke en identifikator (id?) som du har i databasen som value på hver og en checkbox. Dermed kan du oppdatere databasen basert på hvilke id'er som har blitt valgt...

Lenke til kommentar

Checkboksene trenger bare å gi verdien 'Ja' hvis de er krysset av.

Problemet oppstår i å formidle dette videre. Her er koden:

 

$query		= "SELECT overskrift, forfatter, id, forside, topp FROM nyheter ORDER BY id DESC";
$result 	= mysql_query($query);
$num 		= mysql_num_rows($result);
$j			= 0;
while ($j < $num) {
			$id			= mysql_result($result,$j,"id");
			$overskrift	= mysql_result($result,$j,"overskrift");
			$forfatter	= mysql_result($result,$j,"forfatter");
			$topp		= mysql_result($result,$j,"topp");
			$forside	= mysql_result($result,$j,"forside");

if ($j & 1) { ?> <div class="liste3"> <? } else { ?> <div class="liste4"> <? } ?>
<table width="700" border="0">
<tr>
<td width="500"><? echo "$overskrift"; ?></td>
<td width="50" align="center">
<input type="radio" name="RadioGroup1" value="<? echo "$id";?>" id="RadioGroup1_<? $y = $j+1; echo "$y";?>" <? if ($topp == 'Ja') { ?> checked="checked"   <? } ?>/>
</td>
<td width="50" align="center">
<input type="checkbox" 
<? if ($forside == 'Ja') { ?>  checked="checked" <? } ?> name="checkbox<? echo "$j";?>" value="<? echo "$id";?>" id="<? echo "$id";?>"/></td>

 

Under dette er det en Lagre-knapp, da skal den gå gjennom alle checkboksene og se hvilke som er haket av. Dette er for hvilke nyheter som skal vises på forsiden.

Problemet er at jeg må vite hvilken nyhetsid som det er haket av for (altså må navnet på checkboksen kunne kobles mot en nyhet.)

Lenke til kommentar

Legg alle checkboxene i et array, dvs. bruk name="checkbox[0]" for første checkbox, og bytt ut 0 med 1 for neste osv. Deretter er det bare å loope gjennom $_POST['checkbox'] (eller $_GET). Elementene som er der er checked.

 

btw: det er svært lite vits å putte variablene inni en string, altså "", når du skriver de ut med echo.

Lenke til kommentar

Hei.

 

Har skiftet navn på checkboxen til 'checkbox[$j]', noe som gir dem navnet checkbox[0], checkbox[1], etc.

 

<input type="checkbox" <? if ($forside == 'Ja') { ?>  checked="checked" <? } ?> name="checkbox[$j]" value="<? echo "$id";?>" />

 

Når jeg prøver å hente ut dataen som du foreslo, så får jeg bare Array som resultat.

 

$verdi		= $_POST['checkbox'];
echo $verdi; }

 

Noen flere tips? :)

Lenke til kommentar

while ($j < $num) 
{ $verdi	= $_POST['checkbox'];
 echo "$verdi[$j]"; $j++; } 

 

Jeg er ikke helt sikker på at jeg har oppfattet dette med array rett :)

Dette gir meg heller ingen resultat, så jeg går ut i fra at det er feil.

while-løkka er laget med samme kriterier som checkboksene blir laget fra, så den skal gi nøyaktig samme verdier.

 

Er det feil i koden noe sted?

Lenke til kommentar

Arrays er ganske grunnleggende programmering, så det lønner seg vel å lære seg det skikkelig med en gang.

 

Hvis $j = 0 og $num er samme antall som totalt i forrige loop, så burde det funke. Men det er ikke noe poeng å kjøre spørringen til databasen om igjen for å loope gjennom disse verdiene, det blir bare unødvendig. For å loope gjennom alle verdier i et array bruker du foreach($array as $verdi), og bruker $verdi, uten noen index.

 

Det er ikke noe vits å sette $verdi hver gang inne i loopen, siden du gir den samme innhold hver gang. Putt denne utenfor loopen.

Lenke til kommentar

Litt på siden, men det ble også kommentert over. Hvorfor skrive echo "$verdi[$j]"; når det holder med echo $verdi[$j];. Og skal du bruke variabler i strenger så bør du sette de i { }, slik at det er enklere for php å skjønne hvor variabelen begynner og slutter, alternativt bruk konkatinering.

echo $verdi[$j];
echo "Tekst {$verdi[$j]} og mere tekst";
echo "Tekst ".$verdi[$j]." og mere tekst"; // konkatinering

 

Ett greit tips for å sjekke innholdet i arrays under testing er print_r(). For å få det mest mulig lesbart så legg <pre> tager rundt

echo '<pre>';
print_r($_POST); // eller en annen array
echo '</pre>';

Endret av Crowly
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...