尝试修复旧的php / mysql登录系统

时间:2018-11-14 21:19:18

标签: php mysql

几年后,我试图再次修复旧网站。 但是现在我看到我的登录系统在此php版本中不再起作用。

因为它在mysql上运行。但是我已经在Google上搜索了en,试图修复它,但是没有运气。无法连接到数据库错误我已经用新的mysqli连接修复了。但是在那之后,总是会出现错误。

现在,由于我的网站在该系统上运行,因此我将手放在头发上。

请不要讨厌那些废话和陈旧的评论。这是我使用并学习的第一个代码。

很抱歉,如果这已经是一个问题,但是我被困住了,不知道如何解决。

Ps。对不起,语法不好。

<?php
// Een beveiliging om te voorkomen dat men in je header.php probeert te openen.
if(basename($_SERVER['PHP_SELF']) == "header.php") {
  header("Location: index.php");
}

// Configuratie laden
include_once('config.php');

// We maken eerst een classe aan
class login {
  // Variabelen
  private $loginsessie = false;
  public $fouten = "";
  private $gebruikers_info = array();
  public $database_velden = array();
  private $recheck = 0;

  // Deze functie wordt aangeroepen bij het laden van de classe
  public function __construct() {
    // maak verbinding met de database, als het niet lukt breek het af
    $verbinding = mysqli_connect(mysql_host, mysql_user, mysql_password, mysql_database) or die(mysql_error());
  //  mysql_select_db(mysql_database, $verbinding) or die (mysql_error());

    // Controlleren op een login sessie
    $this->check_session();

    // De loguit actie koppelen aan de end_session functie
    if(isset($_GET['actie']) && $_GET['actie'] == 'uitloggen' && $this->loginsessie === true) {
      $this->end_session();
    }
  }

  // Init functie
  public function init() {
    // Controlleren op een POST request, wanneer er nog geen loginsessie is
    if($_SERVER['REQUEST_METHOD'] == 'POST') {  /* was eerst    if($_SERVER['REQUEST_METHOD'] == 'POST' && $this->loginsessie===false) {*/
      if(isset($_POST['actie'])) {
        switch($_POST['actie']) {
          case 'login':  $this->controleer_gegevens(); break;
          case 'registreer_gebruiker': $this->registreer_gebruiker(); break;
        }
      }
    }
  }

  // Functie om het ip adres op te vragen
  public function get_ip() {
    if (isSet($_SERVER)) {
      if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
      } elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
        $realip = $_SERVER["HTTP_CLIENT_IP"];
      } else {
        $realip = $_SERVER["REMOTE_ADDR"];
      }
    } else {
      if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
        $realip = getenv( 'HTTP_X_FORWARDED_FOR' );
      } elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
        $realip = getenv( 'HTTP_CLIENT_IP' );
      } else {
        $realip = getenv( 'REMOTE_ADDR' );
      }
    }
    return $realip;
  }
  
  private function registreer_gebruiker() {
    if(isset($_POST['actie']) && $_POST['actie'] == 'registreer_gebruiker') {      
      $velden = array();

      if(!is_array($this->database_velden) || !count($this->database_velden)) {
        die("FOUT: Geen velden opgegeven.");
      }

      // Alle velden uit de array doorlopen
      foreach($this->database_velden as $veld) {
        $veld = split(':', $veld);
        // Veldnaam
        $veld_naam = $veld[0];
        $velden[$veld_naam] = $_POST[$veld_naam];
        // Veld instellingen
        $veld_instellingen = split('\|', $veld[1]);

        foreach($veld_instellingen as $instelling) {
          if($instelling == 'verplicht' && empty($velden[$veld_naam])) {
            // Controlleer of het veld is ingevuld
            $this->fouten .= "- Het veld '". $veld_naam ."' is verplicht<br />";
          } elseif($instelling == 'md5') {
            // Codeer naar md5
            $velden[$veld_naam] = md5($velden[$veld_naam]);
          } elseif(substr($instelling, 0, 3) == 'min') {
            // Controlleer minimum stringlengte
            if(strlen($velden[$veld_naam]) < (int) substr($instelling, 4)) {
              $this->fouten .= "- Het veld '". $veld_naam ."' is te kort.<br />";
            }
          } elseif(substr($instelling, 0, 3) == 'max') {
            // Controleer maximum stringlengte
            if(strlen($velden[$veld_naam]) > (int) substr($instelling, 4)) {
              $this->fouten .= "- Het veld '". $veld_naam ."' is te lang.<br />";
            }
          } elseif(substr($instelling, 0, 2) == "==") {
            if($velden[$veld_naam] != $_POST[substr($instelling, 2)]) {
              $this->fouten .= '- De velden '. $veld_naam .' en '. substr($instelling, 2) .' komen niet overeen.<br />';
            }     
          } elseif($instelling == "avatar") {
            $velden[$veld_naam] = ('http://habmoon.org/status/habbie?habbie='.$_POST["gebruikersnaam"].'&direction=4&head_direction=3&action=wlk&gesture=sml&size=b');
          } elseif($instelling == 'uniek') {
            $q = mysql_query("SELECT ". $veld_naam ." FROM gebruikers WHERE ". $veld_naam ." = '". mysql_real_escape_string($velden[$veld_naam]) ."' ");
            if(!$q) {
              $this->fouten .= '- Er is een MySQL fout opgetreden <br />';
            } else {
              if(mysql_num_rows($q)) {
                $this->fouten .= 'De inhoud van veld '. $veld_naam .' bestaat al<br />';
              }
            }          
          } elseif($instelling == 'email') {
            // Controleer email
            if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $velden[$veld_naam])) {
              $this->fouten .= "- Het email is incorrect.<br />";          
            }
          }
        }
      }

      if(!$this->fouten) {
        // SQL genereren
        $SQL  = "INSERT INTO gebruikers ";
        $SQL_TMP = "";

        foreach($velden as $key=>$value) {
          $SQL_TMP .= ", ". $key ." = '". mysql_real_escape_string($value) ."' ";
        }

        // Eerste komma weghalen
        $SQL .= "SET ".preg_replace("#^,{0,1}#", '', $SQL_TMP);

        if($SQL_TMP && mysql_query($SQL)) {
          header("Location: ../index.php");
        } else {
          $this->fouten = "Er is een MySQL fout opgetreden.";
          /*
            om te debuggen gebruik:
            die(mysql_error());
          */
        }
      }    
    }
  }

  // Functie om gegevens te controleren
  private function controleer_gegevens() {
    // Kijken of we het juiste formulier gebruiken    
    if(isset($_POST['actie']) && $_POST['actie'] == 'login') {
      // Gegevens van formulier opvragen en escapen tegen mysql injectie
      $gebruiker = mysql_real_escape_string($_POST['gebruikersnaam']);
      $wachtwoord = mysql_real_escape_string($_POST['wachtwoord']);

      // Kijken of we MD5 moeten gebruiken (zie configuratie bestand)
      if(login_password_md5===true) {
        $wachtwoord = md5($wachtwoord);
      }
    
      // Kijken of de gegevens correct zijn
      $query = mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam = '". $gebruiker ."' AND wachtwoord = '". $wachtwoord ."'");
      if(mysql_num_rows($query)) {
        // Array gebruikersinfo maken
        $this->gebruikersinfo = array();
        $this->gebruikersinfo['info'] = mysql_fetch_array($query);

        // Start sessie
        return $this->start_session();
      } else {
        // Kijken wat er mis ging:
        if(mysql_error()) {
          $this->fouten = "Er is een mysql fout opgetreden.";
        } else {
          $this->fouten = "Gebruiksnaam en/of wachtwoord is incorrect.";
        }
      }
    }
  }

  //  Functie om de sessie te controlleren
  private function check_session() {
    // Controleren op cookie
    if($this->recheck>=3) {
      $this->fouten = "Er is een ongeldige cookie sleutel gevonden die niet kon worden verwijderd.";
      return false;
    }
    if(isset($_COOKIE['sid']) && !empty($_COOKIE['sid'])) {
      // Er is een niet-lege cookie
      $sid = mysql_real_escape_string($_COOKIE['sid']);
    
      // Controleren of sleutel en ip aanwezig zijn in database
      $query = mysql_query("SELECT * FROM logins WHERE sid = '". $sid ."' AND ip = '". $this->get_ip() ."'") or die("Er is een fout opgetreden.");
      if(mysql_num_rows($query)) {
        $f = mysql_fetch_array($query);

        // Gegevens uit database ophalen        
        $query = mysql_query("SELECT * FROM gebruikers WHERE id = '". $f['uid'] ."' ");
        if(mysql_num_rows($query)) {
          $this->loginsessie = true;
          $this->gebruikersinfo = array();
          $this->gebruikersinfo['info'] = mysql_fetch_array($query);
        }
      }
    } else {
      // Er is een ongeldige sleutel gevonden, laten we die eens verwijderen
      $secondes = login_session_time * 3600;
      setcookie("sid", "", time()-$secondes, "/");
      $this->recheck = $this->recheck + 1;
    }
  }

  // De functie om de login sessie te starten
  private function start_session() {
    // Unieke sleutel maken
    $this->gebruikersinfo['sleutel'] = md5(rand(0,99999999999).date("dmyhis"));

    // Informatie invoegen in database
    $info = $this->gebruikersinfo['info'];
    $SQL  = "INSERT INTO logins ";
    $SQL .= "SET uid    = '". mysql_real_escape_string($info['id']) ."' ";
    $SQL .= ",   sid   = '". mysql_real_escape_string($this->gebruikersinfo['sleutel']) ."' ";
    $SQL .= ",   ip    = '". mysql_real_escape_string($this->get_ip()) ."' ";
    $SQL .= ",   datum = NOW() ";
    mysql_query($SQL) or die("Error: kon niet inloggen.");

    // Secondes maken van uren, zie configuratie bestand
    $secondes = login_session_time * 3600;
    setcookie("sid", $this->gebruikersinfo['sleutel'], time()+$secondes, "/");

    // Verversing
    header("Location: ".$_SERVER['REQUEST_URI']);
  }

  private function end_session() {
    // index.php?actie=uitloggen
    // Verwijder sessie
    mysql_query("DELETE FROM logins WHERE sid = '". $_COOKIE['sid'] ."' AND ip = '". $this->get_ip() ."'") or die("Er is een fout opgetreden.");
  
    // verwijder cookie
    $secondes = login_session_time * 3600;
    setcookie("sid", "", time()-$secondes, "/");
  
    // Redirect
    $url = str_replace("actie=uitloggen", "", $_SERVER['REQUEST_URI']); // haal de actie weg
    header("Location: ".$url);
  }

  // Functie om gegevens op te vragen
  public function get_login_info($wat=false) {
    // Is er iets aanwezig?
    if(!$this->loginsessie || !count($this->gebruikersinfo)) {
      return false;
    } else {
      if($wat==='alles') {
        return $this->gebruikersinfo['info'];
      } elseif(isset($this->gebruikersinfo['info'][$wat])) {
        return $this->gebruikersinfo['info'][$wat];
      } else {
        return true;
      }
    }
  }
}

// Class starten
$login = new login();
$login->database_velden = array(
  /*
    Velden waarvan de value in de database komt. Plaats die in de database en formulier.
    
    Syntax: veldnaam:instellingen
    
    Instellingen scheiden met '|'.

    Instellingen:
      'verplicht':  [string] Verplicht veld.
      'min=int':  [int] Minimum aantal karakters dat is vereist.
      'max=int':  [int] Maximum aantal karakters dat is vereist.  
      '==veldnaam':  [string] waarde van dit veld moet overeenkomen met 'veldnaam'.
      'md5':    [string] Codeer met md5. MOET als laatste.    
  */
  'gebruikersnaam:verplicht|uniek|min=3|max=15|',
  'rank:max=15|',
  'email:max=100|email|',
  'avatar:max=100|avatar|',
  'wachtwoord:verplicht|min=3|max=16|==wachtwoord2|md5|' /* was eerst   'wachtwoord:verplicht|min=3|max=16|==wachtwoord2'*/
);
$login->init();
?>

我已经完成了他们在另一篇文章中所说的,但是仍然出现以下错误:

注意:未定义的变量:第158行的C:\ xampp \ htdocs \ Admin \ header.php中的con

警告:mysqli_real_escape_string()期望参数1为mysqli,在第158行的C:\ xampp \ htdocs \ Admin \ header.php中给出空值

注意:未定义的变量:第159行的C:\ xampp \ htdocs \ Admin \ header.php中的con

警告:mysqli_real_escape_string()期望参数1为mysqli,在159行的C:\ xampp \ htdocs \ Admin \ header.php中给出空值

注意:未定义的变量:第167行的C:\ xampp \ htdocs \ Admin \ header.php中的con

警告:mysqli_query()期望参数1为mysqli,在第167行的C:\ xampp \ htdocs \ Admin \ header.php中给出空值

警告:mysqli_num_rows()期望参数1为mysqli_result,在第168行的C:\ xampp \ htdocs \ Admin \ header.php中给出空值

注意:未定义的变量:第177行的C:\ xampp \ htdocs \ Admin \ header.php中的con

警告:mysqli_error()期望参数1为mysqli,第177行的C:\ xampp \ htdocs \ Admin \ header.php中给出的值为空

0 个答案:

没有答案