In het volgende script ben ik aan een login pagina aan het werken. Ja, encrypten ontbreekt en ja, ik heb geen htmlentities/ mysql_real_escape_string gebruikt. Mij gaat het er even om om een simpele count te doen.


<?php
require_once("header.php");
echo '<br/>';
echo '<br/>';

if(isset($_POST['submit'])){
   if(!empty($_POST['name']) AND !empty($_POST['password'])){
      $name = $_POST['name'];
      $pass = $_POST['password'];
      if (preg_match ('/^[A-Za-z. -]+$/', $name)){
        if(mysql_select_db("database", $connect)){
            $pass_check = mysql_query("SELECT COUNT(*) FROM person WHERE name == '$name' AND password == '$pass'");
            if(!mysql_query($pass_check)){
                 echo 'Error: Could not select:' . mysql_error();
                 echo '<br/>';
            }
            $count = mysql_result($pass_check,0); 
            if ($count == 1) { 
                echo "Het wachtwoord komt overeen.<br/>";
            } elseif ($count ==0 AND !empty($_POST['password'])) {
                echo "Dit wachtwoord bestaat niet.<br/>";
                echo $count;
            }
        }
        else{
          echo 'Couldnt connect to db!';
        }
      }
      else {
        echo 'Didnt used the right characters!';
      }
} 
   else {
      echo 'U dient de verplichte velden in te vullen.';
      $name = FALSE;
      $pass = FALSE;
   }
}
?>

<form action="" method="post">
<table>
<tr>
  <td>Username</td>
  <td><input type="text" name="name" size="20" maxlenght="20"></td>
</tr>
<tr>
  <td>Password</td>
  <td><input type="password" name="password"></td>
</tr>
<tr>
  <td></td>
  <td><input type="submit" name="submit" value="Registreer"></td>
</tr>
</table>
</form>


<?php
echo '<br/>';
echo '<br/>';
echo '<br/>';
echo '<br/>';
echo '<br/>';
require("footer.php");
?>


Dit is mijn foutmelding:

Error: Could not select:Query was empty
Er is een fout opgetreden!
Foutsoort: WARNING
Foutmelding: mysql_result() expects parameter 1 to be resource, boolean given
Bestand: C:\xampp\htdocs\logtest\login.php
Regel: 17
Dit wachtwoord bestaat niet.

Wat doe ik fout?
Oke, dan verander ik dat toch... maar ik kom nog niet echt verder.. ondertussen ben ik 3 uur verder.
@Sven, echo even de query zelf:

$query = "SELECT COUNT(*) as aantal FROM person WHERE name = '".$name."' AND password = '".$pass."'";
echo $query;
die();

wat staat er op je scherm nu?
Meest basic foutafhandeling:

<?php
$sql = "...";

$result = mysql_query($sql);

if($result == false) {
trigger_errir(mysql_error().' <br/>In query: '.$sql);
}
else {
// Verder met uitvoer script
}
?>

ps. En uiteraard moet je wel zorgen dan $name en $pass gevuld zijn als je die query wilt uitvoeren...
je bedoelt SELECT COUNT of $count?
Ozzie PHP op 22/07/2011 15:24:21

@Sven, echo even de query zelf:

$query = "SELECT COUNT(*) as aantal FROM person WHERE name = '".$name."' AND password = '".$pass."'";
echo $query;
die();

wat staat er op je scherm nu?



Hmm, krijg nu heel wat anders...

Error: Could not select:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
Het wachtwoord komt overeen.

Omdat ik in eerste instantie de naam en paswoord er 8x heb in zitten, omdat ik met mijn login ben bezig geweest. Nu is het zo dat ik 1 nieuwe heb gemaakt en nu komt het wachtwoord overeen.

if(!mysql_query($pass_count)){
echo 'Error: Could not select:' . mysql_error();
echo '<br/>';

Hier krijg ik wel de output van.. waarschijnlijk klopt de gehele if statement niet, maarja je moet wat proberen. Als ik dat hele blok met mysql_error eruit haal dan heb ik helemaal geen foutmelding meer.

Is dat een goed teken?

Heb je nou al die query ge-echoot? Zij mijn opmerking hierboven?
Nee, dat is geen goed teken! Dan geef je de fout alleen niet weer, maar de fout zelf is er nog steeds...


if(!mysql_query($pass_count)){
echo 'Error: Could not select:' . mysql_error();
echo '<br/>';

Bovendien geef je in dit stukje foutafhandeling nog steeds niet de query die fout gegaan is. Echo dus ook altijd, in dit geval, $pass_count zodat je weet hoe de uitgevoerde query eruit zag...
Oke, ik heb de error handeling terug gezet... nieuwe code:

if(isset($_POST['submit'])){
   if(!empty($_POST['name']) AND !empty($_POST['password'])){
      $name = $_POST['name'];
      $pass = $_POST['password'];
      if (preg_match ('/^[A-Za-z. -]+$/', $name)){
        if(mysql_select_db("database", $connect)){
            $pass_check = mysql_query("SELECT COUNT(*) FROM persons WHERE name = '".$name."' AND password = '".$pass."'");
            $pass_count = mysql_result($pass_check,0); 
             if(!mysql_query($pass_count)){
                 echo 'Error: Could not select:' . mysql_error(). '<br/>';
                 echo 'User: '.$name. '<br/>';
                 echo 'Pass: '.$pass.'<br/>';
                 echo 'Count: '.$pass_count.'<br/>';
                 echo '<br/>';
            }  
            if ($pass_count == 1) { 
                echo "Het wachtwoord komt overeen.<br/>";
            } elseif ($pass_count ==0 AND !empty($_POST['password'])) {
                echo "Dit wachtwoord bestaat niet.<br/>";
                echo $pass_count;
                
            }
        }
        else{
          echo 'Couldnt connect to db!';
        }
      }
      else {
        echo 'Didnt used the right characters!';
      }
} 
   else {
      echo 'U dient de verplichte velden in te vullen.';
      $name = FALSE;
      $pass = FALSE;
   }
}


Error report:
Error: Could not select:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
User: sven
Pass: x
Count: 1

Zo beter?

[size=xsmall]Toevoeging op 22/07/2011 15:50:17:[/size]

In SQL:

SELECT COUNT(*) FROM persons WHERE name = '$name' AND password = '$pass'

SELECT COUNT( * )
FROM persons
WHERE name = '$name'
AND PASSWORD = '$pass'

Pakt hij PASSWORD nu als een column?
Nee, je moet de query echoën waar je script op stuk loopt. Zonder dat je die query ziet, weet je toch niet waar die foutmelding op slaat?

Kortom:
<?php
$sql = "SELECT COUNT(*) FROM persons WHERE name = '".$name."' AND password = '".$pass."'";
$result = mysql_query($sql);

if($result == false) {
trigger_error(mysql_error().' <br/>In query: '.$sql);
}
else {
$pass_count = mysql_result($result, 0);

// Verder met je if-statement
}

Reageren