Registratie form

  • Onderwerp starter Onderwerp starter moh
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

moh

Gebruiker
Lid geworden
6 apr 2007
Berichten
34
Vrij nieuw in PHP probeer het een klein beetje onder de knie te krijgen door zelf wat te rommelen.

Ik heb nu een klein register scriptje die niet helemaal werkt ook nog aan het uitzoeken hoe ik een dropdown menu krijg met informatie uit een tabel.

Script:
PHP:
<?php
include_once "functions.php";

connect();

if(!$_POST['submit']){  
	echo "<table border=\"0\" cellspacing=\"3\" callpadding=\"3\">\n";
	echo "<form method=\"post\" action=\"register.php\">\n";
	echo "<tr><td colspan=\"2\" align=\"center\">Register</td></tr>\n";
	echo "<tr><td>Character name:</td><td><input type=\"text\" name=\"username\"></td></tr>\n";
	echo "<tr><td>Password:</td><td><input type=\"text\" name=\"password\"></td></tr>\n";
	echo "<tr><td>Confirm password:</td><td><input type=\"text\" name=\"passconf\"></td></tr>\n";
	
	$query1 = ("SELECT * FROM `class` WHERE `classes`=''");
	$result1 = mysql_query($query1) or die (mysql_error());
		
	echo "<tr><td>Class:</td><td><select name=\"classdrop\"><option value=\"$result1\"></option></select></tr>\n";
	
	$query2 = ("SELECT * FROM `role` WHERE `roles`=''");
	$result2 = mysql_query($query2) or die (mysql_error());
		
	echo "<tr><td>Role:</td><td><select name=\"roledrop\"><option value=\"$result2\"></option></select></tr>\n";
	
	echo "<tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"submit\" value=\"Submit\"></td></tr>\n";
	echo "</form></table>\n";
}else {
	$username = protect($_POST['username']);
	$password = protect($_POST['password']);
	$confirm = protect($_POST['passconf']);
	$classreg = protect($_POST['classdrop']);
	$rolereg = protect($_POST['roledrop']);
	
	$errors = array();
	
		if(!$username){
			$errors[] = "Character name is not defined!";
		}
		if(!$password){
			$errors[] = "Password is not defined!";
		}
		if(!$password){
			if(!$confirm){
				$errors[] = "Confirmation password is not defined!";
			}
		}
		if(!$classreg){
			$errors[] = "Class is not defined!";
		}
		if(!$rolereg){
			$errors[] = "Role is not defined!";
		}
		
		if($username){
			if(!ctype_alnum($username)){
				$errors[] = "Character name can only contain numbers and letters!";
			}
			$range = range(1,20);
			if(!in_array(strlen($username),$range)){
				$errors[] = "Charactername must be between 1 and 20 characters!";
			}
		}
		if($password && $confirm){
			if($password != $confirm){
				$errors[] = "Passwords do not match!";
			}
		}
		
		if($username) {
			$sql = "SELECT * FROM `users` WHERE `username`='{$username}'";
			$res = mysql_query($sql) or die (mysql_error());
			
				if(mysql_num_rows($res) >0){
					$errors[] = "The username you supplied is already in use!";
				}
		}
		
		if(count($errors) >0){
			foreach($errors as $error){
				echo $error . "<br>\n";
			}
		}else {
			$sql2 = "INSERT INTO `users` 
			(`username`,`password`,`class`,`role`) 
			VALUES ('$username','".md5($password)."','$classreg',`$rolereg')";
			$res2 = mysql_query($sql2) or die (mysql_error());
			echo "You have succesfully registerd with <b>$username</b>";
		}
}
?>
op line 6 de if(!$_POST['submit'])} zit een fout:
Undefined index: submit in D:\wamp\www\register\register.php on line 6

en achja de dropdown
ongeveer de query, mist vast wel iets:
PHP:
	$query1 = ("SELECT * FROM `class` WHERE `classes`=''");
	$result1 = mysql_query($query1) or die (mysql_error());
de output zit ook wel wat fout in denk ik -.- :
PHP:
	echo "<tr><td>Class:</td><td><select name=\"classdrop\"><option value=\"$result1\"></option></select></tr>\n";

als iemand hier enig antwoord alvast bedankt.
Mod: Volgende keer graag ZELF PHP-tags om je code zetten
 
Laatst bewerkt door een moderator:
POST-waardes zijn alleen bekend wanneer er een formulier is verzonden.

Je controleert nu of $_POST['submit'] niet is.
Hmm ja, niet wat is? Dat heb je dus niet duidelijk aangegeven.

Wat je eigenlijk wilt weten is of er een formulier is verzonden.

De enige juiste manier is, voor deze code, deze manier:
PHP:
if($_SERVER['REQUEST_METHOD'] != "POST") {
  // Geen formulier verzonden
} else {
  // Formulier is verzonden
}

Ik programmeer altijd net andersom, ik controleer eerst of er een formulier is verzonden en zo niet het formulier weergeven.

Het is maar net wat je gewend bent :)
 
Ik werd door gestuurd naar een website: HTTP://www.phpsquad.net hier staat een video tutorial register v3.

Deze code lijkt normaal te werken. Zoals ik al zei mijn php kennis is klein. Ik ging ervan uit dat de post code met een rede was want in mijn php boek staat ook anders vermeld maar dan de vraag waarom werkt het wel bij hem.
 
Werkt het na die aanpassing niet dan?

En wat werkt er dan niet?
 
Nee joh het werkt prima bedank :). Vroeg me alleen af hoe die jongen die een video tutorial had gemaakt hem wel met die code werkend kreeg zo vreemd.

Enigste wat ik nog moet uitzoeken is dat de data van de tabel als dropdown wordt neergezet. ben al mijn boek aan het door bladeren. als ik er echt niet uitkom kom ik er wel op terug bedank tha devil.
 
Ja zit dus nu alweer 2 uur te stoeien met het volgende.
PHP:
	$query1 = ("SELECT * FROM `class`");
	$result1 = mysql_query($query1) or die (mysql_error());
	$row1 = mysql_fetch_row($result1);
	
	echo "<tr><td>Class:</td><td><select name=\"classdrop\"><option value=\"$row1[0]\">$row1[0]</option></select></tr>\n";

Goed Het werkt wel maar ik krijg maar 1 datacel te zien in de ROW classes van TABEL class.
in row classes zitten 10 datacellen hoe krijg ik ze allemaal te zien en niet alleen de eerste.

ik dacht dat fetch_row een hele rij terug geeft als result en niet 1 datacel zal wel iets met array te maken hebben nu ik erover begin misschien moet ik mysq_fetch_array gebruiken in een while statement -.- geen idee kom er nu pas op even proberen.

Ok haha is dus iets met array help wel even hierop kalken moet ik vaker doen..

wat ik heb aangepast is :
PHP:
	$query1 = ("SELECT * FROM `class`");
	$result1 = mysql_query($query1) or die (mysql_error());
	while($row1 = mysql_fetch_array($result1)){
	      echo "<tr><td>Class:</td><td><select name=\"classdrop\"><option value=\"$row1[0]\">$row1[0]</option></select></tr>\n";
}

Wat gebeurt ik ik krijg al mijn 10 datacellen te zien maar krijg ook 10 dropdown menu's met class: ervoor.

de bedoeling is 1 drop down waar ik 1 van alle 10 kan selecteren niet voor elk apart een dropdown :)
 
Laatst bewerkt:
Dat is een kwestie van weten hoe een HTML-formulier element werkt :)

PHP:
$query1 = ("SELECT * FROM `class`");
    $result1 = mysql_query($query1) or die (mysql_error());
echo '
<tr>
  <td>Class:</td>
  <td><select name="classdrop">';
    while($row1 = mysql_fetch_array($result1)){
          echo '<option value="'. $row1[0] .'">'. $row1[0] .'</option>';
    }
    echo '</select></td>
</tr>\n';
}

Je wilt immers alle <option>'s gevuld hebben met spul uit je database.
 
Weer een stap vooruit bedank. Tja iq van een pannenkoek in php :).
moet maar even een voorraad paracetamol inslaan aangezien ik een soort gelijk klein forumpje moet maken. Het laten maken tegen betaling is vrij duur en ik wil mezelf er een beetje in verdiepen php is erg sterk als je het onder de knie hebt :).

Na het aanpassen van wat tags werkt alles nu naar toebehoren kan ik eindelijk mijn tabellen uitbreiden en beginnen met permissies login etc. -.- nogmaals bedank hehe
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan