Endlosschleife und MySQL-Befehl

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

  • Endlosschleife und MySQL-Befehl

    So, hallo Leute!
    Erstmal frohes neues

    Aber jetzt zu meinem Problem. Ich schreibe ja derzeit an einem Newsscript. Die Eingabe-Datei und die Login, Sowie Auslesungsdatei hab ich schon fertig .

    Aber in der Bearbeitungsdatei habe ich einen Fehler:
    PHP/MySQL meldet:
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/web40/html/script-tests/editnews.php on line 15
    Der Code ist folgender:
    PHP-Code:
    <?php
    include("#_mysql.inc");
    session_start();
    if(
    session_is_registered("login") && $_SESSION['login']) {
    $sql mysql_query("SELECT id, titel FROM news ORDER BY id DESC LIMIT $start,$eintraege");
    $count mysql_query("SELECT COUNT(*) from news");
    $all mysql_result($count0);
    $start $_GET['s'];
    $eintraege 15;
    if ((
    $start $eintraege) > $all) {
        
    $eintraege $all $start;
        
    $next 0;
    } else 
    $next $start $eintraege;
    echo 
    "<table width=\"600\"><tr><td width=\"50\"><b>id</b></td><td width=\"480\"><b>Titel</b></td><td width=\"70\"><b>Aktion</b></td></tr>";
    while (
    $ds mysql_fetch_object($sql)) {
    $titel $ds -> titel;
    $id $ds -> id;
    echo 
    "<tr><td>$id</td><td>$titel</td><td><a href=\"editnews2.php?id=$id\">Edit</a> | <a href=\"delnews.php?id=$id\">Delete</a></td></tr>";
    }
    } else include(
    'login.php');
    ?>
    Ich hoffe mir kann jmd. helfen!

    Gruß
    icecream
    icedcream.de Webdesign Regensburg

  • #2
    echo mysql_error();
    unter mysql_query(...)

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      OK, danke, hab das Problem gefunden!

      Gruß
      icecream
      icedcream.de Webdesign Regensburg

      Kommentar


      • #4
        Naja... dafür hat sich ein neue Problem ergeben... Irgendwie wurde das zu einer endlosschleife und listet mir jetzt alle zu bearbeitende News auf. Aber immer die Selbe! Also wenn ich als id=1 nehm, listet er mir alle news der id 7 auf. Wenn ich id=3 nehm, listet er alle news der id 5 auf.
        Welche es logischerweise nur einmal gibt... aber das alles in einer Endlosschleife. Also habe ich jetzt 1000 mal da stehen:
        id Titel Aktion
        5 Nochmal ein Test Edit | Delete
        5 Nochmal ein Test Edit | Delete
        5 Nochmal ein Test Edit | Delete
        5 Nochmal ein Test Edit | Delete

        Der aktuelle Code lautet:
        PHP-Code:
        <?php
        include("#_mysql.inc");
        session_start();
        if(
        session_is_registered("login") && $_SESSION['login']) {
        $sql mysql_query("SELECT id, titel FROM news ORDER BY id DESC LIMIT $start$eintraege");
        $count mysql_query("SELECT COUNT(*) from news");
        $all mysql_result($count0);
        $start $_GET['s'];
        $eintraege 15;
        echo 
        "<table width=\"600\"><tr><td width=\"50\"><b>id</b></td><td width=\"480\"><b>Titel</b></td><td width=\"70\"><b>Aktion</b></td></tr>";
        while (
        $ds mysql_fetch_object(mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start$eintraege"))) {
        $titel $ds -> titel;
        $id $ds -> id;
        echo 
        "<tr><td>$id</td><td>$titel</td><td><a href=\"editnews2.php?id=$id\">Edit</a> | <a href=\"delnews.php?id=$id\">Delete</a></td></tr>";
        }
        if ((
        $start $eintraege) > $all) {
            
        $eintraege $all $start;
            
        $next 0;
        } else 
        $next $start $eintraege;
        } else include(
        'login.php');
        ?>
        Danke schonmal im Vorraus!

        Gruß
        icecream
        icedcream.de Webdesign Regensburg

        Kommentar


        • #5
          Endlosschleife und MySQL-Befehl

          Irgendwie meine Abfrage zu einer endlosschleife und listet mir jetzt alle zu bearbeitende News auf. Aber immer die Selbe! Also wenn ich als id=1 nehm, listet er mir alle news der id 7 auf. Wenn ich id=3 nehm, listet er alle news der id 5 auf.
          Welche es logischerweise nur einmal gibt... aber das alles in einer Endlosschleife. Also habe ich jetzt 1000 mal da stehen:
          id Titel Aktion
          5 Nochmal ein Test Edit | Delete
          5 Nochmal ein Test Edit | Delete
          5 Nochmal ein Test Edit | Delete
          5 Nochmal ein Test Edit | Delete

          Der aktuelle Code lautet:
          PHP-Code:
          <?php
          include("#_mysql.inc");
          session_start();
          if(
          session_is_registered("login") && $_SESSION['login']) {
          $sql mysql_query("SELECT id, titel FROM news ORDER BY id DESC LIMIT $start$eintraege");
          $count mysql_query("SELECT COUNT(*) from news");
          $all mysql_result($count0);
          $start $_GET['s'];
          $eintraege 15;
          echo 
          "<table width=\"600\"><tr><td width=\"50\"><b>id</b></td><td width=\"480\"><b>Titel</b></td><td width=\"70\"><b>Aktion</b></td></tr>";
          while (
          $ds mysql_fetch_object(mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start$eintraege"))) {
          $titel $ds -> titel;
          $id $ds -> id;
          echo 
          "<tr><td>$id</td><td>$titel</td><td><a href=\"editnews2.php?id=$id\">Edit</a> | <a href=\"delnews.php?id=$id\">Delete</a></td></tr>";
          }
          if ((
          $start $eintraege) > $all) {
              
          $eintraege $all $start;
              
          $next 0;
          } else 
          $next $start $eintraege;
          } else include(
          'login.php');
          ?>
          Danke schonmal im Vorraus!

          Gruß
          icecream
          icedcream.de Webdesign Regensburg

          Kommentar


          • #6
            jedes mal wenn die schleife durchgeführt wird holt er ein objekt aus der resource, die die mysql query zurückliefert - und die jedesmal neu ausgeführt wird. ....


            Informier dich bitte auch mal über XSS - dein Script hat Sicherheitslücken die so groß sind wie nen Scheunentor... (z.B. $start)
            Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
            var_dump(), print_r(), debug_backtrace und echo.
            Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
            Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
            Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

            Kommentar


            • #7
              OffTopic:
              Naja, wenigstens wird wohl kaum jemand versuchen ihm über sql-injections schaden zuzufügen.

              Kommentar


              • #8
                Bitte keine Doppelpostings!!! Die sind in jedem Forum unerwünscht.

                Darüber hinaus halte dich bitte an unsere speziellen Regeln:
                http://www.php-resource.de/forum/sho...threadid=50454
                Das macht es uns leichter dir zu helfen und hätte dir sicher den ein oder anderen Beitrag erspart!

                Kommentar


                • #9
                  Gut... ich habe mich mal ein bisschen über "XSS" informiert... könnte mir jmd. helfen evtl. Sicherheitslücken auszubessern und mir erklären, wie ich in zukunft vorgehen sollte?

                  Gruß
                  icecream
                  icedcream.de Webdesign Regensburg

                  Kommentar


                  • #10
                    Du bindest eine Usereingabe $_GET['s'] ungeprüfe in eine mysql query ein ($start)
                    Zumindest solltest du das machen:
                    PHP-Code:
                    $start mysql_real_escape_string(strip_tags($_GET['s'])); 
                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      ok, hab ich gemacht danke

                      aber kann mir jmd. sagen, warum ich ne endlosschleife erzeugt habe? und warum immer nur die eine id angezeigt wird? das problem ist oben genauer beschrieben...

                      Gruß
                      icecream

                      P.S.: Das ist das erste mal, dass ich mit Datenbänken arbeite, deswegen bitte nicht so harte kritik
                      icedcream.de Webdesign Regensburg

                      Kommentar


                      • #12
                        Vermutlich liegts an dieser Zeile
                        PHP-Code:
                        while ($ds mysql_fetch_object(mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start$eintraege"))) {

                        //besser
                        $ds mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $start$eintraege");
                        while(
                        $erg mysql_fetch_object($ds)){
                        .... 
                        Überigens hat Shurakai dir schon gesegt in welcher Richtung das Problem der Enlosschleife liegt
                        jedes mal wenn die schleife durchgeführt wird holt er ein objekt aus der resource, die die mysql query zurückliefert - und die jedesmal neu ausgeführt wird. ....
                        d.h. die Query liefert immer wieder eine Resultat Ressource, die wieder bei 0 beginnt (weil du query wieder aufrufst)
                        Du musst die query ausserhalb der Schleife machen und mit der Schleife nur durch die Ressource des Resultats gehen.

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          bevor du deine Postings nicht an unsere Regeln angepasst hast, macht hier keiner irgendwas!

                          Kommentar


                          • #14
                            Jetzt geht alles
                            Vielen, vielen Dank!

                            Gruß
                            icecream
                            icedcream.de Webdesign Regensburg

                            Kommentar

                            Lädt...
                            X