Hallo iedereen,

Ik ben bezig met mijn stageopdracht en ben tot zover nog bezig met het login script. Alles werkt tot zover alleen moet er nog een functie in die voorkomt dat 1 gebruikersnaam 2x wordt geregistreerd in de database.

Het ingeven van de gegevens gebeurt op de pagina
new.php

vervolgens worden de gegevens gecontroleerd of alles in ingevuld maar nog niet of de gebruikersnaam al bestaat in de database.


newuser.php

if($_SERVER['REQUEST_METHOD'] == 'POST') {									/* Controleer of alle velden ingevuld zijn */
						if(empty($_POST['name_first']))
							echo 'Er is geen gebruikersnaam opgegeven.';						/* Melding bij geen invoer */
						elseif(empty($_POST['name_last']))
							echo 'Er is geen achternaam opgegeven.';
						elseif(empty($_POST['functie']))
							echo 'Er is geen functie opgegeven.';
						elseif(empty($_POST['pass']))
							echo 'Er is geen wachtwoord opgegeven.';
						elseif(empty($_POST['username']))
							echo 'Er is geen gebruikersnaam opgegeven.';		
						else {	// check dubbele registratie
						
				?>
							
							<form action="add.php" method="post">																											<!-- Het registratieformulier -->
								<p>Voornaam: <br/>		
								<input type="text" name="name_first" readonly="readonly" value="<?=$_POST['name_first'];?>" style="background-color: none; border:none;"/>
								<p>Achternaam: <br/> 	
								<input type="text" name="name_last" readonly="readonly" value="<?=$_POST['name_last'];?>" style="background-color: none; border:none;"/>
								<p>Functie: <br/>		
								<input type="text" name="functie" readonly="readonly" value="<?=$_POST['functie'];?>" style="background-color: none; border:none;"/>
								<p>Wachtwoord: <br/>	
								<input type="password" name="pass" readonly="readonly" value="<?=$_POST['pass'];?>" style="background-color: none; border:none;"/>
								<p>Gebruikersnaam:<br/>	
								<input type="text" name="username" readonly="readonly" value="<?=$_POST['username'];?>" style="background-color: none; border:none;"/>
								<p>Rechten:<br/>
								<input type="select" name="level" readonly="readonly" value="<?=$_POST['level'];?>" style="background-color: none; border:none;"/>		<br/>	
								<input type="submit" value="Verstuur"/>				 																						<!-- Verzenden gegevens -->
							</form>	


De verwerking van de registratie vind plaats in dit script.
add.php

			<?php 
				
				$name_first = 	$_POST['name_first'];	
				$name_last =  	$_POST['name_last'];	
				$functie = 		$_POST['functie'];		
				$pass = 		$_POST['pass'];		
				$username = 	$_POST['username'];	
				$level = 		$_POST['level'];	
				$pass1 = 		md5($pass);  													/* Converteer Password naar md5hash */
								
				$query2= mysql_query("INSERT INTO login (user_first,user_last,user_func,user_pass,user_login,user_level) VALUES ('$name_first','$name_last','$functie','$pass1','$username','$level')");
			?>	<br/>


Wie kan mij op weg helpen met het controleren van de gebruikersnaam?
Alvast bedankt iedereen
Het sql gedeelte wat je hier post is al niet lekker, dus leer maar:
SQL Beginnershandleiding
Huh?
Het sql gedeelte wat hier staat werkt perfect. Wat is het probleem volgens jou?
bob schreef op 27.02.2009 15:55
Huh?
Het sql gedeelte wat hier staat werkt perfect. Wat is het probleem volgens jou?

- Variabele kopieren waar niet nodig is.
- Userinput direct in de sql.

Geef je site maar, dan zorg ik ervoor dat je database weg is.
Het wordt een site voor intern gebruik dus dat is niet zozeer het probleem, het gaat erom dat 1 persoon zich niet 2 x kan registreren hoe controleer ik de ingevoerde waarde met een waarde uit de database?
Dit zou het moeten doen, ik heb meteen iets toegevoegd tegen SQL injection:

$username= mysql_real_escape_string($_POST['username']);
if(mysql_result(mysql_query('SELECT COUNT(*) FROM login WHERE user_login='.$username), 0) > 0){
 echo 'De gebruikersnaam was al in gebruik.';
}


Ik raad je aan om voor de zekerheid het veld user_login UNIQUE te maken.
Voor de zekerheid? Het is de enige mogelijkheid die je hebt! Komt bij dat dit niet voor niets is uitgevonden, een aantal slimmerikken hebben hier flink over nagedacht.

Gepruts met een SELECT is leuk en aardig voor wat extra werk, het zal je niet beschermen tegen dubbele records, dat is technisch niet mogelijk.
Ik heb het voor elkaar gekregen met een SELECT COUNT query

				if($username && mysql_result(mysql_query("SELECT COUNT('user_first') FROM login WHERE user_login LIKE '$username'"),0)) { 																/* Controleer of de gebruikersnaam al bestaat */
				echo "<P>Deze gebruikersnaam is al in gebruik!</P>";
				}
				else {
				mysql_query("INSERT INTO login (user_first,user_last,user_func,user_pass,user_login,user_level,user_lang) VALUES ('$name_first','$name_last','$functie','$pass1','$username','$level','$taal')");			/* Voeg de gebruiker toe */
				echo "<P>Gebruikersaccount is aangemaakt!</P>";
				}
bob schreef op 03.03.2009 16:13
Ik heb het voor elkaar gekregen met een SELECT COUNT query

				if($username && mysql_result(mysql_query("SELECT COUNT('user_first') FROM login WHERE user_login LIKE '$username'"),0)) { 																/* Controleer of de gebruikersnaam al bestaat */
				echo "<P>Deze gebruikersnaam is al in gebruik!</P>";
				}
				else {
				mysql_query("INSERT INTO login (user_first,user_last,user_func,user_pass,user_login,user_level,user_lang) VALUES ('$name_first','$name_last','$functie','$pass1','$username','$level','$taal')");			/* Voeg de gebruiker toe */
				echo "<P>Gebruikersaccount is aangemaakt!</P>";
				}

Leer die tutorial die ik je gaf zo klopt het niet...
Gewoon niks aannemen van wat andere, meer ervaren, mensen zeggen is blijkbaar voor jou de meest UNIQUE (hint) methode.
Doe zoiets :


$sql = "SELECT id FROM login WHERE name='".mysql_real_escape_string($_POST['name'])."'";
$query = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($query);
	  
if($count >= "1"){
echo "This username is already taken.";
}else{

Reageren