Probleem met inlogscript op basis van sessies

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Alex Oosterveen

Alex Oosterveen

17/02/2013 21:52:43
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?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>"
;

  }

?>


Topic titel aangepast, kies in het vervolg zelf een duidelijkere titel[/modedit]
Gewijzigd op 17/02/2013 22:17:01 door Joren de Wit
 
PHP hulp

PHP hulp

22/12/2024 09:05:34
 
Obelix Idefix

Obelix Idefix

17/02/2013 22:02:47
Quote Anchor link
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.
 
Alex Oosterveen

Alex Oosterveen

17/02/2013 22:05:39
Quote Anchor link
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
 
Joren de Wit

Joren de Wit

17/02/2013 22:14:37
Quote Anchor link
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.
 
Alex Oosterveen

Alex Oosterveen

17/02/2013 22:17:48
Quote Anchor link
Bedankt voor uw reactie Joren.

Maar wat kan ik als vervanger voor session_start gebruiken. Weet u dat misschien
 
Joren de Wit

Joren de Wit

17/02/2013 22:20:33
Quote Anchor link
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.
 
Alex Oosterveen

Alex Oosterveen

17/02/2013 22:21:26
Quote Anchor link
Ga ik doen heel erg bedankt

Toevoeging op 17/02/2013 22:32:21:

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
 
Obelix Idefix

Obelix Idefix

18/02/2013 08:31:59
Quote Anchor link
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?
 
- SanThe -

- SanThe -

18/02/2013 09:03:34
Quote Anchor link
Zet eens bovenin:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest van je script
?>
 
Erwin H

Erwin H

18/02/2013 09:29:06
Quote Anchor link
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...
 
Kris Peeters

Kris Peeters

18/02/2013 10:15:30
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?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()
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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.
 
Alex Oosterveen

Alex Oosterveen

18/02/2013 18:18:19
Quote Anchor link
Ik heb nu deze code maar blijf een wit pagina

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
session_start();
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);


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) or die(mysql_error());
    {

    $row = mysql_fetch_array($mysql) or die(mysql_error());
    $username = $row["user"];
    $wachtwoord = $row["password"];
    $id = $row["id"];
    $_SESSION['username'] = $username;
    $_SESSION['wachtwoord'] = $wachtwoord;
    $_SESSION['id'] = $id;

    
    header('Location: index.php');

    }
}

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

          </script>"
;

  }


?>
 
- Ariën  -
Beheerder

- Ariën -

18/02/2013 18:31:47
Quote Anchor link
In zo'n geval kan je het best stap voor stap in je code een echo plaatsen, zodat je kan achterhalen welk deel wel wordt uitgevoerd, en welk deel weer niet.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.