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
}
?>
Naar mijn smaak (smaken kunnen verschillen) is je code ook niet echt heel leesbaar.

Je if/then/else blokken zijn erg genest, maar je ziet niet goed welke blok bij wat hoort.

Het feit dat je telkens in en uit je php gaat ( <? ... ?> ), maakt het lastig.

Ik zet altijd de accolades die bij mekaar passen recht onder mekaar. De meesten doen dat niet (elk zijn smaak), maar ik zal daar nooit van afwijken (voor persoonlijk gebruik).

Het aantal spaties (of tabs) die voor een accolade staan, tonen bij mij onmiddellijk tot welke diepte de blok code genest is.

Zijn er verder eigenlijk nog problemen of werkt het ondertussen?
Emmanuel, het werkt nog steeds niet, er moet echt ergens een fout zitten in de lussen, maar zoals je zelf ook al aangeeft is het lastig leesbaar en ik (als beginner in mijn boek php en mysql voor dummies.....) en her en der gekopieerder code aan elkaar geplakte code zie het dan al helemaal niet meer.....

Heb zelf ook al aan een opzet zoals hieronder zitten denken:

<?php
// form niet ingevuld
if(!isset($_POST['submit']))
{ 
routine en html aanmeldpagina 
}

elseif -- conditie lege velden --
{
$fout="lege velden"; 
}

elseif -- conditie ongeldige gebruikersnaam --
{ 
$fout="ongeldige gebruikersnaam"; 
}

elseif -- conditie bestaande gebruikersnaam --
{ 
$fout="bestaande gebruikersnaam"; 
}

elseif -- conditie zelfde wachtwoord --
{ 
$fout="wachtwoord komt niet overeen"; 
}

else
{
routine registratie en redirect naar inlogpagina
}

echo $fout;
?>

==========

is zoiets een logischere opbouw of ben ik nu helemaal de weg kwijt en moet ik straks tijdens mijn vakantie eerst het boek voor dummies maar eens uitlezen :-)

ik hoor graag van jullie en wederom dank voor het meedenken en willen helpen!!!

groet,
Marc
Pas je script even aan en gebruik [ignore]
 en 
[/ignore] tags om je code heen. Om php code zet je uiteraard dit:<?php en ?>Gebruik je knop om dit te doen.

SanThe.
het was niet echt mijn bedoeling om echte code te plaatsen maar even een "schetsje" van de opzet; voor alle duidelijkheid en om aan alle regels van het forum te voldoen je advies opgevolgt.

groet/marc
Ik zou het meer zo doen:
<?php
// form ingevuld
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$fout = array();
if -- conditie lege velden --
{
$fout[]="lege velden";
}
if -- conditie ongeldige gebruikersnaam --
{
$fout[]="ongeldige gebruikersnaam";
}
if -- conditie bestaande gebruikersnaam --
{
$fout[]="bestaande gebruikersnaam";
}
if -- conditie zelfde wachtwoord --
{
$fout[]="wachtwoord komt niet overeen";
}
if(empty($fout))
{
// verwerken en header naar waar dan ook
}
}
foreach($fout as $value)
{
echo $value . '<br/>';
}
// formulier

?>
ok, dankjewel! dit ga ik proberen en zal de code plaatsen als ik het af heb en feedback geven over mijn test...

zal wel morgenochten worden als ik dit af heb, maar meld me zeker weer! mischien doe ik eens gek en gaat het nog lukken vanavond.

bedankt voor je input!
Marc
Beste Emmanuel en SanThe,

enorm bedankt voor jullie input en adviezen. Heb de code werkend! De code is redelijk dichtbij de basis gebleven, maar zonder jullie tips en aanwijzingen was het me niet gelukt.

De oplossing zat hem vooral in het netjes weergeven van de code en met name de lussen, zoals ook al door jullie aangegeven (overzichtelijk code maken).

Alle tips hierboven gegeven heb ik uitgeprint en ga ik tijdens mijn vakantie bestuderen zodat ik er van kan leren!

Ik hoop in de toekomst, en dat zal wel nodig zijn, nog eens een beroep op jullie te mogen doen.

De code wil ik jullie niet onthouden, ondanks dat er volgens jullie ongetwijfeld nog verbeteringen kunnen zijn.

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="vnaam" size="40" maxlength="20" /></td>
                        </tr>
                        <tr>
                          <td><p>Achternaam</p></td>
                          <td><input type="text" name="anaam" 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
}
else
{
	// formulier gepost, kijk of alle velden ook daadwerkelijk zijn ingevuld
	if(trim($_POST['naam']) <> "" && trim($_POST['wacht1']) <> "" && trim($_POST['wacht2']) <> "" && trim ($_POST['vnaam']) <> "" && trim ($_POST['anaam']) <> "" && trim($_POST['email']) <> "")
	{
		// formulier ingevuld - controleer op geldige gebruikersnaam
		if(preg_match('/^[a-zA-Z0-9]+$/', $_POST['naam']))
		{
			// formulier ingevuld - kijk eerst of de gebruiker al bestaat
			$res = mysql_query("SELECT * FROM users WHERE gebrnaam='".$_POST['naam']."'") or die(mysql_error());
			if(mysql_num_rows($res) == 0) 
			{
				// kijk of de opgegeven wachtwoorden overeenkomen
				if(!strcmp($_POST['wacht1'], $_POST['wacht2']))
				{
					// wachtwoorden komen overeen - sla alle gegevens op in de database
					mysql_query("INSERT INTO users (gebrnaam, wwoord, vnaam, anaam, email) VALUES ('".$_POST['naam']."','".md5($_POST['wacht1'])."','".$_POST['vnaam']."','".$_POST['anaam']."','".$_POST['email']."')") or die(mysql_error());
					// geef melding weer
					?>
                    <h3>Registratie geslaagd!</h3>
                    <p>&nbsp;</p>
                    <p>Bedankt voor uw registratie.</p>
                    <p><meta http-equiv="refresh" content="10;url=http://<?=$_POST['naam']?>.blommetje.nl/index" /><a href="http://<?=$_POST['naam']?>.blommetje.nl/index">Klik hier om naar uw startpagina te gaan.</a></p>
                    <p>&nbsp;</p>
                    <?php
				}
				else
				{
					// wachtwoorden komen niet overeen
					?>
                    <h3>Fout</h3>
                    <p>&nbsp;</p>
                    <p>De twee opgegeven wachtwoorden zijn niet hetzelfde.</p>
                    <p>Druk op de "back" knop van je browser en voer twee identieke wachtwoorden in.</p>
                    <?php
				}
			}
			else
			{
				// bestaande gebruiker
				?>
                <h3>Fout</h3>
                <p>&nbsp;</p>
                <p>Er bestaat al een gebruiker met deze naam.</p>
                <p>Druk op de "back" knop van je browser en geef een andere naam op.</p>
                <?php
			}
		}
		else
		{
			// ongeldige gebruikersnaam
			?>
            <h3>Fout</h3>
            <p>&nbsp;</p>            
            <p>Er is een ongeldige gebruikersnaam ingevoerd. U kunt alleen letters en cijfers gebruiken.</p>
            <p>Druk op de "back" knop van je browser en geef een geldige naam op.</p>
            <?php
		}
	}
	else
	{
		// sommige velden zijn niet ingevuld
		?>
        <h3>Fout</h3>
        <p>&nbsp;</p>        
        <p>Alle velden dienen ingevuld te worden.</p>
        <p>Druk op de "back" toets en vul in alle velden wat in.</p>
		<?php
	}
}
?>
Nog een tip.

Hoe ik controles altijd doe, is een array aanmaken, dan alle controles doen, en eventuele fouten in de array en dan kijken op het eind.

<?php
$errors = array();
if ($naam == fout || $naam == rare_tekens) {
$errors[] = "Deze gebruikersnaam wordt niet toegestaan.";
}
if ($email != @-teken) {
$errors[] = "Dit is een ongeldig e-mailadres";
}

if (count($errors) {
foreach ($errors as $err) {
echo $err.'<br/>';
}
} else {
// Doorsturen
}
?>
Gerben,

dank voor je aanvulling; volgens mij lijkt deze oplossing op die van SanThe. Kwam daar nog niet helemaal uit mijn html er tussendoor, vandaar dat ik voorlopig daar even op voorborduurde, maar ga er zeker naar kijken.

Marc
Oh shxt, ik zie het ja. SanThe heeft precies 't zelfde concept. (Note to self: read entire topics)

Sla dat van mij maar over dan ja ;P

Reageren