probleem met zelfgemaakt registreersysteem

Status
Niet open voor verdere reacties.

ilias

Gebruiker
Lid geworden
2 mei 2004
Berichten
31
wel....
ik krijg altijd de error dat de username of e-mailadres al in gebruik zijn, hoewel er nog NIEMAND geregistreerd is...
dit is de code:
PHP:
<?
// formulier wordt enkel geëvalueerd als $go==1, $go is een hidden value in de form
if ($go==1){
$continue=1;
// check of alle velden zijn ingevuld
if (username=="" || $passw1=="" || $email==""){
$continue=0;
?>
<body bgcolor="#8d8f8e">
<form action="test.php" method="post">
<input type="hidden" name="go" value="1" />
<!-- class error nog declareren!!! -->
<i class="error">u hebt <b class="error">NIET</b> alle velden ingevuld!!!</i><br>
<table border="0" cellpadding="0" cellspacing="0" summary="">
<tr>
<td><b>USERNAME:</b></td>
<td><input type="text" name="username" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td><input type="password" name="passw1" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>RETYPE PASSWORD:</b></td>
<td><input type="password" name="passw2" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>E-MAILADRES:</b></td>
<td><input type="text" name="email" size="30" maxlength="45" /></td>
</tr>
<tr>
<td align="right"><input type="submit" value="verzenden" /></td>
<td align="left"><input type="reset" value="invoer wissen" /></td>
</tr>
</table>
</form>
</body>
<?
}
//als alle velden ingevuld zijn:
else{
// als de 2 passwoorden gelijk zijn:
if ($passw1==$passw2){
$passw=base64_encode($passw1);
$db=@mysql_pconnect("localhost","","") or die("verbinden met mysql server mislukt... probeer later opnieuw");
@mysql_select_db("skatevids_db",$db) or die("verbinden met database mislukt... probeer later opnieuw");
$sql_query="SELECT * FROM members WHERE username='$username' OR email='$email'";
$result=mysql_query($sql_query,$db);
// als de gebruikersnaam of het e-mailadres al in gebruik zijn:
if($result){
?>
<body bgcolor="#8d8f8e">
<form action="test.php" method="post">
<input type="hidden" name="go" value="1" />
<i class="error">de door u gekozen username en/of e-mailadres is/zijn reeds in gebruik...</i><br>
<table border="0" cellpadding="0" cellspacing="0" summary="">
<tr>
<td><b>USERNAME:</b></td>
<td><input type="text" name="username" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td><input type="password" name="passw1" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>RETYPE PASSWORD:</b></td>
<td><input type="password" name="passw2" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>E-MAILADRES:</b></td>
<td><input type="text" name="email" size="30" maxlength="45" /></td>
</tr>
<tr>
<td align="right"><input type="submit" value="verzenden" /></td>
<td align="left"><input type="reset" value="invoer wissen" /></td>
</tr>
</table>
</form>
</body>
<?
}
// als de gebruikesnaam of het emailadres nog niet in gebruik is:
else{
$sql_query="INSERT INTO members(id,username,passw,email) VALUES('','$username','$passw','$email')";
$result=mysql_query($sql_query,$db);
// als de registratie geslaagd is:
if($result){
?>
<body bgcolor="#8d8f8e">
<h2 align="center">REGISTRATIE GESLAAGD</h2><br>
<i>beste <?
$sql_query="SELECT * FROM members WHERE username='$username'";
$result=mysql_query($sql_query,$db);
$resultaat=mysql_fetch_array($result);
echo($resultaat[naam]);
?>, <br>
u bent nu geregistreerd als lid van skatevids.tk<br>
u kunt nu inloggen en de voordelen van het lidmaatschap verkennen<br>
Het SkateVids.tk team</i>
</body>
<?
}
}
}


else{
$continue=0;
?>
<body bgcolor="#8d8f8e">
<form action="test.php" method="post">
<input type="hidden" name="go" value="1" />
<i class="error">de waardes van de twee ingevulde passwoorden zijn <b class="error">NIET</b> gelijk</i><br>
<table border="0" cellpadding="0" cellspacing="0" summary="">
<tr>
<td><b>USERNAME:</b></td>
<td><input type="text" name="username" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td><input type="password" name="passw1" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>RETYPE PASSWORD:</b></td>
<td><input type="password" name="passw2" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>E-MAILADRES:</b></td>
<td><input type="text" name="email" size="30" maxlength="45" /></td>
</tr>
<tr>
<td align="right"><input type="submit" value="verzenden" /></td>
<td align="left"><input type="reset" value="invoer wissen" /></td>
</tr>
</table>
</form>
</body>
<?
}
}
}
else{
?>
<body bgcolor="#8d8f8e">
<form action="test.php" method="post">
<input type="hidden" name="go" value="1" />
<table border="0" cellpadding="0" cellspacing="0" summary="">
<tr>
<td><b>USERNAME:</b></td>
<td><input type="text" name="username" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td><input type="password" name="passw1" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>RETYPE PASSWORD:</b></td>
<td><input type="password" name="passw2" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>E-MAILADRES:</b></td>
<td><input type="text" name="email" size="30" maxlength="45" /></td>
</tr>
<tr>
<td align="right"><input type="submit" value="verzenden" /></td>
<td align="left"><input type="reset" value="invoer wissen" /></td>
</tr>
</table>
</form>
</body>
<?
}
?>
 
Je controleert, op een hele foute manier, of $result niet fout is gegaan. Als de query uitgevoert kan worden, dan krijg jij de melding dat het email adres al bezet is. Dat moet niet. Jij moet checken of er al rijen in de database staan, m.b.v. mysql_num_rows() ;)
Probeer dit script eens:
PHP:
<?
  function slashes($tekst)
  {
    if(get_magic_quotes_gpc() == FALSE)
    {
    $tekst = addslashes($tekst);
    }
  return $tekst;
  }

$melding = "";

  if((isset($_POST["username"]) == TRUE) AND (isset($_POST["passw1"]) == TRUE) AND (isset($_POST["passw2"]) == TRUE) AND (isset($_POST["email"]) == TRUE))
  {
  $username = slashes($_POST["username"]);
  $passw1 = slashes($_POST["passw1"]);
  $passw2 = slashes($_POST["passw2"]);
  $email = slashes($_POST["email"]);
    if($username == "")
    {
    $melding .= "<li>Je hebt geen username ingevuld</li>";
    }

    if($passw1 == "")
    {
    $melding .= "<li>Je hebt geen wachtwoord ingevuld</li>";
    }

    if($passw2 == "")
    {
    $melding .= "<li>Je hebt je wachtwoord niet bevestigs</li>";
    }

    if($email == "")
    {
    $melding .= "<li>Je hebt je emailadres niet ingevuld</li>";
    }

    if($passw1 != $passw2)
    {
    $melding .= "<li>De wachtwoorden zijn niet gelijk aan elkaar</li>";
    }

    if($melding == "")
    {
    $passw = base64_encode($passw1);
    $db = @mysql_pconnect("localhost","","") or die("Kon geen verbinding maken met de MySQL server: " . mysql_error());
    @mysql_select_db("test0r",$db) or die("Kon de database niet selecteren: " . mysql_error());

    $query = "SELECT * FROM members WHERE username='" . $username . "' OR email='" . $email . "'";
    $result = @mysql_query($query) or die("Kon query niet uitvoeren: " . mysql_error());
      if(mysql_num_rows($result) > 0)
      {
      $melding .= "<li>De gebruikersnaam of het emailadres is al in gebruik</li>";
      }
      else
      {
      $query = "INSERT INTO members (id,username,passw,email) VALUES ('','" . $username . "','" . $passw . "','" . $email . "')";
      $result = @mysql_query($query) or die("Kon query niet uitvoeren: " . mysql_error());
        if(mysql_affected_rows() == 0)
        {
        echo "De query werd met succes uitgevoerd, maar om onbekende redenen zijn er geen rijen in de database ingevoegd";
        }
        else
        {
        ?>
        <body bgcolor="#8d8f8e">
        <h2 align="center">REGISTRATIE GESLAAGD</h2><br>
        <i>beste <? echo $username; ?>, <br>
        u bent nu geregistreerd als lid van skatevids.tk<br>
        u kunt nu inloggen en de voordelen van het lidmaatschap verkennen<br>
        Het SkateVids.tk team</i>
        </body>
        <?
        die(); // De pagina wordt hierdoor niet verder geladen, het script wordt ook niet verder uitgevoerd. Hierdoor wordt het formulier hieronder niet weergegeven
        }
      }
    }
  }
?>
<body bgcolor="#8d8f8e">
<?
  if($melding != "")
  {
  echo "<i class=\"error\">De volgende errors zijn opgetreden:<br>\n" . $melding . "</i><br>";
  }
?>
<form action="test.php" method="post">
<table border="0" cellpadding="0" cellspacing="0" summary="">
<tr>
<td><b>USERNAME:</b></td>
<td><input type="text" name="username" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td><input type="password" name="passw1" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>RETYPE PASSWORD:</b></td>
<td><input type="password" name="passw2" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>E-MAILADRES:</b></td>
<td><input type="text" name="email" size="30" maxlength="45" /></td>
</tr>
<tr>
<td align="right"><input type="submit" value="verzenden" /></td>
<td align="left"><input type="reset" value="invoer wissen" /></td>
</tr>
</table>
</form>
</body>
Enkele tips voor je volgende scripts:
  • Niet 4 keer hetzelfde formulier in het bestand neerplanten :D
  • Variabele $go en $conttinu geef je wel een waarde, maar je doet er verder niets mee. Het is dus ook niet nodig.
  • Gebruik superglobals zoals $_POST, $_GET, $_SERVER, etc zodat je script op alle servers werkt en veiliger is (belangrijk dus !).
  • Google even naar 'magic quotes' in php ;)
  • Als de INSERT query geslaagd is, haal je de naam nog eens uit de database, wat hartstikke overbodig is aangezien je al $username hebt ;)
Dit alles heb ik verbeterd, + een paar extra functies die ervoor zorgen dat, als er iets fout gaat, je nog beter weet waar het fout gaat en daardoor ook sneller waarom.

Wat ik wel goed vind is dat je bij mysql_pconnect() en mysql_select_db() een 'or die()' gebruikt :thumb:
Had je overigens bij mysql_query() ook wel mogen doen :p

Succes ermee :thumb:
 
Laatst bewerkt:
bedankt JP...
ik ben nog maar een week, maximaal 2 bezig met php en met mysql...
maar bedankt voor de antwoorden !!!
bedankt voor de tips, ook :D
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan