HILFE!!! Problem mit UPDATE

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

  • HILFE!!! Problem mit UPDATE

    Hallo,

    ich habe ein Problem mit einem Skript. Ich finde den Fehler einfach nicht.

    Das Skript soll einen editierten Text zunächst in ein Feld "temp" (Typ longtext) der Datenbank "content" schreiben (Das funktioniert noch...).

    Nach Verifizierung soll nun dieser Inhalt als eigentlicher Content im Feld "text" "(Typ longtext) gespeichert werden ($sql_update).

    Hier tritt immer der Fehler auf, dass das Feld einfach nicht geändert wird...

    Komischerweise funktioniert das Ganze bei kurzen Texten, bei sehr langen aber nicht.

    Schaut's euch mal an, vielleicht findet ihr ja was. Danke!

    PHP-Code:
    <?php
    require ('checkuser.php');
    include (
    'editor/fckeditor.php');
    include(
    '../data.php');

    $mydb mysql_connect($host,$user,$pass);
    if (!
    $mydb
        die (
    "Keine Verbindung zu MySQL");
    mysql_select_db($db,$mydb) or die ("Keine Verbindung zur Datenbank");

    $sql "SELECT * FROM menu WHERE menuid='$menuid'";
    $zeilen mysql_query($sql,$mydb);
    $zeile mysql_fetch_array($zeilen);

    $head=$zeile[topic];

    if ((!
    $submit && !$submit2) || $back) {
      echo 
    "<div><b>Menüpunkt \"$head\" verwalten</b></div>";

      
    $sql "SELECT * FROM content WHERE contentid='$menuid'";
      
      
    $zeilen mysql_query($sql,$mydb);
      
    $zeile mysql_fetch_array($zeilen);

    ?>
    <form action = '<?php $PHP_SELF ?>' method = 'post' name='formular1'>
    <table class="rahmen" style="width: 750px;">
    <tr>
      <td class='rahmen'>
    <?php
    $oFCKeditor 
    = new FCKeditor ;
    //if (!$back) {
      
    $oFCKeditor->Value $zeile[text];
    //} //if
    if ($back) {
      
    //delete temporary content
      
    $sql_delete_temp "UPDATE content set temp='' WHERE contentid='$menuid'";
      
    mysql_query($sql_delete_temp,$mydb);
    //if
    $oFCKeditor->CanUpload true ;    // Overrides fck_config.js default configuration
    $oFCKeditor->CanBrowse true ;    // Overrides fck_config.js default configuration
    $oFCKeditor->CreateFCKeditor'content''100%'480 ) ;
    ?>    
      </td>
    </tr>
    <tr>
      <td class="rahmen" bgcolor="#0099CC" align="center"><input type="reset" value="reset">
    </input>&nbsp;<input type="submit" name="submit" value="ändern"></td>
    </tr>
    </table>
    </form>
    <?php
    //if

    if ($submit) {
    ?>
    <form action = '<?php $PHP_SELF ?>' method = 'post' name='formular2'>
    <?php
      $sql_insert_temp 
    "UPDATE content SET temp='$content' WHERE contentid='$menuid'";  
      
    mysql_query($sql_insert_temp,$mydb); //das funktioniert
      
      
    echo "<div class='text'><b>Vorschau des bearbeiteten Inhalts:</b></div><br>";
      echo 
    "<table class='rahmen' style='width: 750px;'><tr><td class='rahmen'>";
      echo 
    "<iframe src='../preview.php?menuid=$menuid' width='750'
     height='480' name='preview' scrolling='yes' frameborder='1'></iframe>"
    ;
      echo 
    "</td></tr></table>";
      echo 
    "<table class='rahmen' style='width: 750px;'><tr><td class='rahmen' bgcolor='#0099CC' align='center'>
    <input type='submit' name='back' value='zurück'></input>&nbsp;<input type='submit' name='submit2'
     value='weiter'></input></td></tr></table></form>"
    ;
    //if

    if ($submit2 && !$back) {
      
      
    $sql2 "SELECT * FROM content WHERE contentid='$menuid'";
      
    $zeilen2 mysql_query($sql2,$mydb);
      
    $zeile2 mysql_fetch_array($zeilen2);
      
    $num2=mysql_affected_rows();
      echo 
    "<br>".$num2;
      
      
    $input=$zeile2[temp];
      
      if (
    $num2>0) { //$num2 ist größer 0
        
    $sql_update "UPDATE content SET text='$input' WHERE contentid='$menuid'";  
        
    mysql_query($sql_update,$mydb);

        
    $num3=mysql_affected_rows(); //$num 3 ist Null
        
    echo "<br>".strlen($input); //String-Länge ist OK
        
    echo "<br>xxx".$menuid."xxx"//MenuID wird korrekt ausgegeben
      
    //if
      
    else {
        echo 
    "<div class='text'><b>Es wurde kein Eintrag gefunden!!</b></div>";
      } 
    //else
      
      
    if ($num3>0) {
        echo 
    "<div class='text'><b>Der Menüpunkt \"$head\" wurde geändert!</b></div>";
      } 
    //if
      
    else {
        echo 
    "<div class='text'></b>Der Menüpunkt \"$head\" wurde nicht geändert!</b></div>";
      } 
    //else

      
    echo mysql_error(); //Liefert die beschriebene Fehlermeldung

      
    echo "<br><div class='text'><a href='index.php'>Home<a></div>";
    //else
    mysql_close($mydb);

    $back=FALSE;
    ?>
    Zuletzt geändert von thkolz; 01.10.2004, 09:22.

  • #2
    verwende mysql_error() um Fehlermeldung zu bekommen

    btw: bitte umbrich deinen Code, dass man nicht rechts scrollen muss (Auflösung 1024 x 768)

    Kommentar


    • #3
      Hm, komische Fehlermeldung.

      Sieht so aus, als würde sich das auf den Inhalt beziehen....
      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 'armonizzazione del diritto del lavoro nel Mercato unico europea
      Kann es sein, dass das an dem Zeichen " ' " liegt? Bei kurzen Inhalten funktioniert es ja.
      Was muss ich da ändern?

      Aber andererseits funktioniert es ja auch beim ersten UPDATE, bei zweiten jedoch nicht.
      Sehr merkwürdig das...
      Zuletzt geändert von thkolz; 01.10.2004, 08:54.

      Kommentar


      • #4
        sei bitte so nett und sage mir wo das Script aussteigt, da du mehr als eine Update in deinem Script hast, und meine Glaskugel ist von der Reinigung noch nicht zurück. Ansonstens könnte http://de2.php.net/manual/en/functio...ape-string.php dein Freund sein.

        Kommentar


        • #5
          Ich habs mal oben reingeschrieben...

          Das Skript läuft bis zum Schluss...
          Es kommt die Meldung, dass nichts geändert wurde, d.h. $num3 ist 0.

          Kommentar


          • #6
            mach bitte folgendes: bei jedem mysql_query zusätzlich um

            mysql_query(...) or die(mysql_error());

            ergänzen, was bekommst du, wo steigt der Parser aus?

            Ach ja wenn du was änderst, dann sagt auch Bescheid, wo und wie du geändert hast. Nicht einfach dein 1. Posting ändern und nichts sagen. Ich lese nie nochmals, was drin war.
            Zuletzt geändert von asp2php; 01.10.2004, 09:25.

            Kommentar


            • #7
              So, ich habe jetzt mal die mysql_real_escape-Funktion eingebaut, und jetzt tut's das skript auch mit dem Problementry.
              Vielen Dank also schonmal, asp2php!!!

              Noch eine Frage: Jetzt schreibt er mir ja vor das " ' " ein "/". Muss ich das jetzt wirder mit stripslashes() zurücksetzen, bevor ich es auf der Website anzeige?
              PHP-Code:
              if ($submit2 && !$back) {
                
                
              $sql2 "SELECT * FROM content WHERE contentid='$menuid'";
                
              $zeilen2 mysql_query($sql2,$mydb);
                
              $zeile2 mysql_fetch_array($zeilen2);
                
              $num2=mysql_affected_rows();
                echo 
              "<br>".$num2;
                
                
              $input=$content=mysql_real_escape_string($zeile2[temp]);
                
                if (
              $num2>0) {
                  
              $sql_update "UPDATE content SET text='$input' WHERE contentid='$menuid'";  
                  
              mysql_query($sql_update,$mydb)or die(mysql_error()); 

                  
              $num3=mysql_affected_rows();
                  echo 
              "<br>".strlen($input);
                  echo 
              "<br>xxx".$menuid."xxx";
                } 
              //if
                
              else {
                  echo 
              "<div class='text'><b>Es wurde kein Eintrag gefunden!!</b></div>";
                } 
              //else
                
                
              if ($num3>0) {
                  echo 
              "<div class='text'><b>Der Menüpunkt \"$head\" wurde geändert!</b></div>";
                } 
              //if
                
              else {
                  echo 
              "<div class='text'></b>Der Menüpunkt \"$head\" wurde nicht geändert!</b></div>";
                } 
              //else
                
                
              echo mysql_error();

                echo 
              "<br><div class='text'><a href='index.php'>Home<a></div>";
              //else
              mysql_close($mydb); 
              Zuletzt geändert von thkolz; 01.10.2004, 09:34.

              Kommentar


              • #8
                warum probierst du nicht einfach

                Kommentar


                • #9
                  Original geschrieben von thkolz
                  Noch eine Frage: Jetzt schreibt er mir ja vor das " ' " ein "/". Muss ich das jetzt wirder mit stripslashes() zurücksetzen, bevor ich es auf der Website anzeige?
                  nein, natürlich nicht. btw: es ist ein \, kein /.

                  diese maskierung ist nur für die schnittstelle zur DB von relevanz, weil die eben wissen muss, ob du mit ' eine zeichenkette abschließen willst, oder ob ' innerhalb der zeichenkette ein normales zeichen sein soll.

                  wenn deine daten dann in die DB eingetragen wurden, dann steht da schon wieder ', und nicht mehr \'.


                  das thema haben wir hier allerdings auch schon mehrere male in aller ausführlichkeit durchdiskutiert.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    So, ich bin's nochmal.

                    Ich dachte eigntlich, das Problem sei gelöst....

                    Doch jetzt habe ich mal in der DB geschaut und gesehen, dass jetzt immer noch weitere "\" eingefügt werden. Wie kann ich das umgehen?

                    Es soll ja nur ein "\" vor jedem Sonderzeichen, das von mysql_real_escape_string verändert wird, stehen.

                    Wie bekomme ich das hin, dass nicht bei jedem UPDATE ein "\" vorangestellt wird??

                    Entschuldigt meine Blödheit, aber ich habe nichts dergleichen per Such-Funktion finden können...

                    Kommentar


                    • #11
                      Erst stripslashes(), dann mysql_real_escape_string()

                      EDIT:
                      bitte bleibe in solchen fällen in deinem ursprünglichen thread zum thema!
                      *zusammenführ*


                      Hi,

                      ich bekomme das Problem einfach nicht gelöst...

                      Ich möchte zuvor editierte Daten wieder in der DB speichern.

                      Damit nicht immer wieder vor bestimmte Zeichen wie z.B. " oder ' ein "\" eingefügt wird, sieht meine Bearbeitung des Strings so aus:

                      $content=stripslashes($content);
                      $content=mysql_real_escape_string($content);

                      Jedoch wird jetzt nicht mehr vor einem ' ein "\" eingefügt.

                      Benutze ich nur die zweite Zeile mit mysql_escape_string(), dann funktioniert es. Es werde dann aber natürlich bei mehrmaligem Durchlaufen des Skripts auch mehrere "\" hintereinander gesetzt. Das will ich aber verhindern. Ich bekomme es aber einfach nicht hin...
                      Zuletzt geändert von wahsaga; 04.10.2004, 13:06.

                      Kommentar


                      • #12
                        http://www.php-resource.de/forum/sho...threadid=45321

                        Kommentar

                        Lädt...
                        X