Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 11:42 Der er 17 kommentarer og
1 løsning

gemme og hente checkbox status

Hej

Jeg har en lille side hvor jeg har 16 checkboxe i en form, jeg vil gerne have så jeg kan gemme om de er checked eller ej i en .txt fil, og så at jeg kan når jeg åbner siden igen se det samme således at hvis jeg nu sætter kryds i de første 4 så gemmer den det i filen og derefter når jeg så åbner siden igen så er der stadig kryds i de første 4 for det henter den ind fra filen... kan det lade sig gøre?

med venlig hilsen
Brian
Avatar billede Slettet bruger
11. marts 2006 - 12:00 #1
Ja, det kan det godt - men er det noget du vil have der skal laves for dig? :)

Hvis du er i gang, så fortæl hvor du går i stå, måske fulgt af noget af din kode, så skal vi se på det :)
Avatar billede gizmo-gizmo Nybegynder
11. marts 2006 - 12:06 #2
Jeg har nogle ideer. Lav checkboksene på denne måde:

<input type="checkbox" name="box[]" value="valg1"> Valg 1 <br>
<input type="checkbox" name="box[]" value="valg2"> Valg 2 <br>
.....

Det smart er så, at du kan få alle de valgte værdier dirkete i et array:
$ar = $_POST['box']; //$ar er et array med alle værdier

Hvis man vil gemme array'et i en tekstfil kan man evt. lave en "serialize":
$indhold = serialize($ar);
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:19 #3
function create($lname, $i, $file) {
if (!$file) {
    $file = "1.txt";
}

$lines = file('./mappe/' . $file);
$talx = $lines[$i];


echo "<input type='checkbox' value='$lname' name='$talx'>"
}


echo "<form action='". $_SERVER["PHP_SELF"] . "' method='POST'>\n"
<div class='box_pos'>
<table border='0' cellpadding='0' cellspacing='0' width='500' height='400' class='std'>
<tr><td>
<?php
echo create('lampl1', '0', $filnavn);
echo "</td><td>\n";
echo create('lampl2', '1', $filnavn);
echo "</td><td>\n";
echo create('lampl3', '2', $filnavn);
echo "</td><td>\n";
echo create('lampl4', '3', $filnavn);
echo "</td></tr>\n";
echo "<tr><td>\n";
echo create('lampl5', '4', $filnavn);
echo "</td><td>\n";
echo create('lampl6', '5', $filnavn);
echo "</td><td>\n";
echo create('lampl7', '6', $filnavn);
echo "</td><td>\n";
echo create('lampl8', '7', $filnavn);
echo "</td></tr>\n";
echo "<tr><td>\n";
echo create('lampl9', '8', $filnavn);
echo "</td><td>\n";
echo create('lampl10', '9', $filnavn);
echo "</td><td>\n";
echo create('lampl11', '10', $filnavn);
echo "</td><td>\n";
echo create('lampl12', '11', $filnavn);
echo "</td></tr>\n";
echo "<tr><td>\n";
echo create('lampl13', '12', $filnavn);
echo "</td><td>\n";
echo create('lampl14', '13', $filnavn);
echo "</td><td>\n";
echo create('lampl15', '14', $filnavn);
echo "</td><td>\n";
echo create('lampl16', '15', $filnavn);
echo "</td></tr>\n";
echo "</table>\n";
echo "</div>\n";
echo "</form>";



Det er noget i den her retning jeg er nået frem til...
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:20 #4
function skriv_txtfil2($mappe, $filnavn2)
{
$lines = file('./lamper/' . $filnavn2);

$array = array(
$_REQUEST['lampl1'],
$_REQUEST['lampl2'],
$_REQUEST['lampl3'],
$_REQUEST['lampl4'],
$_REQUEST['lampl5'],
$_REQUEST['lampl6'],
$_REQUEST['lampl7'],
$_REQUEST['lampl8'],
$_REQUEST['lampl9'],
$_REQUEST['lampl10'],
$_REQUEST['lampl11'],
$_REQUEST['lampl12'],
$_REQUEST['lampl13'],
$_REQUEST['lampl14'],
$_REQUEST['lampl15'],
$_REQUEST['lampl16'],
);
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:20 #5
hov der skulle lige det hele med:
function skriv_txtfil2($mappe, $filnavn2)
{
$lines = file('./lamper/' . $filnavn2);

$array = array(
$_REQUEST['lampl1'],
$_REQUEST['lampl2'],
$_REQUEST['lampl3'],
$_REQUEST['lampl4'],
$_REQUEST['lampl5'],
$_REQUEST['lampl6'],
$_REQUEST['lampl7'],
$_REQUEST['lampl8'],
$_REQUEST['lampl9'],
$_REQUEST['lampl10'],
$_REQUEST['lampl11'],
$_REQUEST['lampl12'],
$_REQUEST['lampl13'],
$_REQUEST['lampl14'],
$_REQUEST['lampl15'],
$_REQUEST['lampl16'],
);

$lines = implode("\r\n", $array);
    $mappe = ("" == $mappe)? "." : $mappe;
    $fh = fopen($mappe . $filnavn2, "w+");
    fwrite($fh, $lines);
    fclose($fh);
}
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:21 #6
Den kan så også godt skrive det ned i filen
men jeg kan ikke rigtig hente det ind igen... jeg forestillede mig at der skulle stå 1 eller 0 i tekstfilen efter om den var "checked" eller ej... default skulle være checked
Avatar billede gizmo-gizmo Nybegynder
11. marts 2006 - 12:23 #7
Ej, det må kunne laves smartere, øjeblik.
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:23 #8
Jeg har heller ikke fået det helt sat sammen endnu ... så jeg ved faktisk ikke om koden der er her virker... det eneste jeg ved der virker er det at jeg kan skrive dem ned i filen ... det er det med at hente dem ind og så vise om de er checked eller ej der giver problemer... + den kommer med en notice om at de ikke er der eller sådan noget
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:24 #9
ok :)
Avatar billede gizmo-gizmo Nybegynder
11. marts 2006 - 12:40 #10
Håber det er det her du efterspørger:

<?
if (isset($_GET['post'])) {
    $fh = fopen("test.txt", "w");
    fwrite($fh, serialize($_POST['box']));
    fclose($fh);
}

$ar = (array) unserialize(implode("", file("test.txt")));

function check($var) { 
    if (in_array($var, $GLOBALS['ar'])) echo "checked";
}

?>

<form action="?post=1" method="post">
    <input type="checkbox" name="box[]" value="valg1" <?check("valg1")?>> Valg 1 <br>
    <input type="checkbox" name="box[]" value="valg2" <?check("valg2")?>> Valg 2 <p>
    <input type="submit" value=" gem ">
</form>
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:46 #11
Det virker rigtig godt. ville dog godt have haft at den smed dem med 1 på hver linie og uden alt det andet i .txt-filen. Det er nemlig fordi jeg læser det fra et C-program jeg har også ... og den tager det linie for linie.. det ville være træls også at skulle skrive den om ... men det skulle da være til hvis det var ! ... tusind tak ... so far.

Er det noget du kan lave det med 1 linie pr checkbox? eller noget... det virker i hver tilfælde
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:48 #12
et andet lidt vigtigere problem, er at hvis der ikke er nogen valgt, så giver den


Notice: Undefined index: box in C:\Program Files\Apache Group\Apache2\htdocs\test.php on line 4
præcis ligesom min egen kode også gjorde ...
Avatar billede gizmo-gizmo Nybegynder
11. marts 2006 - 12:48 #13
Jeg kan da lige prøve ;)
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 12:54 #14
takker ...
Avatar billede gizmo-gizmo Nybegynder
11. marts 2006 - 12:57 #15
Puha, den fejl hænger sansynligvis sammen med omsætning af PHP på serveren. Prøv er at erstatte $_POST['box'] med $box


Hvad med noget komma-separeret?

<?
if (isset($_GET['post'])) {
    $fh = fopen("test.txt", "w");
    fwrite($fh, implode(",", $_POST['box']));
    fclose($fh);
}

$ar = explode(",", implode("", file("test.txt")));

function check($var) { 
    if (in_array($var, $GLOBALS['ar'])) echo "checked";
}

?>

<form action="?post=1" method="post">
    <input type="checkbox" name="box[]" value="valg1" <?check("valg1")?>> Valg 1 <br>
    <input type="checkbox" name="box[]" value="valg2" <?check("valg2")?>> Valg 2 <p>
    <input type="submit" value=" gem ">
</form>
Avatar billede ferrari_brian Nybegynder
11. marts 2006 - 13:10 #16
det virker fint det sidste du har lavet... så må jeg selv rode med den fejl med hvis der ikke er valgt noget... jeg tror det er når der hentes at det er galt... men prøver at finde ud af det... ellers vender jeg tilbage

tusind tak
Avatar billede gizmo-gizmo Nybegynder
11. marts 2006 - 13:11 #17
Det ingen problem :-)
Avatar billede ferrari_brian Nybegynder
13. marts 2006 - 16:43 #18
løsningen blev radio-buttons til sidst ... for den ville ikke acceptere at de var tomme ... medmindre jeg brugte isset. og så tja... det blev for omfattende i forhold til at have radio-buttons istedet. det skyldtes at der skulle stå andre ting også. det var ikke det eneste der var i formen. men Gizmo-Gizmo's forslag virker fint!
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