btk- Skrevet 14. mars 2010 Del Skrevet 14. mars 2010 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
Warz Skrevet 14. mars 2010 Del Skrevet 14. mars 2010 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
btk- Skrevet 15. mars 2010 Forfatter Del Skrevet 15. mars 2010 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
trygveaa Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 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
btk- Skrevet 15. mars 2010 Forfatter Del Skrevet 15. mars 2010 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
nomore Skrevet 15. mars 2010 Del Skrevet 15. mars 2010 Det er fordi $_POST['checkbox'] inneholder et array, som du så kopierer til $verdi. $verdi er da et array. Prøv echo $verdi[0], $verdi[1] osv i stede for. Lenke til kommentar
btk- Skrevet 15. mars 2010 Forfatter Del Skrevet 15. mars 2010 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
trygveaa Skrevet 17. mars 2010 Del Skrevet 17. mars 2010 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
Crowly Skrevet 17. mars 2010 Del Skrevet 17. mars 2010 (endret) 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 17. mars 2010 av Crowly Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå