Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Sesi Php dan posting masalah di halaman login

Sunting: Ok, jadi Anda telah membuat kesalahan ketik di bidang formulir. Anda masih mencampur API MySQL, lihat lebih jauh di bawah tentang fungsi pencampuran menggunakan mysql_real_escape_string() .

Lihat name="myusername" dan tugas POST Anda, bersama dengan satu untuk kata sandi Anda.

Mereka tidak cocok.

Ubah name="myusername" ke name="username"

dan name="mypassword" ke name="password"

sesuai

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

Setelah menggunakan pelaporan kesalahan , akan menandakan indeks yang tidak ditentukan dan tajuk sudah mengirim peringatan; lihat di bawah.

Anda juga memiliki spasi sebelum <?php yang akan menyebabkan output sebelum header. Hapus mereka.

Plus, Anda mencampur API MySQL dengan mysql_error() . mysql_error() harus dibaca sebagai mysqli_error($con) dan ini di bawah ini:

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

yang seharusnya dibaca sebagai

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

atau

$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
  • mysqli_ dan mysql_ fungsi tidak saling bercampur.

Tentang keamanan

Saya perhatikan Anda mungkin menyimpan kata sandi dalam teks biasa. Jika ini masalahnya, sangat tidak disarankan.

Saya sarankan Anda menggunakan CRYPT_BLOWFISH atau PHP 5.5 password_hash() fungsi. Untuk PHP <5.5 gunakan password_hash() compatibility pack .

Plus, sehubungan dengan injeksi SQL, gunakan mysqli dengan pernyataan yang telah disiapkan , atau PDO dengan pernyataan yang disiapkan , mereka jauh lebih aman .

Catatan kaki

Yang terbaik adalah menambahkan exit; setelah setiap tajuk.

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

dan untuk semua judul.

Sunting:

Hapus

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

lalu ganti dengan:

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

Edit #2 :

Inilah yang saya uji dengan kode Anda, dan berhasil, oleh karena itu saya tidak tahu apa yang salah dengan kode Anda saat ini.

FORMULIR 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.: Anda juga harus menghapus sesi Anda (menghancurkan sesi ), mungkin ada sesuatu di server yang menyimpan nama pengguna dan sandi lama.

Pastikan juga tidak ada spasi di kolom Anda, jenisnya benar dan panjangnya cukup panjang untuk menampung data. Biasanya VARCHAR(255) lebih dari cukup, tetapi disarankan saat menggunakan kata sandi hash yang dihasilkan oleh password_hash() , fungsi yang harus Anda gunakan saat menyimpan sandi.

Lihat juga:

di Stack.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memasukkan file BLOB dan CLOB di MySQL?

  2. Penandaan hierarkis dalam SQL

  3. Bagaimana cara keluar dari kata kunci nilai di mysql saat menggunakan pernyataan Pilih

  4. Apakah ada alasan yang sah untuk menggunakan soket Unix melalui TCP/IP dengan mysql?

  5. MySQL memesan dengan duplikat atas terlebih dahulu