Bewerken: Oké, je hebt dus een typfout gemaakt in de formuliervelden. Je mixt nog steeds MySQL API's, zie verderop over de mixfunctie met mysql_real_escape_string()
.
Kijk naar name="myusername"
en uw POST-toewijzing, samen met die voor uw wachtwoord.
Ze komen niet overeen.
Wijzig name="myusername"
naar name="username"
en name="mypassword"
naar name="password"
volgens
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
Na gebruik te hebben gemaakt van foutrapportage , zou een niet-gedefinieerde index hebben gesignaleerd en een headers al verzonden waarschuwing; zie hieronder.
Je hebt ook spaties voor <?php
die een uitvoer vóór de kop zou veroorzaken. Verwijder ze.
Bovendien mix je MySQL API's met mysql_error()
. mysql_error()
moet lezen als mysqli_error($con)
en dit hieronder:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
die moet lezen als
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
of
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
mysqli_
enmysql_
functies vermengen zich niet met elkaar.
Over beveiliging
Ik heb gemerkt dat u wachtwoorden in platte tekst opslaat. Als dit het geval is, wordt dit ten zeerste afgeraden.
Ik raad je aan om CRYPT_BLOWFISH te gebruiken
of PHP 5.5's password_hash()
functie. Gebruik voor PHP <5.5 het password_hash() compatibility pack
.
Plus, met betrekking tot SQL-injectie, gebruik mysqli
met voorbereide verklaringen
, of BOB met voorbereide verklaringen
, ze zijn veel veiliger .
Voetnoten
Het is het beste om exit;
. toe te voegen na elke kop.
header("location:login_success.php");
exit;
en voor alle koppen.
Bewerken:
Verwijderen
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
vervang het dan door:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
Bewerk #2 :
Dit is waarmee ik je code heb getest en succes heb gehad, daarom weet ik niet wat er mis is met je huidige code.
HTML-FORMULIER
<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>
MijnSQL
<?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: Je moet ook je sessies wissen (sessies vernietigen ), kan er iets op de server zijn dat oude gebruikersnamen en wachtwoorden in de cache opslaat.
Zorg er ook voor dat er geen spaties in uw kolommen zijn, dat de typen correct zijn en dat de lengtes lang genoeg zijn om de gegevens te bevatten. Gewoonlijk VARCHAR(255)
is meer dan genoeg, maar wordt aanbevolen bij het gebruik van gehashte wachtwoorden die zijn gegenereerd door password_hash()
, een functie die u zou moeten gebruiken bij het opslaan van wachtwoorden.
Zie ook:
op stapel.