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 https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

    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 https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

        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.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            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
              Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

              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 https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                  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...
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      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 https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                        Kommentar


                        • #13
                          Ein Use hat noch etwas einen engeren Scope als ein global . Ob das hier gilt als Argument - keine Ahnung.
                          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                          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 https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                              Kommentar

                              Lädt...
                              X