PHP Variable und Formularfelder

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

  • #16
    achtung: nicht persönlich nehmen
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
    diese verdammte fehlermeldung. ich warte auf den tag, an dem die leute begreifen, daß dieser fehler zu 99% aus einem vorangehenden sql-fehler herrührt.

    es steht doch lang und breit da: das übergebene argument - in deinem fall $res - ist keine gültige mysql-ergebnis-resource (wasn wort) ...

    heißt also: der query, der die resource erzeugt hat, ist fehlgeschlagen.
    darum: entweder an jede query
    PHP-Code:
    or die(mysql_error()) 
    dranhängen oder eine kleine db-class schreiben, die das immer (im debug-modus) tut.

    und, das hier
    PHP-Code:
    //nun brauchen wir noch die neue ID des Threads, um sie in answers
    // einzutragen
    $res =  mysql_query("select max(id) AS max from threads"); 
    ist soetwas von gefährlich!

    erstens: frag nicht die höchste, sondern die zuletzt eingefügte id ab (edit: ach, vergiß es. das ist genauso dumm ... hol dir die id vor dem einfügen)
    zweitens: wenn ich nicht so faul wäre, würde ich nachschauen, ob max nicht zufällig nen reserviertes wort ist und somit (in diesem kontext) nicht benutzt werden darf ...
    Zuletzt geändert von derHund; 16.09.2004, 17:19.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #17
      mit dem klick auf neuer beitrag soll die fid an die newthread.php
      übergeben werden dies passiert jedoch nicht
      poste mal auszugsweise den erzeugten html-code der showthreads.php ... sind dort die links korrekt generiert wurden?
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #18
        @derHund

        Hier ist nochmal der code von der showthreads.php
        PHP-Code:
        <html>
        <head>
        <title>Showthreads</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        </head>
        <body bgcolor="#66CCFF">
        <?PHP 
        /* showthreads.php */
        include("DB_open.php");

        $res =  mysql_query("select * from threads where fid=".$_GET["fid"]);
        echo 
        "<table width='100%' border='1'>";

        while(
        $row =  mysql_fetch_array($res)) {
            echo 
        "<tr><td>";
            echo 
        "<a href=\"showanswers.php?fid=".$row["fid"]."&tid=".$row["id"]."\">";
            echo 
        $row["topic"]."</a><br>";
            echo 
        "</td></tr>";
        }
        echo 
        "</table>";
        echo 
        $_GET['fid']."<br>";
        echo 
        "<a href=\"newthread.php?fid=".$row["fid"]."&tid=".$row["id"]."\">Neuer Beitrag</a><br>";
        ?> 
        </body>
        </html>







        Wie gesagt ich bin anfänger aber nicht Blöd

        Könntest du so net sein und mir genauer beschreiben was du meinst!

        vieleicht hab ich es richtig verstanden.

        Ist das so besser?
        PHP-Code:
        $res =  mysql_query("select max(id) AS max from threads") or die(mysql_error()); 

        Und was hast du mit den max genauer gemeint?

        Kommentar


        • #19
          Wie gesagt ich bin anfänger aber nicht Blöd
          beweise deine aussage und poste den erzeugten html-code. sollte ich dich richtig verstanden habe und dies ist die seite, auf der die links nicht richtig erzeugt werden. poste bitte den erzeugten html-code, also das, was du im browser siehst (quellcode), nachdem es durch den hypertext präprozessor gelaufen ist.
          Ist das so besser?
          ja. so erhälts du wenigstens aussagekräftige fehlermeldungen. aber, wie gesagt, lieber in einer db-klasse, sonst schreibst du dich dumm und dämlich und morgen verzichtest du wieder drauf und ... häng es an jede query oder zumindest an die, die die nicht-valide resource liefert.
          Und was hast du mit den max genauer gemeint?
          da max nen sql-statement ist, solltest du es nicht als alias benutzen ... ist aber ok, ist scheinbar nicht reserviert ...
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #20
            Ganz ruihg bitte


            hat du das hier gewollt?

            <html>
            <head>
            <title>Showthreads</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
            </head>
            <body bgcolor="#66CCFF">
            <table width='100%' border='1'><tr><td>
            <a href="showanswers.php?fid=1&tid=1">Was ist ein Auto</a><br></td></tr><tr><td>
            <a href="showanswers.php?fid=1&tid=7">Hello my name is methos</a><br></td></tr><tr><td>
            <a href="showanswers.php?fid=1&tid=8">Was für eine farbe soll ich nehmen?</a><br></td></tr></table>1<br>
            <a href="newthread.php?fid=&tid=">Neuer Beitrag</a><br>
            </body>
            </html>

            Kommentar


            • #21
              hat du das hier gewollt?
              ja.

              jetzt seh ich auch einen fehler ...
              PHP-Code:
              while($row =  mysql_fetch_array($res)) {
              ...
              }
              echo 
              "</table>";
              echo 
              $_GET['fid']."<br>";
              echo 
              "<a href=\"newthread.php?fid=".$row["fid"]."&tid=".$row["id"]."\">Neuer Beitrag</a><br>"
              die while läuft bis row false ist, somit hast du unten auch nix mehr drin stehen ... ersetze es einfach durch den $_GET-parameter ... allerdings kannst du dem 'neuen thread' nur die fid (forum-id?) mitgeben ... da es ein neuer thread ist, brauchst und hast du doch keine tid (thread-id?) ...

              vorschlag: ich gebe zu, daß ich das auch hätte gleich sehen können, und du setzt dafür in deiner php.ini das error_reporting auf E_ALL, ok? mach das mal bitte. dann treten solche nonsense-fehler nicht mehr auf, bzw. sie werden von vornherein gemeldet. bitte.
              Ganz ruihg bitte
              es ist nur so, daß jedesmal, wenn ich schreibe: 'poste mal bitte den erzeugten html-code', die leute grundsätzlich den php-code posten (auch wenn er zwei threads weiter oben schon steht und ich explizit nach dem erzeugten html-code gefragt hab)

              hier (php.ini)
              Code:
              error_reporting  =  E_ALL
              display_errors = On
              damit findest du die meisten fehler selbst ... jetzt brauchst du nur noch eine funktion, die bei jeder query mysql_error oder-verknüpft und dann wirst du mal sehen, wie schnell du plötzlich vorankommst ...
              Zuletzt geändert von derHund; 16.09.2004, 17:58.
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #22
                es ist nur so, daß jedesmal, wenn ich schreibe: 'poste mal bitte den erzeugten html-code', die leute grundsätzlich den php-code posten (auch wenn er zwei threads weiter oben schon steht und ich explizit nach dem erzeugten html-code gefragt hab)
                Okey! zugegeben! das war mein fehler, hab es falsch verstanden.

                die while läuft bis row false ist, somit hast du unten auch nix mehr drin stehen ... ersetze es einfach durch den $_GET-parameter ... allerdings kannst du dem 'neuen thread' nur die fid (forum-id?) mitgeben ... da es ein neuer thread ist, brauchst und hast du doch keine tid (thread-id?) ...
                Wie meist du dass? Die while läuft beim ersten aufruf tatenlos, nur wenn ich ein neuen beitrag erstellen will und dann später nochmal aufgerufen wird kommt die fehlermeldung.

                was tid angeht hast du rech ich hab ja no keine dan schreibe ich das auch besser so oder?

                [PHP]echo "<a href=\"newthread.php?fid=".$row["fid"]."\">Neuer Beitrag</a><br>";[/quote]

                Kommentar


                • #23
                  also,

                  damit wir uns verstehen (ich dich):
                  - nach dem erstellen eines neuen beitrags leitest du erfolgreich auf die showthreads weiter?
                  PHP-Code:
                  //Weiterleitung zu der Auflistung der Threads im
                  //bereits ausgewählten Forum
                  header("Location: showthreads.php?fid=".$fid); 
                  - was steht jetzt in der browser-address-zeile? bitte posten!

                  bitte in der showthreads diesen teil
                  PHP-Code:
                  $res =  mysql_query("select * from threads where fid=".$_GET["fid"]); 
                  durch diesen ersetzen
                  PHP-Code:
                  echo '<pre>';
                  print_r($_GET);
                  echo 
                  $query 'select * from threads where fid='.$_GET['fid'];
                  echo 
                  '</pre>';
                  $res =  mysql_query($query) or die(mysql_error()); 
                  ausgabe? gibt es eine fehlermeldung?

                  hast du deine php.ini schon angepaßt? los ...
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #24
                    hier (php.ini) code: error_reporting = E_ALL display_errors = On damit findest du die meisten fehler selbst ... jetzt brauchst du nur noch eine funktion, die bei jeder query mysql_error oder-verknüpft und dann wirst du mal sehen, wie schnell du plötzlich vorankommst ...
                    anstatt die ini zu bearbeiten kannst dir auch ne eigene fehlerbehandlung schreiben. hat den Vorteil das du da alle möglich bei einem fehler unternehmen kannst. Beim Puplishen kannst die dann wieder entfernen.

                    und falls nu nicht ganz klar ist was ich mein, kannst du auch meine benutzen. Speicher dir das folgende ab und bind einfach mit include ein.

                    Da die im übrigen ja sonst keiner sieht, hab ich da 1. auf schönheit keinen Wert gelegt und musste 2. wg. Forum das noch bissl umbrechen.

                    PHP-Code:
                    <?php

                     error_reporting 
                    (E_PARSE E_ERROR);

                    function 
                    userErrorHandler ($errno,
                                    
                    $errmsg
                                    
                    $filename,
                                    
                    $linenum
                                    
                    $vars
                    {

                        
                    $errortype = array (
                                    
                    1   =>  "Error",
                                    
                    2   =>  "Warning",
                                    
                    4   =>  "Parsing Error",
                                    
                    8   =>  "Notice",
                                    
                    16  =>  "Core Error",
                                    
                    32  =>  "Core Warning",
                                    
                    64  =>  "Compile Error",
                                    
                    128 =>  "Compile Warning",
                                    
                    256 =>  "User Error",
                                    
                    512 =>  "User Warning",
                                    
                    1024=>  "User Notice"
                                    
                    );

                         
                    $user_errors 
                              
                    = array(E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE);


                            
                    $err =  '<p class="errorbox">';
                            
                    $err .= '<big>'.$errortype[$errno].'</big><br>';
                            
                    $err .= '<b>'.$errmsg.'</b><br>';
                            
                    $err .= 'Datei <b>'.$filename.'</b><br>';
                            
                    $err .='on line:'.$linenum.'<br>';

                        if (
                    in_array($errno$user_errors))
                            
                    $err .= "<i>".
                                  
                    wddx_serialize_value($vars,"Variables").
                                  
                    "</i>\n";
                            
                    $err .= "\n";
                            echo 
                    $err;

                       if (
                    file_exists($filename))
                       {
                         echo 
                    'page: '.$GLOBALS["page"];
                         
                    $array file($filename);
                         echo 
                    '<div class="php_source">';
                          
                    highlight_string("<?php ".$array[($linenum-1)]." ?>");
                          echo 
                    '</div></p>';
                        }
                        else echo 
                    'not source';

                    }

                    $old_error_handler set_error_handler("userErrorHandler");

                    ?>
                    Das ganze fängt den fehler ab (ist nix geheimnisvolles sondern ne Standardfunktion von PHP) und zeigt dir gleich die Zeile mit dem Fehler an. (darum beim publishen ändern oder wieder rausnehmen). Erstell am besten noch ne css-definition für php_source und errorbox damits hübsch aussieht .
                    So dann mal viel spass mit deinem Forum

                    Kommentar


                    • #25
                      @derHund

                      bevor ich den beitrag erstelle steht das in der Adressleiste:

                      http://wicomtec.dyndns.org/wicomtec/...eads.php?fid=1

                      und wärend:

                      http://wicomtec.dyndns.org/wicomtec/...hread.php?fid=

                      da wird die fid schon nicht mehr übergeben.

                      und danach:

                      http://wicomtec.dyndns.org/wicomtec/...reads.php?fid=

                      und folgende fehlermeldung:

                      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

                      Kommentar


                      • #26
                        @tezet

                        Danke werd ich auch gleich ausbrobieren!

                        Kommentar


                        • #27
                          grrmpf...

                          nimm aber das...
                          PHP-Code:
                          echo 'page: '.$GLOBALS["page"]; 
                          ...raus.

                          hab ich beim posten übersehen. Die Variable wird bei nicht vorhanden sein und gleich mal nen fehler produzieren.

                          Kommentar


                          • #28
                            da wird die fid schon nicht mehr übergeben.
                            also liegt es doch hier:
                            PHP-Code:
                            while($row =  mysql_fetch_array($res)) {
                            ...
                            }
                            echo 
                            "</table>";
                            echo 
                            $_GET['fid']."<br>";
                            echo 
                            "<a href=\"newthread.php?fid=".$row["fid"]."&tid=".$row["id"]."\">Neuer Beitrag</a><br>"
                            afaik:
                            die while macht folgendes: solange die zuweisung des fetch_array in row noch irgendeinen wert liefert, also nicht false, wird die schleife abgearbeitet ... die links werden ausgegeben ... wenn fetch_array auf grund nicht mehr vorhandener datensätze false liefert , ist auch row false ... die schleife endet. du greifst auf row (als vermeintliches array) assoziativ zu und erhälts nix ... somit ist der link auch unvollständig

                            vorschlag:
                            PHP-Code:
                            echo '<a href="newthread.php?fid='.(int)$_GET['fid'].'">Neuer ...'
                            nimm den wert ausm get, woanders kriegste den nicht her.
                            und folgende fehlermeldung:
                            gut, das ist logisch, daß die kommt ... kannst ja nach int casten dann steht wenigstens 0 da ^^

                            btw: ich bin draußen, bis du die ini angepaßt hast (zumindest nen error_reporting hast), bis dahin kann ich nur raten ...
                            Die Zeit hat ihre Kinder längst gefressen

                            Kommentar


                            • #29
                              Danke die id wird übemittelt und fehlermeldungen kommen auch keine
                              mehr

                              er schreibt aber noch keine daten in die db

                              naja mal schaun vieleicht find ich selbst den fehler


                              bin ja gut unterichtet worden vom derHund

                              Kommentar

                              Lädt...
                              X