Probleme mit UPDATE-Anweisung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit UPDATE-Anweisung

    Hallo an alle,

    ich habe folgendes Problem, vielleicht bin ich auch nur zu blöd den Tippfehler zu finden:

    Ich arbeite gerade daran, neue bestehende Kategorien in meiner DB per Webinterface zu bearbeiten und umbenennen zu können. Meiner Meinung nach ist der Code in Ordnung. Meine Fehlerüberprüfung sagt mir aber aus irgendeinem Grund, dass der Datensatz nicht geändert werden konnte. Die Verbindung zur DB wird in einer separaten include-Datei hergestellt. Da diese einwandfrei arbeitet habe ich sie nicht mitgepostet.
    Hoffe ihr könnt mir helfen!

    Gruß Björn

    Hier noch der Code. Es sind drei Dateien:

    Datei1: kat_bear_1.php (Auflistung der vorhandenen Kategorien)
    PHP-Code:
    <html>
    <body>
    <form action = "kat_bear_2.php" method = "post">
    <?php
       
    include('include/db.inc.php');
       
    $res mysql_db_query("shop",
          
    "select * from kategorie");
       
    $num mysql_num_rows($res);
    echo 
    '<font size="+1">Welche Kategorie soll geändert werden?</font><p>';
       
    // Tabellenbeginn
       
    echo "<table border>";
       
    // Überschrift
       
    echo "<tr><td>Auswahl</td> <td>Name</td>";
       echo 
    "<td>&Uuml;ber Kategorie</td></tr>";
       for (
    $i=0$i<$num$i++)
       {
          
    $id mysql_result($res$i"kategorie_id");
          
    $na mysql_result($res$i"name");
          
    $ue_id mysql_result($res$i"ueber_kategorie_id");
          
    // Tabellenzeile mit -zellen
          
    echo "<tr> <td><input type='radio' name='auswahl'";
          echo 
    " value='$id'></td> <td>$na</td><td>$ue_id</td></tr>";
       }
       
    // Tabellenende
       
    echo "</table>";
    ?>
       <p>
       <input type="submit" value="Datensatz anzeigen"><p>
    </form>
    <a href="backoffice.php">Main</a>
    </body>
    </html>
    Datei2: kat_bear_2.php (Änderung des Datensatzes)
    PHP-Code:
    <html>
    <body>
    <?php
    if ($auswahl)
    {
       include(
    'include/db.inc.php');
       
    $sqlab "select * from kategorie where";
       
    $sqlab .= " kategorie_id = $auswahl";
       
    $res mysql_db_query("shop"$sqlab);
       
    $altid mysql_result($res0"kategorie_id");
       
    $altna mysql_result($res0"name");
       
    $altue_id mysql_result($res0"ueber_kategorie_id");
       echo 
    '<font size="+1">Bitte &Auml;nderungen durchführen</font><p>';
       echo 
    "<form action = 'kat_bear_3.php' ";
       echo 
    " method = 'post'>";
       echo 
    "<input name='neuid' value='$auswahl'>";
       echo 
    " Kategorie_ID<p>";
       echo 
    "<input name='neuna' value='$altna'>";
       echo 
    " Name<p>";
       echo 
    "<input name='neuue_id' value='$altue_id'> ";
       echo 
    " &Uuml;ber Kategorie<p>";
       echo 
    "<input type='hidden' name='oriid' ";
       echo 
    " value='$auswahl'>";
       echo 
    "<input type='submit' ";
       echo 
    " value='&Auml;nderungen in DB speichern'><p>";
       echo 
    "<input type='reset'>";
       echo 
    "</form>";
    }
    else
       echo 
    "Es wurde kein Datensatz ausgew&auml;hlt<p>";
    ?>
    </body>
    </html>
    Datei3: kat_bear_3.php (Meldung ob Datensatz geändert wurde)
    PHP-Code:
    <html>
    <body>
    <?php
       
    include('include/db.inc.php');
       
    $sqlab "update kategorie set kategorie_id = '$neuid',";
       
    $sqlab "name = '$neuna',";
       
    $sqlab "ueber_kategorie_id = '$neuue_id'";
       
    $sqlab "where kategorie_id = $oriid";
       
    mysql_db_query("shop"$sqlab);
       
    $num mysql_affected_rows();
       if (
    $num>0)
          echo 
    "Der Datensatz wurde geändert<p>";
       else
          echo 
    "Der Datensatz wurde nicht geändert<p>";
    ?>
    Zurück zur <a href="kat_bear_1.php">Auswahl</a><p>
    <a href="backoffice.php">Main</a>
    </body>
    </html>

  • #2
    Lass dir in deiner kat_bear_3.php mal $sqlab ausgeben. Ich könnte wetten das da

    update kategorie set kategorie_id = '',name = '', usw..

    drin steht...

    Wenn dem so ist, nutz mal die Suchfunktion des Forums und schau mal nach register_globals oder nutz einfach $_POST['neuid'] anstatt $neuid....
    gruss Chris

    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

    Kommentar


    • #3
      Ich habe jetzt

      PHP-Code:
      echo $sqlab
      ausgeben lassen und er sagt mir "where kategorie_id = '8'".

      Liegt das dann trotzdem an den Übergabewerten? Habe trotzdem mal versucht $_POST['neuid'] für '$neuid', etc einzugeben, hat aber nichts gebracht!

      Kommentar


      • #4
        Zu : mysql_db_query

        Anmerkung: Diese Funktion ist seit PHP 4.0.6 veraltet. Verwenden Sie diese Funktion nicht. Stattdessen sollten Sie die Funktionen mysql_select_db() und mysql_query() verwenden.


        -----


        Ändere trotzdem mal deinen Code

        PHP-Code:
        error_reporting(E_ALL);

        // Schnipp
        $res mysql_db_query("shop""select * from kategorie") or die (mysql_error()); 
        Und wie gesagt .. Nimm lieber mysql_select_db() und mysql_query();
        gruss Chris

        [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

        Kommentar


        • #5
          kommt mir auch irgendwie bekannt vor...
          geht bei mir auch nicht, aber müssen da nicht .-operatoren bei den $sqlab gesetzt werden, um die zu verbinden?
          Die Höhen sind die Tiefen wert

          Kommentar


          • #6



            Ja das wäre nicht schlecht


            ausgeben lassen und er sagt mir "where kategorie_id = '8'".
            Irgendwie überlesen

            PHP-Code:
            $sqlab "update .....";
            $sqlab .= "name ....."
            So muss es natürlich heissen
            gruss Chris

            [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

            Kommentar


            • #7
              Original geschrieben von scorpionesc
              $num = mysql_affected_rows();
              if ($num>0)
              echo "Der Datensatz wurde geändert<p>";
              else
              echo "Der Datensatz wurde nicht geändert<p>";
              Ich nehme mal an, dass die Fehlermeldung lautet: Der Datensatz wurde nicht geändert!

              mysql_affected_rows() liefert 0 wenn der alte Wert gleich dem neuen ist. Das wurde vor ein paar Tagen schon in diesem Forum abgehandelt. Mit einer Suche nach mysql_affected_rows sollte der thread gefunden werden.

              PS und selbstverständlich sollte mysql_error() ausgegeben werden.
              Als Hypothese könnte es noch am Abstand um die = Zeichen liegen, das ist aber einfach zu überprüfen. Es gibt einzelne Stellen in mysql und html, wo solche Leerzeichen nicht funktionieren.
              Zuletzt geändert von heiss; 22.07.2006, 12:33.

              Kommentar


              • #8
                Soweit kommt er gar nicht, denn das SQL Statement welches er verwendet ist sozusagen

                mysql_query("where kategorie_id = $oriid");

                Das würde mir als SQL Server nicht viel sagen.
                gruss Chris

                [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                Kommentar


                • #9
                  Ja das ist aber simpel. die .= vergessen, kein echo $sql und kein mysql_error() .

                  Jetzt weiss der Frager dass mysql_affected_rows() auch noch "falsch" wäre.

                  Kommentar

                  Lädt...
                  X