Hallo,
ik ben echt al een aantal dagen bezig met een login systeem en wat ik ook doe telkens krijg ik weer een andere error! Nu ben ik zover dat ik geen errors meer krijg maar ik kan ook niet inloggen. Het maakt niet uit of ik het juiste wacht woord invul hij knalt hem telkens naar wrong pass or user.
Ik wordt er debiel van
<?php
include_once("connect.php") ;


// username and password sent from form
$username=$_POST['username'];
$password=$_POST['password'];

// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

$sql="SELECT * FROM admis WHERE username='$username' and password='$password'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);


// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("username");
session_register("password");
header("location:admin.php");
}
else {
echo "Wrong Username or Password";
}
?>
Ja ik zal voortaan een betere titel verzinnen mijn excuses waren de frustraties=S

En weet iemand misschien of ik nogwat aan mijn script moet veranderen als ik mijn password md5 incrypted wegschrijf?
script:
<?php
include_once("connect.php") ;

$_POST['username'] = stripslashes(mysql_real_escape_string($_POST['username']));
$_POST['password'] = stripslashes(mysql_real_escape_string($_POST['password']));

$sql="SELECT * FROM admis WHERE username='" . $_POST['username'] . "' and password='" . $_POST['password'] . "'";
$result=mysql_query($sql) or die ("De query is mislukt $query. ".mysql_error());

$count=mysql_num_rows($result) ;

if($count==1){
session_register("username");
session_register("password");
header("location:admin.php");
}
else {
echo "Wrong Username or Password";
}
?>
Waarom gebruiker je sessien register als ik vragen mag?
Je kan het beter op de volgende manier doen:

<?PHP

include_once('connect.php');

$Username = stripslashes(mysql_real_escape_string($_POST['username']));
$Password = stripslashes(mysql_real_escape_string(md5($_POST['password'])));

/* Query uitvoeren. */
$sql =
"
SELECT
ID
FROM
admis
WHERE
username = '".$Username."'
AND
password = '".$Password."'
";

/* Resultaat van de query. */
$result = mysql_query($sql);

/* Kijken of de query is gelukt. */
if(!$result)
{
echo 'Foutje met de query, Query: '.$sql.'';
}
else
{
/* Kijken of er een resultaat is. */
if(mysql_num_rows($result) == 0)
{
/* Geen resultaat in de database. */
echo 'Geen gebruiker gevonden met deze combinatie.';
}
else
{
/* Sessie aanmaken en doorsturen. */
$Rij = mysql_fetch_assoc($result);

$_SESSION['USER_ID'] = $Rij['ID'];
$_SESSION['USER_IP'] = $_SERVER['REMOTE_ADDR'];

/* Doorsturen. */
header('location: blaat.php');
}
}

?>

Controleer je wel of de velden zijn ingevuld?
Je moet zelf nog even de code goed maken naar jouw wensen.
En als ik dit gebruik moet ik natuurlijk ook iets anders zetten boven mijn paginas die beveiligd zijn en niet
<?
session_start();
if(!session_is_registered(username)){
header("location:index.php");
}else{
?>
if(!isset($SESSION['...']) or $_SESSION['....'] != '....'){
<?PHP

if(!isset($_SESSION['USER_ID']) or $_SESSION['USER_ID'] == 0)
{
header('location: index.php');
}

?>

Of voor ip controle:

<?PHP

if(!isset($_SESSION['USER_IP']) or $_SESSION['USER_IP'] != $_SERVER['REMOTE_ADDR'])
{
header('location: index.php');
}

?>
En wat is hier het grote voordeel van?
En wat is hier het grote voordeel van?


Omdat je in het hier en nu script en niet in de middeleeuwen.
Ligt het nou aan mij, of is de toepassing van stripslashes in combinatie met mysql_real_escape_string in de posts hierboven een beetje vreemd. Bij het registratie formulier zorg je altijd eerst dat eventuele slashes toegevoegd door magic quotes worden weggehaald, dmv stripslashes, daarna pas je mysql_real_escape_string toe, en díe waarde wordt toegevoegd in de database. Bij het controleren zou je dus eerst moeten controleren of magic quotes aanstaan, evt. stripslashes toepassen, en dán mysql_real_escape string.

Inderdaad is session register middeleeuws, dus maak gewoon gebruik van de $_SESSION global.

En lees nog even wat tutorials door over foutafhandeling.

edit: Om mijn verhaal te verduidelijken en bevestigen, zie "example 3" van [php]mysql_real_escape_string[/php] en zie bij de notes:

Note: If magic_quotes_gpc is enabled, first apply stripslashes() to the data. Using this function on data which has already been escaped will escape the data twice.
Ik hou van de middeleeuwen, toen hadden ze tenminste nog lijfstraffen en dergelijke. Niet dat ik graag toen leefde maar Mijn vraag is of het BETER functioneerd. Waarom iets werkends vervangen met iets waarvan je het voordeel niet in ziet.

nick schreef op 20.05.2009 13:45
Ik hou van de middeleeuwen, toen hadden ze tenminste nog lijfstraffen en dergelijke. Niet dat ik graag toen leefde maar Mijn vraag is of het BETER functioneerd. Waarom iets werkends vervangen met iets waarvan je het voordeel niet in ziet.



Omdat het enorme veiligheidslekken met zich meebrengt:

Ziehier

1 van de vele documenten. En daar word er ook op gewezen dat het vanaf 5.3 standaard uit staat, en vanaf 6.0 niet meer bestaat.

Vrees voor de dag dat alle programmeurs gaan zeggen: "ja, maar het werkt toch, waarom zou ik het verbeteren?"

Reageren