Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Nach Serverumzug funktioniert kein Mysqli mehr

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Nach Serverumzug funktioniert kein Mysqli mehr

    Hallo Com,

    Ich habe ein Problem, ich habe eine PHP-Anwendung local geschrieben, als ich es auf meinem Webspace laden wollte kann ich mich plötzlich nicht mehr einloggen. Ob die anderen MYSQL Befehle funktionieren kann ich nicht sagen, da ich nicht an die Funktionen komme ohne mich einzuloggen.

    Hier mal der Code vom Login System, Hab ich da einen Fehler gemacht? Local hat es funktioniert:

    PHP-Code:
    if($doc=='accesslogin')
       {
        
    $Username $_POST['name'];
        
    $Passwort md5($_POST['passwort']);
        


            
    //SQL Befehl
            
    $result mysqli_query($connection,"SELECT * FROM Benutzer WHERE Name='$Username' AND Passwort='$Passwort'")
            or die(
    mysqli_error());

            
    // $row Best?cken mit datem ( in diesem fall die anzahl der reihen)
            
    $row mysqli_num_rows($result);
            
    $riw mysqli_fetch_array($result);
            
    // Ausgabe ob eingeloggt oder nicht
            
    if($row == 1)
            {
                echo 
    "<center><h2>Eingeloggt</h2><br /> <p> Sie Haben sich Erfolgreich eingeloggt, und werden nun weitergeleitet!</p></center> ";
                 
    $_SESSION['loginfehler'] = false;
                 
    $_SESSION['login'] = true;
                 
    $_SESSION['rang'] = $riw['Rang'];
                 
    $_SESSION['Username'] = $Username;
                             
    $uhrzeit=date("H:i");
    $daten "<br>$uhrzeit: ".$_SESSION['Username']." (".$_SESSION['rang'].") loggt sich erfolgreich ein";
    $dateihandle fopen("logs/".$logdatum.".log","a");
    fwrite($dateihandle$daten);
    fclose($dateihandle);
                echo 
    '<meta http-equiv="refresh" content="5;url=index.php">';
            }
            Else
            {
                
    $_SESSION['loginfehler'] = true;
                
    $_SESSION['login'] = false;
                echo 
    '<meta http-equiv="refresh" content="0;url=?doc=login">';
            }
            return 
    1;
       }
       } 

  • #2
    - Wo startest du die Session, error_reporting voll aufgereht bzw. Logfile geschaut wegen Fehlermeldungen?

    - Schon versucht zu debuggen? Mach das mal: http://php-de.github.io/#debugging

    - Deine Anwendung ist offen für SQL-Injection, nutze prepared Statments
    http://php-de.github.io/jumpto/sql-injection/
    http://www.peterkropff.de/site/mysql...statements.htm

    LG
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Zitat von hausl Beitrag anzeigen
      - Wo startest du die Session, error_reporting voll aufgereht bzw. Logfile geschaut wegen Fehlermeldungen?
      Die Session wird in der index.php gestartet, das ist die text.php. Welche Logfile meinst du?

      EDIT: Und wie meinst du das mit SQL-Injection, ich werde aus deinen Links nicht ganz schlau

      Kommentar


      • #4
        Du setzt $_POST['name'] unescapet in deine Query. Du musst keine Prepared Statements nutzen. Escaping reicht auch.

        Zum Beispiel mit dem Namen…

        Code:
        ' OR 1 --
        …kann sich bei dir jeder einloggen, weil du den Kontextwechsel nicht beachtest und dadurch die Syntax der Query verändert werden kann.

        - http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

        Kommentar


        • #5
          Dreh mal dein error reporting voll auf, ev. kommen dann Fehlermeldungen etc... Schreib das an den Beginn deines(r) Scripte und schau mal ob Meldungen von PHP kommen.

          PHP-Code:
          error_reporting(-1);
          ini_set('display_errors'1); 
          --

          Du musst keine Prepared Statements nutzen. Escaping reicht auch.
          http://php.net/manual/de/mysqli.real-escape-string.php

          LG
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von hausl Beitrag anzeigen
            Dreh mal dein error reporting voll auf, ev. kommen dann Fehlermeldungen etc... Schreib das an den Beginn deines(r) Scripte und schau mal ob Meldungen von PHP kommen.

            PHP-Code:
            error_reporting(-1);
            ini_set('display_errors'1); 
            --



            http://php.net/manual/de/mysqli.real-escape-string.php

            LG
            Ja es kommt eine Fehlermeldung und zwar:
            Code:
            Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in /var/www/vhosts/dlrg-fsprogramming/www/htdocs/text.php on line 1564
            Zeilen 1563-1564
            PHP-Code:
            $result mysqli_query($connection,"SELECT * FROM Benutzer WHERE Name='".$Username."' AND Passwort='".$Passwort."'")
                    or die(
            mysqli_error($result)); 

            Kommentar


            • #7
              mysqli_connect liefert false, was zu der Fehlermeldung führt. Vermutlich falsche Zugangsdaten.

              Kommentar


              • #8
                Apache auf dem eigenen Rechner?

                Dann hast du wie der Vorredner schon schrieb wenn du die Konfiguration nicht geändert hast noch den Benutzernamen "root" ohne Password in deinem Constructor stehen. Die musst du durch die MYSQL Zugangsdaten deines Webhosting Angebotes ersetzen.
                Außerdem ist naheliegend das auch der Datenbank "Name" falsch ist.

                Kommentar


                • #9
                  Zitat von mermshaus Beitrag anzeigen
                  mysqli_connect liefert false, was zu der Fehlermeldung führt. Vermutlich falsche Zugangsdaten.
                  Zugangsdaten stimmen. Habe sie extra nochmal geprüft.

                  Kommentar


                  • #10
                    Hast du auch geprüft ob der connect *wirklich* erfolgreich war, bzw. ob es Fehler gab? Zeig den mal her (ohne Zugangsdaten bitte)
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von hausl Beitrag anzeigen
                      Hast du auch geprüft ob der connect *wirklich* erfolgreich war, bzw. ob es Fehler gab? Zeig den mal her (ohne Zugangsdaten bitte)
                      $connection = mysqli_connect($host, $Benutzer, $Passwort,$Datenbank)
                      or die ("<h1>Keine Verbindung zum Datenbankserver!</h1>");

                      Das ist der Connect Befehl die Zugangsdaten habe ich extra in der Config.php gelagert

                      Kommentar


                      • #12
                        Was sagt var_dump($connection)?

                        Kommentar


                        • #13
                          Zitat von mermshaus Beitrag anzeigen
                          Was sagt var_dump($connection)?
                          vardump sagt:
                          Code:
                          object(mysqli)#2 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(75) "mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $" ["client_version"]=> int(50010) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(23) "***.**.**.** via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(20) "5.5.40-0+wheezy1-log" ["server_version"]=> int(50540) ["stat"]=> string(142) "Uptime: 3030994 Threads: 2 Questions: 686555 Slow queries: 0 Opens: 7751 Flush tables: 1 Open tables: 368 Queries per second avg: 0.226" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(18403) ["warning_count"]=> int(0) }

                          Kommentar


                          • #14
                            Und vor dieser Zeile?

                            PHP-Code:
                            $result mysqli_query($connection,"SELECT * FROM Benutzer WHERE Name='$Username' AND Passwort='$Passwort'"

                            Kommentar


                            • #15
                              es ist vor der Zeile

                              Kommentar

                              Lädt...
                              X