Rediger: Ok, så du har lavet en tastefejl i formularfelterne. Du blander stadig MySQL API'er, se længere nede nedenfor om blandingsfunktionen ved hjælp af mysql_real_escape_string()
.
Se på name="myusername"
og din POST-opgave, sammen med den til din adgangskode.
De matcher ikke.
Skift name="myusername"
til name="username"
og name="mypassword"
til name="password"
som pr.
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Efter at have brugt fejlrapportering , ville have signaleret et udefineret indeks og en advarsel om allerede sendt overskrifter; se nedenfor.
Du har også mellemrum før <?php
hvilket ville forårsage et output før header. Fjern dem.
Derudover blander du MySQL API'er med mysql_error()
. mysql_error()
skal læses som mysqli_error($con)
og dette nedenfor:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
som skal læses som
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
eller
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
ogmysql_
funktioner blandes ikke sammen.
Med hensyn til sikkerhed
Jeg har bemærket, at du muligvis gemmer adgangskoder i almindelig tekst. Hvis dette er tilfældet, frarådes det stærkt.
Jeg anbefaler, at du bruger CRYPT_BLOWFISH
eller PHP 5.5's password_hash()
fungere. Til PHP <5.5 skal du bruge password_hash() compatibility pack
.
Plus, med hensyn til SQL-injektion, brug mysqli
med udarbejdede udtalelser
, eller BOB med forberedte erklæringer
, de er meget sikrere .
Fodnoter
Det er bedst at tilføje exit;
efter hver overskrift.
header("location:login_success.php");
exit;
og for alle overskrifter.
Rediger:
Fjern
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
erstat den derefter med:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Rediger #2 :
Dette er hvad jeg testede din kode med og fik succes, derfor ved jeg ikke hvad der er galt med din nuværende kode.
HTML-FORMULAR
<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: Du bør også rydde ud af dine sessioner (ødelæg sessioner ), kan der være noget på serveren, der cacher gamle brugernavne og adgangskoder.
Sørg også for, at der ikke er mellemrum i dine kolonner, at typerne er korrekte, og at længderne er lange nok til at holde dataene. Normalt VARCHAR(255)
er mere end nok, men foreslås ved brug af hash-kodeord genereret af password_hash()
, en funktion, som du bør bruge, når du gemmer adgangskoder.
Se også:
på stakken.