abonnement Unibet Coolblue
pi_31032908
Ik weet niet of het handiger is om hier 2 topics voor te openen, maar dat leek mij alleen maar vervuiling Anywayz het eerste probleem is dat bij mijn inlogsysteem de in de database opgeslagen waarde van password (opgegeven via register.php) niet gelijk is aan het opgegeven password bij het inloggen.

De code van register.php is
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
include('cfg.php');//database connection
?>

<html>
<head>
<title>Register an Account</title>
</head>
<body>

<?php

if (isset($_POST['submit'])) { // if form has been submitted
   /* check they filled in what they supposed to, 
   passwords matched, username
   isn't already taken, etc. */

   if (!$_POST['uname'] | !$_POST['passwd'] | !$_POST['passwd_again'] ) {
      die('You did not fill in a required field.');
   }

   // check if username exists in database.

   if (!get_magic_quotes_gpc()) {
      $_POST['uname'] = addslashes($_POST['uname']);
   }

    $query = "SELECT user FROM gebruikers WHERE user = '".$_POST['uname']."'";
   $name_check = mysql_query($query);

   $name_checkk = mysql_num_rows($name_check);

   if ($name_checkk != 0) {
      die('Sorry, the username: <strong>'.$_POST['uname'].'</strong> is already taken, please pick another one.');
   }

   // check passwords match

   if ($_POST['passwd'] != $_POST['passwd_again']) {
      die('Passwords did not match.');
   }

   // no HTML tags in username, website, location, password

   $_POST['uname'] = strip_tags($_POST['uname']);
   $_POST['passwd'] = strip_tags($_POST['passwd']);

   // now we can add them to the database.
   // encrypt password

   $_POST['passwd'] = md5($_POST['passwd']);

   if (!get_magic_quotes_gpc()) {
      $_POST['passwd'] = addslashes($_POST['passwd']);
   }


   $insert = "INSERT INTO users (user, password) 
         VALUES ('".$_POST['uname']."', '".$_POST['passwd']."')";

   $add_member = mysql_query($insert);

?>

<h1>Registered</h1>

<p>Thank you, your information has been added to the database, you may now <a href="login.php" title="Login">log in</a>.</p>

<?php

} else {   // if form hasn't been submitted

?>
<h1>Register</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table align="center" border="1" cellspacing="0" cellpadding="3">
<tr><td>Username*:</td><td>
<input type="text" name="uname" maxlength="40">
</td></tr>
<tr><td>Password*:</td><td>
<input type="password" name="passwd" maxlength="50">
</td></tr>
<tr><td>Confirm Password*:</td><td>
<input type="password" name="passwd_again" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Sign Up">
</td></tr>
</table>
</form>

<?php
}
?>
</body>
</html>


De code voor login.php is
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php

// database connect script.
include('cfg.php');
if($logged_in == 1) {
   die('You are already logged in, '.$_SESSION['user'].'.');
}


?>
<html>
<head>
<title>Login</title>
</head>
<body>
<?php

if (isset($_POST['submit'])) { // if form has been submitted


   /* check they filled in what they were supposed to and authenticate */
   if(!$_POST['uname'] | !$_POST['passwd']) {
      die('You did not fill in a required field.');
   }

   // authenticate.
   if (!get_magic_quotes_gpc()) {
      $_POST['uname'] = addslashes($_POST['uname']);
   }

   $query = "SELECT user, password FROM users WHERE user = '".$_POST['uname']."'";
   $check = mysql_query($query);

   if (mysql_num_rows($check) == 0) {
      die('That username does not exist in our database.');
   }

   $info = mysql_fetch_row($check);

   // check passwords match

   $_POST['passwd'] = stripslashes($_POST['passwd']);
   $info['password'] = stripslashes($info['password']);
   $_POST['passwd'] = md5($_POST['passwd']);


   if ($_POST['passwd'] != $info['password']) {
          die('Incorrect password, please try again.');
   }

   // if we get here username and password are correct, 
   //register session variables and set last login time.

   
   $_POST['uname'] = stripslashes($_POST['uname']);
   $_SESSION['username'] = $_POST['uname'];
   $_SESSION['password'] = $_POST['passwd'];
?>

<h1>Logged in</h1>
<p>Welcome back <?php echo $_SESSION['username']; ?>, you are logged in.</p>

<?php


else {   // if form hasn't been submitted

?>
<center><h1>Login</h1><center>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<table align="center" border="1" cellspacing="0" cellpadding="3">
<tr><td>Username:</td><td>
<input type="text" name="uname" maxlength="40">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="passwd" maxlength="50">
</td></tr>
<tr><td colspan="2" align="right">
<input type="submit" name="submit" value="Login">
</td></tr>
</table>
</form>
<?php
}
?>
</body>
</html>



Verder is het de bedoeling dat op een ander stuk van de site gekeken wordt of database entry's bestaan of niet. Bestaan ze dan worden de waarden weergegeven in een tabel met de mogelijkheid deze waarden aan te passen. Bestaat de entry niet, dan wordt een andere tabel weergegeven die de mogelijkheid geeft een entry aan te maken. Het probleem is echter dat ook bij lege entry's de weergave/wijzig tabel wordt weergegeven, alleen dan met lege strings.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function link_weergave ($srt,$cat,$sub,$kr,$dp){          
          $query = "SELECT link, type, plaatje FROM links WHERE catid='$cat' AND subid='$sub' AND kolrij='$kr' ";
          $result = mysql_query($query);
          
          if(!$query){
                  // hier wordt een speciale tabel weergegeven
                  }
                  else{
                  // hier worden de waarden in een tabel weergegeven
                  }
?>


Wie o wie zou me uit de brand kunnen helpen... ik zit hier al een aardig tijdje mee te worstelen en ik heb geen nagels meer over om af te kluiven.
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31033794
Ik vraag me af of je wel zomaar in het $_POST array mag schrijven zoals jij doet.... ik zou dat in een nieuwe variabele opslaan.

er is trouwens een centraal php mysql topic, en je post een beetje veel code. probeer een wat duidelijker probleem te formuleren en gebruik hier en daar wat test-prints zodat je kunt zien wat er in welke variabele staat.
pi_31034783
In dat laatste blokje code staat
1if(!$query){

En omdat $query altijd gezet is weet je zeker dat dit false oplevert, da's niet de bedoeling. Het werkt vast beter met
1if(!$result){
pi_31035404
@ikke_ook

Ik heb wat test-prints gedaan bij het eerste probleem om precies te zijn in het login.php bestand bij "if ($_POST['passwd'] != $info['password']) { }". Hier kwam uit dat beide een andere waarde hadden. Waar dit hem in zit is juist het grote raadsel

@Light

Ook met
1if(!$result){
werkt het niet.
1if (mysql_num_rows($result) > 0){
heb ik ook al geprobeerd, maar om een of andere vage reden krijg ik dan overal de tabel te zien om een nieuwe entry aan te maken, behalve bij de missende entry, daar wordt de weergave tabel neergezet met lege strings.
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31035529
quote:
Op donderdag 29 september 2005 19:28 schreef uppie83 het volgende:

@Light

Ook met
[ code verwijderd ]

werkt het niet.
[ code verwijderd ]

heb ik ook al geprobeerd, maar om een of andere vage reden krijg ik dan overal de tabel te zien om een nieuwe entry aan te maken, behalve bij de missende entry, daar wordt de weergave tabel neergezet met lege strings.
Owja, stom. Dit zou wel moeten werken:
1if (mysql_num_rows($result) == 0){
pi_31035653
@Light

Je bent een held! 1 Problem down, 1 to go
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31036173
Dit bedoel ik.
1
2
3
4
5
   $passwd = md5($_POST['passwd']);

   if ($passwd != $info['password']) {
          die('Incorrect password, please try again.');
   }


Waarom al die "stripslashes" ?

en als dit niet werkt, echo die beide variabelen daarboven eens en kijk wat er in zit.
pi_31037055
@ikke_ook

Dat bovenste stuk zal ik zo proberen, eerst maar even hapje eten tussendoor De stripslashes zitten er omdat bij het register gedeelte addslashes gebruikt wordt. Zo kun je ook leestekens zoals ' en de \ zelf in het wachtwoord opnemen (tenminste als ik goed geinformeerd ben, dan klopt dit verhaal )
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31039218
ja maar stripslashes heeft pas zin als je addslashes hebt gedaan...en dat heb ik je niet zien doen op inkomende passwords...
Dus misschien moet je daar eerst zelf iets beter over nadenken voordat je dat zomaar doet.
pi_31040134
Bij het registreren (register.php) staat het volgende bij het controleren of de username al bestaat (blijft daarna ook de addslash waarde houden).
1
2
3
if (!get_magic_quotes_gpc()) {
      $_POST['uname'] = addslashes($_POST['uname']);
}

en
1
2
3
if (!get_magic_quotes_gpc()) {
      $_POST['passwd'] = addslashes($_POST['passwd']);
}

voor het password.

Of begrijp ik je nu verkeerd?
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31040417
bij username is het goed. Maar bij password... weet je wat de functie md5() doet?
Tis een beetje onzinnig om addslashes te doen als je daarna anog md5() doet en dan pas de string in de database zet.
Addslashes gebruik je tegen sqlinjection. In je 2e script gebruik je wel stripslashes op het wachtwoord, maar geen addslashes...dus daar is t zinloos.

maw, voor de username zou ik het ook gebruiken, maar voor het wachtwoord niet.

[ Bericht 15% gewijzigd door ikke_ook op 29-09-2005 21:42:01 ]
pi_31040654
Ik dacht trouwens dat je in dat $_POST array niet kon schrijven maar dat kan dus wel.
Als je nou s doet wat hieronder staat kun je zien wat er in je variabelen staat en dan kun je op die manier zien wat er fout gaat.
1
2
3
4
5
6
7
8
9
   $_POST['passwd'] = stripslashes($_POST['passwd']);
   $info['password'] = stripslashes($info['password']);
   $_POST['passwd'] = md5($_POST['passwd']);

echo $POST['passwd']."<----->".$info['passwd'];

   if ($_POST['passwd'] != $info['password']) {
          die('Incorrect password, please try again.');
   }
pi_31040867
Waarom ga je trouwens in het eerste script in regel 28 al de username in een database-query gebruiken, en doe je dan op regel 45 nog eens een strip_tags? En waarom strip_tags op het password loslaten?
pi_31042461
@ikke_ook
Ok ik heb gezien wat je bedoeld met stripslashes bij het opgegeven wachtwoord. Na wat aanwijzingen heb ik het nu als volgt neergezet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   $query = "SELECT user, password FROM users WHERE user = '".$_POST['uname']."'";
   $check = mysql_query($query);

   if (/*DB::isError($check) ||*/ mysql_num_rows($check) == 0) {
      die('That username does not exist in our database.');
   }

   $info = mysql_fetch_row($check);

   // check passwords match
echo $info['password']."<br>";
   //$_POST['passwd'] = stripslashes($_POST['passwd']);
   $info['password'] = stripslashes($info['password']);
   $_POST['passwd'] = md5($_POST['passwd']);

echo $_POST['passwd']."<----->".$info['password'];
   
   if ($_POST['passwd'] != $info['password']) {
     die('Incorrect password, please try again.');
   }


En het gekke is, bij beide keren dat $info['password'] geprint wordt blijft het leeg.


@Light

Goed plan ik verplaats de strip_tags verder naar boven in het script. Op deze plek heeft het idd weinig zin.
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31042769
vreemd....blijkbaar staat er wel een user in de database maar is t wachtwoord veld leeg.... dan zou de fout dus zitten bij het invoeren van het wachtwoord...maar daar zie ik ook niks fout gaan... misschien daar (bij dat invoer script dus) ook wat echootjes neerzetten zodat je kunt zien of daar wel wat in die wachtwoord variabele staat en waar t dan fout gaat.
Ik zie de fout ff niet iig.
pi_31043111
Ja het allervreemdste is dat het registerscript werkt, want ik heb het uitgevoerd en er staat een gebruiker met wachtwoord in de database. Dat wachtwoord is md5 gecodeerd en precies hetzelfde als de md5 gecodeerde $_POST['passwd'] die wel geprint wordt.
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31043365
vervang $info['passwd'] eens door $info[1]
quote:
mysql_fetch_row -- Get a result row as an enumerated array
pi_31043871
Tja en dan werkt het natuurlijk :p

Hardstikke bedankt allebei
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_31044785
Volgende keer ff je vraag hier : [PHP/(My)SQL] voor dummies - Deel 13 stellen, heb je sneller antwoord denk ik
pi_31045722
Zal ik doen
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')