Hallo,

als ik de preg_match formule in een kleine php file test is de notatie correct, dat wil zeggen dat ik alleen maar gebruikersnamen wil toestaant die bestaan uit letters en cijfers.

Echter wanneer ik deze toepas in mij code (aanmeldpagina) lijkt het alsof de code de controle negeert. Ook gebruikersnamen met bijvoorbeeld een & in de tekst komen er gewoon doorheen.

De hamvraag is waar dit nu aan ligt, waarschijnlijk een foutje in de if routine, maar ik zie hem niet!!!

wie kan me helpen?

alvast bedankt,
groet,
Marc


<?php
// als het formulier nog niet is ingevuld
if(!isset($_POST['submit'])) {
?>
                    <h3>Aanmeldpagina</h3>
                    <p>&nbsp;</p>
                    <p>U heeft nog geen eigen startpagina, u kunt zich hier registreren.</p>
                    <p>&nbsp;</p>
                    <form action="aanmeld.php" method="post">
                      <table width="500" border="0" cellspacing="0" cellpadding="0">
                        <tr>
                          <td width="200"><p>Gebruikersnaam</p></td>
                          <td width="300"><input type="text" name="naam" size="40" maxlength="20" /></td>
                        </tr>
                        <tr>
                          <td><p>Wachtwoord</p></td>
                          <td><input type="password" name="wacht1" size="40" maxlength="32" /></td>
                        </tr>
                        <tr>
                          <td><p>Wachtwoord opnieuw</p></td>
                          <td><input type="password" name="wacht2" size="40" maxlength="32" /></td>
                        </tr>
                        <tr>
                          <td><p>Voornaam</p></td>
                          <td><input type="text" name="voornaam" size="40" maxlength="20" /></td>
                        </tr>
                        <tr>
                          <td><p>Achternaam</p></td>
                          <td><input type="text" name="achternaam" size="40" maxlength="20" /></td>
                        </tr>
                        <tr>
                          <td><p>Email adres</td>
                          <td><input type="text" name="email" size="40" maxlength="128" /></td>
                        </tr>
                      </table>
                      <br />
                      <input type="submit" name="submit" value="Registreer" />
                    </form>
                    <?php
// formulier gepost, kijk of alle velden ook daadwerkelijk zijn ingevuld
} elseif(trim($_POST['naam']) <> "" && trim($_POST['wacht1']) <> "" && trim($_POST['voornaam']) <> "" && trim($_POST['achternaam']) <> "" && trim($_POST['email']) <> "") {
  // formulier gepost, check op geldige gebruikersnaam
  $naam=$_POST['naam'];
  if(preg_match('/^[a-zA-Z0-9]+$/', $naam)) {
    // formulier ingevuld - kijk eerst of de gebruiker al bestaat
    $naam = $_POST['naam'];
    $vnaam = $_POST['voornaam'];
    $anaam = $_POST['achternaam'];  
    $res = mysql_query("SELECT * FROM users WHERE gebrnaam='".$naam."'") or die(mysql_error());
    if(mysql_num_rows($res) == 0) {
      // geen resultaten - dit is wat we willen
      // kijk of de opgegeven wachtwoorden overeenkomen
      if(!strcmp($_POST['wacht1'], $_POST['wacht2'])) {
        // wachtwoorden komen overeen - sla alle gegevens op in de database
        // naam is al opgehaald uit het formulier
        $wacht = md5($_POST['wacht1']); // versleuteld wachtwoord
	    $email = $_POST['email'];
        mysql_query("INSERT INTO users (gebrnaam, wwoord, vnaam, anaam, email) VALUES ('".$naam."','".$wacht."','".$vnaam."','".$anaam."','".$email."')") or die(mysql_error());

        // geef melding weer
?>
                    <h3>Registratie geslaagd!</h3>
                    <p>&nbsp;</p>
                    <p>Bedankt voor uw registratie.</p>
                    <p>&nbsp;</p>
                    <p>
                      <meta http-equiv="refresh" content="10;url=http://<?=$naam?>.blommetje.nl/index" />
                      <a href="http://<?=$naam?>.blommetje.nl/index">Klik hier om naar uw startpagina te gaan.</a></p>
                    <p>&nbsp;</p>
                    <br />
                    <?php
      } else {
        // wachtwoorden komen niet overeen
?>
                    <p>De twee opgegeven wachtwoorden zijn niet hetzelfde.<br />
                      Druk op de "back" knop van je browser en voer twee identieke wachtwoorden in.</p>
                    <br />
                    <?php
     }
    } else {
      // er bestaat al een gebruiker met deze naam
?>
                    <p>Er bestaat al een gebruiker met deze naam.<br />
                      Druk op de "back" knop van je browser en geef een andere naam op.</p>
                    <br />
                    <?php
     }
    } else { 
	  // ongeldige gebruikersnaam
?>
                    <p>Gebruikersnaam is ongeldig.<br />
                      Druk op de "back" knop van je browser en geef een andere naam op.</p>
                    <br />
                    <?php	
	}	
	} else {
    // sommige velden zijn niet ingevuld
?>
                    <p>Alle velden dienen ingevuld te worden.<br />
                      Druk op de "back" toets en vul in alle velden wat in.</p>
                    <br />
                    <?php
}
?>
sorry zag het ook al, alles staat nu tussen de code tags...
Pas je script even aan en gebruik [ignore]
 en 
[/ignore] tags om je code heen. Gebruik je knop om dit te doen.

SanThe.
Begin maar met code overzichtelijk te maken want hier kan niemand (niemand == ik in dit geval) tabak van maken
En lees eens wat over sql-injection en kijk eens bij [php]mysql_real_escape_string[/php].

Edit: En $vars gewoon in een andere $var kopiƫren is zinloos en kost alleen maar extra geheugen. Voorbeeld: $naam = $_POST['naam'];
Je komt dus nooit in deze blok code:
else 
  { 
      // ongeldige gebruikersnaam
?>
                    <p>Gebruikersnaam is ongeldig.<br />
                      Druk op de "back" knop van je browser en geef een andere naam op.</p>
                    <br />
                    <?php    
  }


Zelfs als je namen met vreemde tekens gebruikt. Klopt dit?
@emmanuel : idd, dat klopt die melding komt niet als er vreemde tekens in staan.

@jacco en santhe: ben een beginner, dus zal er nog eens goed naar kijken met jullie opmerking, dank daarvoor!


groet,
Marc
Misschien ben je hier iets mee. In plaats van die preg:
Je kan zelf karakters toevoegen als je wil. Zoals het nu is, krijg je ook een false als je een spatie invult.


<?
if ( enkel_letters_of_cijfers($naam) )
{
///...
}
// ...
function enkel_letters_of_cijfers($string)
{
$letters = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$resultaat = '';
$lengte = strlen($string);

for ($i=0; $i < $lengte ; $i++)
{
if ( strrpos($letters, $string{$i}, 0) )
{
$resultaat = $resultaat . $string{$i};
}
else
return 0;
}
return 1;
}
?>
Emmanuel, bedankt voor je script, ga hem zeker proberen. Toch zou ik nog graag willen weten welke fout of denkfout ik maak in de code. Anders plaats ik de nieuwe code en treden dezelfde problemen op. Dus wie kan mij vertellen wat er in de if..else routine niet juist is?

thanks!
Marc
Srry vroeg en te weinig koffie

Reageren