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