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?
Wat denk je nu met empty te controleren dan?

en aan dat stukje ontbreekt een ]
Afgezien van de ] inderdaad.

Mijn vraag is.... waarom is empty volgens jou een verkeerde manier om iets te controleren. Je controleert of de waarde gevuld is. Deze waardes leveren false op:

- "" (an empty string)
- 0 (0 as an integer)
- 0.0 (0 as a float)
- "0" (0 as a string)
- NULL
- FALSE
- array() (an empty array)
- var $var; (a variable declared, but without a value in a class)

Alle andere waardes leveren true op. Dat klopt toch gewoon? Waarom vind jij die functie dan zinloos?
En het feit is nu, dat je daar zelf heel diep over mag nadenken.

OKé dat heb ik gedaan... maar snap nog steeds niet wat je bedeoelt. Weet je het eigenlijk zelf wel? Of zeg je zomaar wat?
@ozzie als iemand het wachtwoord 0000000 invult word het toch ook gezien als 0 en zou hij ook false geven terwijl er toch iets ingevult.
@jordi: dank voor je reactie. Maar is dat het enige waarom die functie niet goed zou zijn?
Laat ik het anders vragen: wat denk je te controleren en is dat dan afdoende?
Ik zou zelf nog meer controleren dan dat. Maar controle 1 kan toch zijn of er uberhaupt iets is ingevuld? Zo niet, sla dan de rest maar over. Daar is empty toch prima voor?
Hallo Noppes Homeland,

Bedankt voor je feedback. Aangezien mijn gehele code kolder is en ik toch graag er van wil leren heb ik het een en ander aangepast en hoop ik dat je me verder wil helpen.

Aangepaste code:

<?php
if(isset($_POST['submit']) AND $_POST['double_check'] == '21'){
   if(!$_POST['name'] == "" AND !$_POST['password'] == ""){
      $name = mysql_real_escape_string($_POST['name']);
      $pass = mysql_real_escape_string($_POST['password']);
      if (preg_match ('/^[A-Za-z. -]+$/', $name)){
        $sql = "SELECT COUNT(*) FROM persons AS UserCheck 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 'Inlog gegevens kloppen.<br/>';
                  // set cookies
                  $expire=time()+3600;
                  setcookie("name","$name",$expire);
                    
              } elseif ($pass_count ==0 AND !$_POST['password'] == "") {
                  echo 'Dit wachtwoord bestaat niet.<br/>';
                    
                }
           } 
      } else {
          echo 'U kunt geen cijfers of aparte symbolen gebruiken!';
      }  
            
  } else {
        echo 'U dient alle velden in te vullen!';
  }
}
?>


Moet ik zo een submit controleren? Daarnaast maak ik in dit script wel de variabele aan, omdat wanneer je een POST 5x in je script gaat gebruiken dan kan je het beter in een variabele stoppen, omdat dat sneller is. Dit gaat ook gebeuren, maar de code is nu nog bij begin fase. Is de empty check beter zo? Daarnaast heb je het over een foute fetch methode? Deze code werkt nu, maar op welke andere manier zou ik het moeten doen?

Is de code beter zo? Ik heb namelijk jouw opmerkingen bekeken en zo goed mogelijk proberen aan te passen.
Ozzie PHP op 22/07/2011 23:42:19

Ik zou zelf nog meer controleren dan dat. Maar controle 1 kan toch zijn of er uberhaupt iets is ingevuld? Zo niet, sla dan de rest maar over. Daar is empty toch prima voor?

Met empty controleer je dus niet of er iets wel dan niet is ingevuld!!

Je kan niet controleren op de aanwezigheid van de submit-button in de $_POST, dus een post controleer je met $_SERVER['REQUEST_METHOD'] == 'POST'

Daarna ga je controleren en valideren

En lees nogmaals wat ik op 22/07/2011 17:19:28 gepost heb

Reageren