Hallo,

Ik was zojuist wat aan het uitproberen, en toen kwam ik erachter dat er een probleem in mijn ledenscript zit.
Als iemand zich wil registreren, en hij voert daarbij de gegevens (gebruikersnaam en wachtwoord) in van een lid dat al bestaat, dan wordt hij ingelogd (als het lid dat hij invoert).
Ik heb gecontroleerd of dit niet aan de sessie lag, maar dit is niet het geval. Ik heb namelijk ter controle meerdere leden geregistreerd, en bij het inschrijven met dezelfde gegevens werden al deze leden ingelogd.

Kunnen jullie mij helpen? Ik weet niet waar het probleem zit.

index.php
* Registreren is ?pagina=inschrijven en inloggen is ?pagina=aanmelden

<?php

include("config.php");

session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	if (!$_POST['aanmelden']) {
		$gebruikersnaam = $_POST['gebruikersnaam'];
		$gebruikersnaam = stripslashes($gebruikersnaam);
		$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
		$wachtwoord = $_POST['wachtwoord'];
		$wachtwoord = stripslashes($wachtwoord);
		$wachtwoord = mysql_real_escape_string($wachtwoord);
		$veiligwachtwoord = md5($wachtwoord);
		$veiligwachtwoord = md5($veiligwachtwoord);
		$veiligwachtwoord = sha1($veiligwachtwoord);
		$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".$veiligwachtwoord."' AND actief='1'";
		$query2 = mysql_query($query);
		$query3 = mysql_num_rows($query2);
		if ($query3 == 1) {
			session_register("gebruikersnaam");
			session_register("veiligwachtwoord");
			header("Location: welkom.php");
		}
	}
	if (!$_POST['inschrijven']) {
		$gebruikersnaam = $_POST['gebruikersnaam'];
		$wachtwoord = $_POST['wachtwoord'];
		$wachtwoord2 = $_POST['wachtwoord2'];
		$emailadres = $_POST['emailadres'];
		$voornaam = $_POST['voornaam'];
		$achternaam = "";
		$rang = 1;
		$saldo = 10;
		$actief = 1;
		if (!empty($voornaam) and !empty($gebruikersnaam) and !empty($wachtwoord) and !empty($wachtwoord2) and $wachtwoord2 == $wachtwoord) {
			$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."'";
			$query2 = mysql_query($query) or die ("We kunnen geen verbinding maken.");
			$query3 = mysql_num_rows($query2);
			if ($query3 == 0) {
				ob_start();
					header("Location: http://www..eu/id/index.php?pagina=inschrijven&id=ingeschreven");
				ob_flush();
				$veiligwachtwoord = md5($wachtwoord);
				$veiligwachtwoord = md5($veiligwachtwoord);
				$veiligwachtwoord = sha1($veiligwachtwoord);
				$inschrijven = "INSERT INTO gebruikers (gebruikersnaam, wachtwoord, emailadres, voornaam, rang, saldo, actief) VALUES ('".$gebruikersnaam."', '".$veiligwachtwoord."', '".$emailadres."', '".$voornaam."', '".$rang."', '".$saldo."', '".$actief."')"; 
				mail("".$emailadres."", "Welkom bij ", "Hallo ".$voornaam.",\n\nWelkom bij ! Uw gegevens zijn:\n\nGebruikersnaam: ".$gebruikersnaam."\nWachtwoord: ".$wachtwoord."\n\nVeel plezier!\n\n\n\n\nwww..eu", "From: ");
				mysql_query($inschrijven) or die ("We kunnen geen verbinding maken.");
			} else {
				ob_start();
					header("Location: http://www..eu//index.php?pagina=inschrijven&id=gebruikersnaam");
				ob_flush();
			}
		}
	}
}

?>


config.php

<?php

$dbhost = "localhost";
$dbgebruikersnaam = "";
$dbwachtwoord = "";

$verbinden = mysql_connect($dbhost, $dbgebruikersnaam, $dbwachtwoord) or die ("<b>Code D001:</b><br />We kunnen geen verbinding maken.");

$db = "";

mysql_select_db($db) or die ("<b>Code D002:</b><br />We kunnen geen verbinding maken.");

// Functies

function isnum($value) {
	if (!is_array($value)) {
		return (preg_match("/^[0-9]+$/", $value));
	} else {
		return false;
	}
}

function redirect($location, $script = false) {
	if (!$script) {
		header("Location: ".str_replace("&amp;", "&", $location));
		exit;
	} else {
		echo "<script type='text/javascript'>document.location.href='".str_replace("&amp;", "&", $location)."'</script>";
		exit;
	}
}

?>
Ga liever inhoudelijk in op mijn vraag zonder je te ergeren aan mijn topic titel. Dit ledenscript heeft voor mij veel waarde aangezien ik het dit keer helemaal zelf heb gemaakt! En dan is het jammer als je zulke problemen tegen komt.
Als jij word aangehouden door oom agent, dan zeg je ook, ga liever inhoudelijk in op mijn auto, in plaats van te zeuren over die 60km te hard, deze auto betekent echt veel voor me, ik heb hem helemaal zelf gekocht.

Je overtreed gewoon een regel door het gebruik van een slechte topic titel, dus daar zal je een oplossing voor moeten vinden.
En nee, vluchten is geen optie.
@Mario: Het is gebruikelijk dat je Topic Titel enigszins iets weergeeft dat betrekking heeft op de functionaliteit van je script en dan met name datgene dat niet werkt. Gewoon even aanpassen en niet zo arrogant over doen.
Mario Braam op 06/10/2010 12:19:16

Ga liever inhoudelijk in op mijn vraag zonder je te ergeren aan mijn topic titel. Dit ledenscript heeft voor mij veel waarde aangezien ik het dit keer helemaal zelf heb gemaakt! En dan is het jammer als je zulke problemen tegen komt.


Oh, het is een ledenscript. Dat had ik nog niet gezien...
Zag wel dat er wat sql rommel in zat. Maar dat het ledenscript was.
Dus misschien had je als titel iets kunnen doen als 'SQL problemen ledenscript'.
Of 'Ledenscript dubbele leden'.
if (!$_POST['aanmelden']) {

Geeft bijna altijd true. Besef je dat?
[quote="Mario Braam op 06/10/2010 12:10:46"]
@Robert:
Misschien is het een idee om 2 bestanden aan te maken (aanmelden.php en inschrijven.php), en dan bij de form action deze bestanden op te geven. Dan blijven meteen beide acties gescheiden denk ik.
Je geeft aan dat ik in de post moet kijken wat er in de array staat. Maar hoe moet ik dit dan doen? Ik weet namelijk niet hoe print_r, var_dump of exit werken...
En hoef ik achter de header dan alleen exit(); te plaatsen?

Wellicht dat http://nl.php.net/print_r of http://nl.php.net/var_dump je helpen. Maar het enige wat je hoeft te doen is dit toevoegen op de genoemde plek:
<?php
//de echo en <pre> zijn voor een leesbare weergave
echo '<pre>' . print_r($_POST, true) . '</pre>';
exit;
?>

Het maken van 2 bestanden is een optie, maar geen moeten. Het kan prima, maar dan moet je goed weten (nagaan) wat er gebeurt, en waar je op controleert. De print_r kan je daarbij helpen.

[quote="Mario Braam op 06/10/2010 12:10:46"]
@Obelix en Idefix:
De kans is inderdaad heel klein. Maar de kans moet er gewoon niet zijn. Ik kan niet voorspellen wat voor wachtwoorden mijn leden kiezen, maar niet iedereen gebruikt zo'n veilig wachtwoord als ik doe.
[quote]
In principe moet je afdwingen (unique kolom in MySQL) dat een gebruikersnaam maar 1 maal kan voorkomen. Dat het wachtwoord bij sommige mensen overeenkomt, is dan weer geen probleem.

[quote="Mario Braam op 06/10/2010 12:10:46"]
@Robert:
Dat klopt, het lid wordt dan niet aangemaakt. Eigenlijk functioneert het registratiescript een beetje als loginscript, haha. Wel handig, maar niet mijn bedoeling!

Nee, dat klopt. Daarom moet je ook goed weten wat je controleert. 2 bestanden is leuk, maar niet meteen nodig. De controle kan prima in 1 bestand, als je maar weet wat je doet.

Reageren