Ankündigung

Einklappen
Keine Ankündigung bisher.

Include im Include

Einklappen

Neue Werbung 2019

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

  • Include im Include

    Hallo php.de Community!
    Ich habe ein problem mit meiner tokenbasierten Authenzifierungsanwendung:
    Die Verifizierung läuft in diesem Include ab:
    PHP-Code:
        require_once("mysql.inc.php");
        function 
    tokver($token){
            
    $time time();
            
    $sql "SELECT UserId FROM token WHERE Token='$token' AND Expires > $time";
            
    $result mysqli_query($db,$sql);
            
    $row mysqli_fetch_assoc($result);
            echo 
    $row["UserId"];
        } 
    Das Skript läuft wen ich statt der Funktion $token direkt fomuliere und statt return echo. Wenn ich abe im Unterordner Test dieses Skript ausführe:
    PHP-Code:
    <?php
    require_once("../tokver.inc.php");
    echo 
    tokver("cb3ffa466e47e639b6a45f4635172d7b");
    ?>
    Kommen folgende Fehlermeldungen:

    Notice: Undefined variable: db in /var/www/haohg/tokver.inc.php on line 6

    Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /var/www/haohg/tokver.inc.php on line 6

    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in /var/www/haohg/tokver.inc.php on line 7

    Warum?

    Danke im Voraus!

    coder10

  • #2
    die datei mit tokver funktion und die mysql.inc.php müssen sich im gleichen ordner befinden.

    bie dir ist halt in der tokver funktion $db nicht vorhanden und dadurch kommen dann die weiteren fehlermeldungen, das sagt also einfach nur aus dass der pfad zur mysql.inc.php nicht stimmt
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

    Kommentar


    • #3
      Woher soll die Funktion tokver die Variable $db kennen? Siehe http://php.net/manual/de/language.variables.scope.php
      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

      Kommentar


      • #4
        sorry zu schnell geantwortet
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

        Kommentar


        • #5
          Danke für eure hilfe, ich habe das include einfach mal innerhalb der Funktion geincluded und nun gehts
          PHP-Code:
          <?php
              
          function tokver($token){
                  require_once(
          "mysql.inc.php");
                  
          $time time();
                  
          $sql "SELECT UserId FROM token WHERE Token='$token' AND Expires > $time";
                  
          $result mysqli_query($db,$sql);
                  
          $row mysqli_fetch_assoc($result);
                  return 
          $row["UserId"];
              }             
          ?>

          Kommentar


          • #6
            Ja, schöner Müll.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              Zitat von coder10 Beitrag anzeigen
              Danke für eure hilfe, ich habe das include einfach mal innerhalb der Funktion geincluded und nun gehts
              [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

              Kommentar


              • #8
                Oder mach das einfach so und lass das Inkludieren aus der Funktion weg:
                PHP-Code:
                require_once("mysql.inc.php"); 
                    function 
                tokver($token$db){ 
                        
                $statement'SELECT UserId FROM token WHERE Token="'.$token.'" AND Expires > '.time(); 
                        
                $result mysqli_query($db$statement); 
                        
                $row mysqli_fetch_assoc($result); 
                        echo 
                $row["UserId"]; 
                    } 

                Kommentar


                • #9
                  Zitat von monolith Beitrag anzeigen
                  Oder mach das einfach so und lass das Inkludieren aus der Funktion weg:
                  PHP-Code:
                  require_once("mysql.inc.php"); 
                      function 
                  tokver($token$db){ 
                          
                  $statement'SELECT UserId FROM token WHERE Token="'.$token.'" AND Expires > '.time(); 
                          
                  $result mysqli_query($db$statement); 
                          
                  $row mysqli_fetch_assoc($result); 
                          echo 
                  $row["UserId"]; 
                      } 
                  dann muss man aber bei der verwendung der funktion mysql includen und dort dann db übergeben

                  PHP-Code:
                  require_once("mysql.inc.php"); 
                      
                  $tokver = function ($token) use($db) { 
                          
                  $statement'SELECT UserId FROM token WHERE Token="'.$token.'" AND Expires > '.time(); 
                          
                  $result mysqli_query($db$statement); 
                          
                  $row mysqli_fetch_assoc($result); 
                          echo 
                  $row["UserId"]; 
                      } 
                  die benutzung wäre dann
                  PHP-Code:
                  $tokver('adasdas'); 
                  apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                  Kommentar


                  • #10
                    Stimmt - an use habe ich gar nicht gedacht.

                    Kommentar


                    • #11
                      Sorry, aber den Sinn der Verwendung von Closures sehe ich hier nicht. Da kannste statt use auch gleich Globals verwenden.

                      PS: echo $row["UserId"]; ist auch ausgesprochen schlecht in der Funktion. Das macht die Funktion kaum wiederverwendbar.

                      PS2: Ist allerdings eh kaum wiederverwendbar.

                      Die fehlende Fehlerkontrolle ist das nächste...
                      Die fehlende Eingabevalidierung ist das nächste...
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        Sorry, aber den Sinn der Verwendung von Closures sehe ich hier nicht. Da kannste statt use auch gleich Globals verwenden.
                        Globals sind aber pöse
                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                        Kommentar


                        • #13
                          Ein Use hat noch etwas einen engeren Scope als ein global . Ob das hier gilt als Argument - keine Ahnung.
                          [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                          Kommentar


                          • #14
                            Steckt ein tieferer Sinn dahinter, das nicht in OOP umzusetzen?
                            Ich mein' der TE nennt sich Fortgeschritten*, dann würde ich das über Klassen mit extends schon für sinnvoller halten, als dies prozedurale mit include innerhalb einer Funktion.
                            Das empfinde ich persönlich so als ih-bäh-Lösung...


                            * was sich imho allerdings in der Ausgangsbeschreibung und der von ihm geposteten Lösung nicht wirklich wiederspiegelt.
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #15
                              Zitat von Arne Drews Beitrag anzeigen
                              Steckt ein tieferer Sinn dahinter, das nicht in OOP umzusetzen?
                              *trollmode an*
                              klar, das Problem ist, PHPUnit Coverage kann nur Klassen analysieren, nicht funktionen, wenn man also alles mit Funktionen abdeckt hat man 100% test coverage
                              *trollmode aus*
                              apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                              Kommentar

                              Lädt...
                              X