Problem bei query

spikaner

Quereinsteiger @ php
Ich hab mir für mein kleines Projekt folgendes zusammengebastellt.
PHP:
$query = "
SELECT 
  modul1,
  modul2,
  modul3,
  modul4,
  modul5,
  modul6,
  modul7,
  modul8,
  modul9,
  modul10,
  modul11,
  modul12,
  modul13,
  modul14,
  modul15,
  modul16
FROM 
  benutzerdaten 
WHERE 
  Id 
like 
'".$_SESSION["user_id"]."'";
$erg = mysql_query($query);
$modul = mysql_fetch_array($erg);
for($e=1; $e <= 16; $e++)
{
   echo $modul["modul$e"]; // Testausgabe
   If($modul["modul$e"] < $_SESSION["user_modulemax"])
    {
         If($modul["modul$e"] == '0')
        {
            $query1 = "UPDATE benutzerdaten SET '".$modul["modul$e"]."' = '1' WHERE Id = '".$_SESSION["user_id"]."'";
            mysql_query($query1) or die('query fehlgeschlagen'); 
        }
    }
    If($modul["modul$e"] > $_SESSION["user_modulemax"])
    {
        If($modul["modul$e"] == '1')
        {
            $query1 = "UPDATE benutzerdaten SET '".$modul["modul$e"]."' = '0' WHERE Id = '".$_SESSION["user_id"]."'";
            mysql_query($query1) or die('query fehlgeschlagen'); 
        }
    }
}
Nur bekomme ich immer ein query fehlgeschlagen, hat jemand eine Idee wo der Fehler liegt ?

mfg Spikaner
 
Mit mysql_error() statt "or die" könnte man den Fehler sicher besser eingrenzen.
Oder: Lass dir den Query ausgeben, und kopiere das ganze in PhpMyAdmin und schau was passiert. Die Fehlermeldungen dort sind nämlich auch recht hilfreich.
 
Hier die Fehlermeldung scheint an der Variable modul zu liegen.
01064: 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 ''0' = '1' WHERE Id = '1'' at line 1
mfg Spikaner
 
Hab jetzt folgenden ansatz
PHP:
for($e=0; $e <= 15; $e++)
{
$f = $e + 1;
    echo $modul["modul$f"];
echo "<br>"; // Testausgabe
    If(($f - 1) < $_SESSION["user_modulemax"])
    {
         If($modul["modul$f"] == '0')
        {
            $neu = 'modul'.$f;
echo $neu;
echo "<br>";
            $query1 = "UPDATE benutzerdaten SET ".$neu." = 1 WHERE Id = ".$_SESSION["user_id"]."";
            mysql_query($query1); // or die('query fehlgeschlagen');
echo mysql_errno() . ": " . mysql_error() . "\n"; 
        }
    }
    elseif(($f + 1) >= $_SESSION["user_modulemax"])
    {
        If($modul["modul$f"] == '1')
        {
            $neu = 'modul'.$f;
echo $neu;
echo "<br>";
            $query1 = "UPDATE benutzerdaten SET ".$neu." = 0 WHERE Id = ".$_SESSION["user_id"]."";
            mysql_query($query1); // or die('query fehlgeschlagen');
echo mysql_errno() . ": " . mysql_error() . "\n"; 
        }
    }
}
wenn jetzt aber $_SESSION["user_modulemax"] z.B. 3 ist bekomme ich folgende ausgabe / einträge
Code:
modul1
0: 0
modul2
0: 1
1
modul4
0: 1
modul5
0: 1
modul6
0: 1
modul7
0: 1
modul8
0: 1
modul9
0: 1
modul10
Wie kann ich das beheben ?

mfg Spikaner
 
Zuletzt bearbeitet:
Die Ausgabe kommt ja, weil du in jedem Durchlauf mysql_error() dir ausgeben lässt:
PHP:
echo mysql_errno() . ": " . mysql_error() . "\n";

Stattdessen könntst du dir die Fehlermeldung nur zeigen lassen, wenn auch ein Fehler vorliegt, beispielsweise:
PHP:
            if( !mysql_query($query1) )
            {
                echo mysql_errno() . ": " . mysql_error() . "\n"; 
            }
 
Der sql fehler ist weg aber der db eintrag ist falsch
wo 1 1 1 0 0 0 0 usw herauskommen sollte kommt
1 1 0 0 0 0 usw heraus

mfg spikaner
 
Habs... aber geht das auch anders ? kürzer..
PHP:
for($e=0; $e <= 15; $e++)
{
$f = $e + 1;  // könnte man sich bei ner anständigen for auch sparen 
    If(($f - 1) < $_SESSION["user_modulemax"])
    {
         If($modul["modul$f"] == '0')
        {
            $neu = 'modul'.$f;
            $query1 = "UPDATE benutzerdaten SET ".$neu." = 1 WHERE Id = ".$_SESSION["user_id"]."";
            mysql_query($query1); // or die('query fehlgeschlagen');
        }
    }
    elseif($f >= $_SESSION["user_modulemax"])
    {
        If($modul["modul$f"] == '1')
        {
            $neu = 'modul'.$f;
            $query1 = "UPDATE benutzerdaten SET ".$neu." = 0 WHERE Id = ".$_SESSION["user_id"]."";
            mysql_query($query1); // or die('query fehlgeschlagen');
        }
    }
}

mfg Spikaner
 
Kürzer:
PHP:
for( $i = 1; $i < 16; $i++ )
{
    if( $i < $_SESSION['user_modulemax']
        && $modul['modul'.$i] == '0' )
    {
        $value = 1;
    }
    elseif( $i >= $_SESSION['user_modulemax']
        && $modul['modul'.$i] == '1' )
    {
        $value = 0;
    }
    $query = 'UPDATE `benutzerdaten` SET `modul'.$i.'` = '.$value.' WHERE `Id` = '.$_SESSION['user_id'];
    if( !mysql_query( $query ) )
    {
        echo mysql_error();
    }
}
 
Zurück