Avatar billede jammerlab Nybegynder
06. januar 2007 - 23:37 Der er 29 kommentarer og
2 løsninger

MySQL og checkboxes opdatere

Jeg viser ikke alt koden det burde der ikke være behov for, men se her:

echo "
<tr>
<td><span class=text1>$row[hyttenavn]</span></td>
<td><span class=text1>$row[kontaktperson]</span></td>
<td><span class=text1>$row[email]</span></td>
<td><input type=\"checkbox\" name=\"array[]\" value=\"$row[id]\"></td>
</tr>
";

der er checkboxen..

if($_POST['hidden']) {
$tal = count($array);
$i = 0;
while($i <= $tal) {
$i++;
$var = $array[$i];
mysql_query("UPDATE kunder SET tjek='1' WHERE id = $var")or die (mysql_error());
}
}

det er selve opdateringen... den opdatere også fint men den skulle jo også gerne sætte tjek til 0 hvis de ikke var markeret... nogen ideer?
Avatar billede hberg Nybegynder
07. januar 2007 - 01:07 #1
Du kunne jo defaulte "tjek" til at være 0, så er der ingen bekymring om at opdatere det felt. Eller er det noget der skal kunne ændres mange gange frem og tilbage? For så skal der jo en anden løsning på bordet.

Derudover bryder jeg mig ikke om din variabel "array", det er som regel altid bedst at nanvgive variable forskelligt fra indbyggede funktioner/keywords/konstruktorer. Bare et lille stil-tip :)
Avatar billede jammerlab Nybegynder
07. januar 2007 - 01:08 #2
Ja den skal kunne skiftes frem og tilbage alt efter om checkboxen er "checked" :) så vi skal havde lavet updaten om... men hvordan?
Og modtaget omkring det lille tip :P det skal jeg huske
Avatar billede hmortensen Nybegynder
07. januar 2007 - 01:55 #3
Som en nem løsning, kan du lave en update først:
UPDATE kunder SET tjek = 0
Avatar billede coderdk Praktikant
07. januar 2007 - 02:00 #4
hmortensens er den rigtige løsning. Den kan måske optimeres lidt:

$ids = implode( ",", $_POST['array'] );
$sql = "UPDATE kunder SET tjek = 0 WHERE tjek NOT IN ($ids)";
mysql_query( $sql ) or die( mysql_error() );
$sql = "UPDATE kunder SET tjek = 1 WHERE tjek IN ($ids)";
mysql_query( $sql ) or die( mysql_error() );
Avatar billede coderdk Praktikant
07. januar 2007 - 02:00 #5
Evt. løb dem igennem først, så alle id'er er tal, og check at der i det hele taget er noget i array'et ;)
Avatar billede hmortensen Nybegynder
07. januar 2007 - 02:03 #6
WHERE tjek
skal så lige være
WHERE id

;)
Avatar billede coderdk Praktikant
07. januar 2007 - 02:15 #7
Hov, ja :-D
Avatar billede jammerlab Nybegynder
07. januar 2007 - 15:08 #8
Virker fint :) ehm... ja smid et svar begge 2 hehe

- Tak.
Avatar billede hmortensen Nybegynder
07. januar 2007 - 15:41 #9
Det var så lidt :)
Avatar billede jammerlab Nybegynder
07. januar 2007 - 15:57 #10
hov der var lige en enkelt fejl... når jeg prøver at fjerne markeringerne:

$sql = "UPDATE kunder SET tjek = 0 WHERE id NOT IN ($ids)";
mysql_query( $sql ) or die( mysql_error() );
$sql = "UPDATE kunder SET tjek = 1 WHERE id IN ($ids)";
mysql_query( $sql ) or die( mysql_error() );

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

jeg kan ikke lige se fejlen..
Avatar billede coderdk Praktikant
07. januar 2007 - 18:55 #11
Prøv at echo'e $sql ud og se hvad den indeholder ;)
Avatar billede coderdk Praktikant
07. januar 2007 - 18:55 #12
Og et svar :)
Avatar billede jammerlab Nybegynder
07. januar 2007 - 19:31 #13
lavede dem om til:
mysql_query("UPDATE kalender_set SET tjek='0' WHERE id NOT IN ($ids)")or die (mysql_error());
mysql_query("UPDATE kalender_set SET tjek='1' WHERE id IN ($ids)")or die (mysql_error());
men den siger samme fejl
Avatar billede jammerlab Nybegynder
07. januar 2007 - 19:37 #14
Det er dem der laver fejlen... fjerne jeg dem så virker scriptet
Avatar billede jammerlab Nybegynder
07. januar 2007 - 19:55 #15
kan man ikke lave denne kontrol på en anden måde? Uden for mysql stringen?

mysql_query("UPDATE kalender_set SET tjek='0' WHERE id NOT IN $ids");
mysql_query("UPDATE kalender_set SET tjek='1' WHERE id IN $ids");

hvis jeg fjernr () lavr den ikke fejl men det ser heller ikke ud til at den så opdatere dem...
Avatar billede coderdk Praktikant
07. januar 2007 - 20:04 #16
Prøv at echo'e $sql ud og se hvad den indeholder ;)
Avatar billede jammerlab Nybegynder
07. januar 2007 - 20:23 #17
UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)
UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)
UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Avatar billede coderdk Praktikant
07. januar 2007 - 20:29 #18
Erh, det forstår jeg ikke lige, prøv lige at bruge følgende:

$ids = implode( ",", $_POST['array'] );
echo $sql = "UPDATE kunder SET tjek = 0 WHERE id NOT IN ($ids)";
mysql_query( $sql ) or die( mysql_error() );
echo $sql = "UPDATE kunder SET tjek = 1 WHERE id IN ($ids)";
mysql_query( $sql ) or die( mysql_error() );

og skriv hvad den svarer...
Avatar billede jammerlab Nybegynder
07. januar 2007 - 20:30 #19
UPDATE kunder SET tjek = 0 WHERE id NOT IN (2,3,4)UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)

UPDATE kunder SET tjek = 0 WHERE id NOT IN (2,3,4)UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)

UPDATE kunder SET tjek = 0 WHERE id NOT IN (2,3,4)UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Avatar billede coderdk Praktikant
07. januar 2007 - 20:31 #20
Det giver jo ingen menung?! Den gentager SQL'en 3 gange?! Ser koden PRÆCIST ud som jeg postede?
Avatar billede coderdk Praktikant
07. januar 2007 - 20:32 #21
Hov, sorry :) Prøv lige:

$ids = implode( ",", $_POST['array'] );
$sql = "UPDATE kunder SET tjek = 0 WHERE id NOT IN ($ids)";
echo "$sql<br>";
mysql_query( $sql ) or die( mysql_error() );
$sql = "UPDATE kunder SET tjek = 1 WHERE id IN ($ids)";
echo "$sql<br>";
mysql_query( $sql ) or die( mysql_error() );
Avatar billede jammerlab Nybegynder
07. januar 2007 - 21:09 #22
UPDATE kunder SET tjek = 0 WHERE id NOT IN (2,3,4)
UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)

UPDATE kunder SET tjek = 0 WHERE id NOT IN (2,3,4)
UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)

UPDATE kunder SET tjek = 0 WHERE id NOT IN (2,3,4)
UPDATE kunder SET tjek = 1 WHERE id IN (2,3,4)
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Avatar billede jammerlab Nybegynder
07. januar 2007 - 21:09 #23
det er fordi der er checket 3 at den gør det 3 gange
Avatar billede coderdk Praktikant
07. januar 2007 - 21:26 #24
Det skal ikke være i et loop... Hele koden:

if ( isset( $_POST['hidden'] ) )
{
  $ids = implode( ",", $_POST['array'] );
  $sql = "UPDATE kunder SET tjek = 0 WHERE id NOT IN ($ids)";
  mysql_query( $sql ) or die( mysql_error() );
  $sql = "UPDATE kunder SET tjek = 1 WHERE id IN ($ids)";
  mysql_query( $sql ) or die( mysql_error() );
}

Det lader til at du har noget SQL under det, som giver fejlen...
Avatar billede jammerlab Nybegynder
07. januar 2007 - 21:51 #25
Ja sorry jeg troede det var en while loop så jeg kunne smide det sammen med resten af koden som køres sådan her:

if($_POST['hidden']) {
$tal = count($_POST['array']);
$i = 0;
while($i <= $tal) {
$i++;

$var = $_POST['array'][$i];
echo "$var<br>";
$ids = implode( ",", $_POST['array'] );
$sql = "UPDATE kunder SET tjek = 0 WHERE id NOT IN ($ids)";
echo "$sql<br>";
mysql_query( $sql ) or die( mysql_error() );
$sql = "UPDATE kunder SET tjek = 1 WHERE id IN ($ids)";
echo "$sql<br>";
mysql_query( $sql ) or die( mysql_error() );
$query = mysql_query("SELECT id FROM kunder WHERE id = $var")or die (mysql_error());
$row = mysql_fetch_array($query);

$from = "ronnie@kalendersystem.dk"; //din egen mail :-)
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$subject = $_POST['email_top'];
$body = "Kære $row[kontaktperson] ...<br>$_POST[email_text]";

$smtp = new smtp_client;
$smtp -> smtp_client();
echo "$row[email]<br>";
$smtp->email("$from", "$row[email]", "$row[kontaktperson]", "$headers", "$subject", "$body");



}
}
Avatar billede coderdk Praktikant
07. januar 2007 - 22:14 #26
Prøv dette

<?php

    if( isset( $_POST['hidden'] ) )
    {
        $ids = implode( ",", $_POST['array'] );
        $sql = "UPDATE kunder SET tjek = 0 WHERE id NOT IN ($ids)";
        mysql_query( $sql ) or die( mysql_error() );
        $sql = "UPDATE kunder SET tjek = 1 WHERE id IN ($ids)";
        mysql_query( $sql ) or die( mysql_error() );
        $sql = "SELECT id FROM kunder WHERE id IN ($ids)";
        $query = mysql_query( $sql ) or die (mysql_error());
        $from = "ronnie@kalendersystem.dk"; //din egen mail :-)
        $headers  = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        while ( $row = mysql_fetch_assoc( $query ) )
        {
            $subject = $_POST['email_top'];
            $body = "Kære $row[kontaktperson] ...<br>$_POST[email_text]";
            $smtp = new smtp_client;
            $smtp -> smtp_client();
            $smtp->email("$from", "$row[email]", "$row[kontaktperson]", "$headers", "$subject", "$body");
        }
    }

?>
Avatar billede jammerlab Nybegynder
07. januar 2007 - 22:31 #27
Yay :) Takker!
Avatar billede jammerlab Nybegynder
07. januar 2007 - 22:41 #28
nårh hehe så var jeg stadig for tidligt ude... den laver fejlen igen når der ikke er en checkbox der er krydset af :P
Avatar billede coderdk Praktikant
07. januar 2007 - 23:00 #29
Det fixer vi da bare ;) Her er en lidt mere optimeret version, som tager højde for det:

<?php

    if( isset( $_POST['hidden'] ) )
    {
        if ( count( $_POST['array'] ) == 0 )
        {
            $sql = "UPDATE kunder SET tjek = 0 WHERE tjek = 1";
            mysql_query( $sql ) or die( mysql_error() );
        }
        else
        {
            $ids = implode( ",", $_POST['array'] );
            $sql = "UPDATE kunder SET tjek = 0 WHERE tjek = 1 AND id NOT IN ($ids)";
            mysql_query( $sql ) or die( mysql_error() );
            $sql = "UPDATE kunder SET tjek = 1 WHERE tjek = 0 AND id IN ($ids)";
            mysql_query( $sql ) or die( mysql_error() );
            $sql = "SELECT id FROM kunder WHERE id IN ($ids)";
            $query = mysql_query( $sql ) or die (mysql_error());
            $from = "ronnie@kalendersystem.dk"; //din egen mail :-)
            $headers  = "MIME-Version: 1.0\r\n";
            $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
            while ( $row = mysql_fetch_assoc( $query ) )
            {
                $subject = $_POST['email_top'];
                $body = "Kære $row[kontaktperson] ...<br>$_POST[email_text]";
                $smtp = new smtp_client;
                $smtp -> smtp_client();
                $smtp->email("$from", "$row[email]", "$row[kontaktperson]", "$headers", "$subject", "$body");
            }
        }
    }

?>
Avatar billede coderdk Praktikant
07. januar 2007 - 23:01 #30
Det er muligt at

if ( count( $_POST['array'] ) == 0 )

skal være:

if ( !isset( $_POST['array'] ) || !is_array( $_POST['array'] ) || count( $_POST['array'] ) == 0 )
Avatar billede jammerlab Nybegynder
07. januar 2007 - 23:14 #31
Ser ud til at virke med if ( count( $_POST['array'] ) == 0 )

så siger jeg mange tak herfra! :)
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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Data Engineers til bekæmpelse af skatteunddragelse

Sentia Denmark A/S

Service Delivery Manager

Udviklings- og Forenklingsstyrelsen

Controller til økonomi og compliance

Udviklings- og Forenklingsstyrelsen

Erfaren teamleder til årsopgørelsen