Modifica: Ok, quindi hai fatto un errore di battitura nei campi del modulo. Stai ancora mixando API MySQL, vedi più sotto sulla funzione di mixaggio usando mysql_real_escape_string()
.
Guarda name="myusername"
e il tuo incarico POST, insieme a quello per la tua password.
Non corrispondono.
Cambia name="myusername"
a name="username"
e name="mypassword"
a name="password"
come da
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Aver utilizzato segnalazione errori , avrebbe segnalato un indice non definito e un avviso di intestazione già inviato; vedi sotto.
Hai anche spazi prima di <?php
che causerebbe un output prima dell'intestazione. Rimuovili.
Inoltre, stai mescolando API MySQL con mysql_error()
. mysql_error()
dovrebbe essere letto come mysqli_error($con)
e questo qui sotto:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
che dovrebbe essere letto come
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
o
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
emysql_
le funzioni non si mescolano insieme.
Per quanto riguarda la sicurezza
Ho notato che potresti memorizzare le password in testo normale. Se questo è il caso, è altamente sconsigliato.
Ti consiglio di utilizzare CRYPT_BLOWFISH
o password_hash()
di PHP 5.5
funzione. Per PHP <5.5 usa il password_hash() compatibility pack
.
Inoltre, per quanto riguarda l'iniezione SQL, usa mysqli
con dichiarazioni preparate
o DOP con dichiarazioni preparate
, sono molto più sicuri .
Note a piè di pagina
È meglio aggiungere exit;
dopo ogni intestazione.
header("location:login_success.php");
exit;
e per tutte le intestazioni.
Modifica:
Rimuovi
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
quindi sostituiscilo con:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Modifica n. 2 :
Questo è ciò con cui ho testato il tuo codice e ho avuto successo, quindi non so cosa c'è che non va nel tuo codice attuale.
MODULO 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";
}
NB: Dovresti anche cancellare le tue sessioni (distruggi le sessioni ), potrebbe esserci qualcosa sul server che memorizza nella cache vecchi nomi utente e password.
Assicurati inoltre che non ci siano spazi nelle colonne, che i tipi siano corretti e che le lunghezze siano sufficientemente lunghe da contenere i dati. Di solito VARCHAR(255)
è più che sufficiente, ma è consigliato quando si utilizzano password con hash generate da password_hash()
, una funzione da utilizzare durante la memorizzazione delle password.
Vedi anche:
in pila.