Avatar billede heavybreezer Nybegynder
29. juli 2009 - 21:55 Der er 10 kommentarer

Gemme checkbox indhold i mysql med php

Hej Eksperter,

Jeg får på en side udskrevet et variabelt antal checkboxe, svarende til et antal emner i min mysql database.

Jeg har brug for at oprette en formel, som gemmer værdien (kryds, eller ej) i databasen.

Hvordan kunne denne kode se ud ?
Avatar billede repox Seniormester
29. juli 2009 - 22:16 #1
Det afhænger jo af hvordan du skriver dine variabelt antal checkboxe ud? Vi gider ikke sidde og gætte.
Avatar billede heavybreezer Nybegynder
29. juli 2009 - 22:46 #2
Sådan skrives de ud:

$query = mysql_query("SELECT * FROM products_description WHERE language_id='5' order by products_id DESC")  or print mysql_error();


while($r = mysql_fetch_array($query)) {
$navn = $r["products_name"];
$levering = $r["levering"];
$id = $r["products_id"];


if ($levering=="1"){
    $levering_output=" checked='checked' ";
    } else{
        $levering_output="";       
        }



echo "<tr>";
echo "<td>".$navn."</td>";
echo "<td width='50' align='center'><input  name='tool[".$id."]' type='".checkbox."'".$levering_output." value=".$id."></td>";
echo "</tr>";




}
Avatar billede repox Seniormester
29. juli 2009 - 23:13 #3
$tool = $_POST["tool"];

if(count($tool) > 0)
{
    foreach($tool as $key => $value)
    {
        $key = (int)$key;
        $sql = "UPDATE tabel SET checkboxStatus='checked' WHERE checkboxId = ".$key;
        mysql_query($sql);
    }
}
Avatar billede olebole Juniormester
30. juli 2009 - 11:30 #4
<ole>

Det er nok ikke hensigtsmæssigt at spilde 7 tegn, hvergang man vil angive en checked kontrol. Det må kunne klares med et enkelt  ;o)

Derudover kunne det lyde, som om bitshifting ville være en brugbar metode, men det kommer an på, hvordan det skal anvendes

/mvh
</bole>
Avatar billede repox Seniormester
30. juli 2009 - 11:38 #5
#4
Hvilke syv tegn mener du der spilde?

Jeg kunne godt tænke mig at høre mere om hvordan du vil benytte bitshifting til at løse dette; gerne med et eksempel på hvordan du vil gøre det (også selvom det måske ikke er relevant for løsningen), så kunne jeg jo muligvis lære noget nyt :)
Avatar billede olebole Juniormester
30. juli 2009 - 12:32 #6
De 7 tegn er "checked" - og de kan f.eks. erstattes af "1" eller "0" for "checked" og "unchecked" - eller informationen kan gemmes i et boolean felt. Det giver så godt nok kun et 'spild' på 6 tegn ... men alligevel  ;o)

Du kan bruge bitshifting på forskellig måde. Én af dem er:

<form action="" method="post">
<input type="hidden" name="contxt" value="testBitShift">
<p>
    <input type="checkbox" name="check[]" value="0">
    <input type="checkbox" name="check[]" value="1">
    <input type="checkbox" name="check[]" value="2">
    <input type="checkbox" name="check[]" value="3">
    <input type="checkbox" name="check[]" value="4">
    <input type="checkbox" name="check[]" value="5">
</p>

<p><button type="submit">TEST</button></p>
</form>

- med tilhørende PHP:

<?php
if (isset($_POST["contxt"]) && $_POST["contxt"]=="testBitShift") {
    $num = 1;
    foreach ($_POST["check"] as $val) {
        $num += 1<<$val;
    }
    // Indsæt $num i DB her
}
?>

Når du så hiver tallet $num ud af databasen og vil tjekke, om den checkbox med værdien 4 var sat, skriver du:

if ($num & (1<<4)) print "Checkbox'en 4 var sat";
Avatar billede olebole Juniormester
30. juli 2009 - 12:33 #7
Avatar billede olebole Juniormester
30. juli 2009 - 12:46 #8
Ups ... $num skal naturligvis starte med at være 0:

<?php
if (isset($_POST["contxt"]) && $_POST["contxt"]=="testBitShift") {
    $num = 0;
    foreach ($_POST["check"] as $val) {
        $num += 1<<$val;
    }
    // Indsæt $num i DB her
}
?>
Avatar billede repox Seniormester
30. juli 2009 - 14:00 #9
Ahh, ja, okay... på den måde. :) Ganske interessant læsning; jeg takker :)
Avatar billede olebole Juniormester
30. juli 2009 - 14:14 #10
Selvtak. På denne måde kan du faktisk gemme omkring 30 checkbox'e i ét felt (af typen unsigned Integer)  ;o)
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

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