Ik heb een inlog.php geschreven. Maar Hij komt niet uit op de header location.

Het blijft een witte pagina. Bij error reporting geen errors.

Hier het script

<?php
session_start();

if($_POST["name"] != "" && $_POST["password"] != "")

{
include('config.php');
$name = mysql_real_escape_string($_POST['name']);
$pass = mysql_real_escape_string($_POST['password']);
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
if(mysql_num_rows($mysql) < 1)
{
$row = mysql_fetch_array($mysql) or die(mysql_error());
$username = $row["user"];
$wachtwoord = $row["password"];
$id = $row["id"];
session_register("username");
session_register("wachtwoord");
session_register("id");
$_SESSION["username"] = $username;
$_SESSION["wachtwoord"] = $wachtwoord;
$_SESSION["id"] = $id;
` header('Location: index.php');
exit;
}



}

else
{
echo "<script> alert('Geen geldige gebruikersnaam/wachtwoord');
history.go(-1);

</script>";

}
?>

Begin met het verzinnen van een betere topic-titel; 1 die het probleem omschrijft.

Klik eens op session_register --> "This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0"

Verder zie ik hier nergens hoe/waar je bij een header zou kunnen komen.

mysql_real_escape_string gebruik je _in_ een query.
Geadviseerd wordt om variabelen buiten quotes te houden.
Je slaat het wachtwoord niet beveiligd op?!
Benoem het veld/de velden die je wilt opvragen ipv * te gebruiken.
mysql_fetch_array is hier niet nodig, mysql_fetch_assoc volstaat (je maakt immers geen gebruik van de array mogelijkheden).
Bij minder dan 1 resultaat, moet de if doorlopen worden? Verwacht dat bij exact 1 resultaat dit zou moeten gebeuren.
Or die is geen foutafhandeling.
Wat is het nut van regel 14, 15 en 16?
Waarom een exit opo regel 24?
Script consequent: de {} bij de else laat je op een andere plek inspringen dan bij de if.
Ik ben helaas een beginner.

Dan moet ik eens gaan kijken hoe ik die session oplos.

Ik had inmiddels de header geplaatst.

Bedankt voor uw reactie
Obelix en Idefix op 17/02/2013 22:02:47

mysql_real_escape_string gebruik je _in_ een query.

De manier waarop de escape functie hier gebruikt wordt is niet fout, het is prima om 'veilige' variabelen aan te maken.

Wat betreft alle andere punten: daar ben ik het volledig mee eens. Neem ook eens een kijkje in deze PHP beginnershandleiding.
Bedankt voor uw reactie Joren.

Maar wat kan ik als vervanger voor session_start gebruiken. Weet u dat misschien
De functie session_start() moet je altijd wel gebruiken. Het gaat om session_register() die je niet meer gebruiken moet. Zie onder andere de handleiding die ik gaf, daar staat een voorbeeld van het correcte gebruik in.
Ga ik doen heel erg bedankt

[size=xsmall]Toevoeging op 17/02/2013 22:32:21:[/size]

Kan iemand mij misschien wat meer uitleggen erover. Ik probeer meerdere stappen maar het blijft een witte pagina.

Kortom ik als newbie kom er gewoon niet uit :S
Wat heb je nu als script?

Ga debuggen:
echo $mysql eens naar het scherm. Klopt dat met wat je zou verwachten?
Wat is de uitkomst van mysql_num_rows?
Zet eens bovenin:
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest van je script
?>
Obelix en Idefix op 17/02/2013 22:02:47

Bij minder dan 1 resultaat, moet de if doorlopen worden? Verwacht dat bij exact 1 resultaat dit zou moeten gebeuren.

Wat heb je al met deze tip gedaan? Want je gaat nu iemand inloggen als die niet gevonden is in de database. Dat kan natuurlijk nooit goed gaan...

Obelix en Idefix op 17/02/2013 22:02:47

... 1 resultaat, moet de if doorlopen worden...


Wanneer je 1 record wil ophalen (bv. dit is typisch voor een login), wil je weten of mysql_query() succesvol een record heeft opgehaald, met if.
nl zo:

<?php
$res = mysql_query("SELECT * FROM users WHERE name='$name' AND password='$pass'");
if ($row=mysql_fetch_assoc($res)) { // geen mysql_num_rows nodig
// $row is hier het eerste (en enige) record
}
else {
// eventueel hier een boodschap 'verkeerde login' of zo
}
?>

Als je meerdere records nodig hebt, heb je een if() nodig die meerdere malen wordt uitgevoerd. Die noemen we while()
<?php
$res = mysql_query(...)
while ($row=mysql_fetch_assoc($res)) { // geen mysql_num_rows nodig
// $row is hier telkens een nieuw record. Tot alle records overlopen zijn, dan stopt de while()
}
?>

Alex Oosterveen op 17/02/2013 22:05:39
Ik ben helaas een beginner.

Hackers zijn geen beginners.
Zolang je niet deftig beseft waarmee je bezig bent, is een eigen login-systeem heel erg gevaarlijk.
Ik zou het iedereen afraden om zo iets online te zetten.

Reageren