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?
Joren de Wit op 22/07/2011 15:50:30

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?

Ik heb het pas 3x gevraagd :-s


p.s. trigger_errir moet zijn trigger_error
Ozzie PHP op 22/07/2011 15:54:20

p.s. trigger_errir moet zijn trigger_error

[offtopic]Zag de typo net ook :-)[/offtopic]
Hmm,

Ik denk dat hij geen database had geselecteerd. :S mijn code was sowieso fout dus ik ben wel blij dat ik nu een goed voorbeeld heb hoe het wel moet. Dit zorgt meteen voor een goede error afhandeling.

nieuwe script:


<?php
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)){
            $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);
                echo $pass_count;
                if ($pass_count == 1) { 
                    echo "Het wachtwoord komt overeen.<br/>";
                } elseif ($pass_count ==0 AND !empty($_POST['password'])) {
                    echo "Dit wachtwoord bestaat niet.<br/>";
                    
                }
           } 
        }  
            
    }
  }
} 
?>
Oké, het werkt nu dan allemaal?
Ja het werkt zeker, nu nog een cookie aanmaken en kijken wat de volgende problemen zijn ;)

Hartelijk dank!
Mooi zo. Succes.

(Jelmer ook bedant voor het meedenken ;))
En wat staat me nu nog tegen:

<?php
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)){
            $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);
                echo $pass_count;
                if ($pass_count == 1) { 
                    echo "Het wachtwoord komt overeen.<br/>";
                } elseif ($pass_count ==0 AND !empty($_POST['password'])) {
                    echo "Dit wachtwoord bestaat niet.<br/>";
                    
                }
           } 
        }  
            
    }
  }
} 
?> 

regel 1: op z'n manier controleer je niet of er iets gepost wordt
regel 2: de zinloze functie empty wordt weer eens toegepast
regel 4 en 5: je maakt overbodige variabelen aan
regel 7: je moet _select_db niet binnen een if constructie verstoppen
regel 8: je moet bij Aggregate functions binnen SQL een alias toekennen
regel 10: je moet type comparision toepassen
regel 14: je gebruik de verkeerde fetch-methode
regel 18: idem zie opmerking regel 2

Algemeen: je quote niet consequent strings

Maar ja nu ik het SELECT statement nog eens bekijk is de gehele code kolder

Note: voorgaande posts heb ik niet bekeken / gelezen
@Noppes (of iemand anders?): waarom is volgens jou de functie empty zinloos?
En waarom is deze manier van controleren dan niet goed?

if(!empty($_POST['name') {
// doe iets?
}

Wat is hier fout aan?

Reageren