Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблеми със сесията и публикациите на PHP в страницата за вход

Редактиране: Добре, значи сте направили печатна грешка в полетата на формуляра. Все още смесвате MySQL API, вижте по-долу за функцията за смесване с помощта на mysql_real_escape_string() .

Вижте name="myusername" и заданието ви POST, заедно с това за вашата парола.

Не съвпадат.

Променете name="myusername" до name="username"

и name="mypassword" към name="password"

според

$myusername=$_POST["username"];
$mypassword=$_POST["password"];

След като сте използвали отчитане на грешки , би сигнализирал за недефиниран индекс и заглавки, които вече са изпратени предупреждение; вижте по-долу.

Имате и интервали преди <?php което би довело до изход преди заглавието. Премахнете ги.

Освен това смесвате MySQL API с mysql_error() . mysql_error() трябва да се чете като mysqli_error($con) и това по-долу:

$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

което трябва да се чете като

$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);

или

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ и mysql_ функциите не се смесват.

Относно сигурността

Забелязах, че може да съхранявате пароли в обикновен текст. Ако случаят е такъв, това е силно обезкуражено.

Препоръчвам ви да използвате CRYPT_BLOWFISH или password_hash() на PHP 5.5 функция. За PHP <5.5 използвайте password_hash() compatibility pack .

Освен това, по отношение на SQL инжектирането, използвайте mysqli с изготвени констатациии , или PDO с подготвени изявления , те са много по-безопасни .

Бележки под линия

Най-добре е да добавите exit; след всяко заглавие.

header("location:login_success.php");
exit;

и за всички заглавки.

Редактиране:

Премахване

$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";  
echo $mypassword . "<br>";

след това го заменете с:

$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);

Редактиране #2 :

Това е, с което тествах кода ви и успях, затова не знам какво не е наред с настоящия ви код.

HTML ФОРМА

<form action="main_login.php" method="post" style="text-align:right;">
    Username:   
    <input type="text" name="username" value="" size=20  style="display:inline-block;margin-left:10px"required>
    <br> 
    Password:  
    <input type="text" name="password" value="" size=20 style="margin-left:12px"required> 
    <br>  
    <input type="submit" value="Log In" style="margin-left:75px"=> 
</form>

MySQL

<?php

    $DB_HOST = 'xxx';
    $DB_USER = 'xxx';
    $DB_PASS = 'xxx';
    $DB_NAME = 'xxx';

    $conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
    if($conn->connect_errno > 0) {
      die('Connection failed [' . $conn->connect_error . ']');
    }

    $myusername = stripslashes($_POST["username"]);
    $mypassword = stripslashes($_POST["password"]);
    $myusername = mysqli_real_escape_string($conn,$_POST['username']);
    $mypassword = mysqli_real_escape_string($conn,$_POST['password']);


    echo $myusername; // echos
    echo "<br>";
    echo $mypassword; // echos


    $sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
    $result=mysqli_query($conn,$sql);

    $count=mysqli_num_rows($result);

    if($count==1){
        echo "Yep";
    }
    else{
        echo "nope";
    }

N.B.: Трябва също да изчистите сесиите си (унищожи сесиите ), може да има нещо на сървъра, което кешира стари потребителски имена и пароли.

Също така се уверете, че няма интервали във вашите колони, че типовете са правилни и дължините са достатъчно дълги, за да задържат данните. Обикновено VARCHAR(255) е повече от достатъчно, но се препоръчва при използване на хеширани пароли, генерирани от password_hash() , функция, която трябва да използвате, когато съхранявате пароли.

Вижте също:

на стека.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel 5 Създаване на нов запис, който принадлежи на 3 други таблици

  2. #1060 - Дублиращ се име на колона 'id'

  3. php присвояването на потребителски идентификатор не работи

  4. Pymysql Insert Into не работи

  5. ГРЕШКА 2003 (HY000):Не мога да се свържа с MySQL сървър на AWS RDS