Goedendag allen,

Mijn naam is Tolga, ik ben nieuw op dit forum en ik loop vast met mijn registratie script. Ik krijg geen mysql_error() meldingen terwijl ik dat er wel bij heb staan.

Ik kan de code hier wel posten maar hoe doe ik dit?
Tussen code tags of iets anders?

Met vriendelijke groet,

Tolga Kavi
Kijk naar de kleuren in je code (insert-query). Je ziet dat het dan niet klopt/goed gaat. Zie ook opmerking van Eddy.

Daarnaast: na header wordt exit geadviseerd.

Regel 9 t/m 12 zijn niet nodig; je kopieert nu variabelen.
mysql_real_escape_string gebruik je in een query.
Opmerkingen op je laatste script:

Regel 4 en 5: Niet php sluiten en dan weer openen. Hierdoor kan je de welbekende error 'Headers already send' error krijgen.
Regel 9, 10, 11 en 12: Een password hoef je niet te beveiligen want daar gaat een MD5() overheen. Waarom beveilig je email en ip niet. Dat is nu een sql-injection-lek.
Regel 21: Or die() is geen nette manier. Bouw nette foutafhandeling in.
Regel 29, 31 en 33: $count is een getal en géén array().
Regel 43: Data hoort tussen enkele quotes te staan.
Regel 44: Or die() is geen nette manier. Bouw nette foutafhandeling in.
Regel 50 en 51: Moeten omgedraaid worden in verband met 'Headers already send' error.
- SanThe - op 10/02/2012 19:11:08

Opmerkingen op je laatste script:

Regel 4 en 5: Niet php sluiten en dan weer openen. Hierdoor kan je de welbekende error 'Headers already send' error krijgen.
Regel 9, 10, 11 en 12: Een password hoef je niet te beveiligen want daar gaat een MD5() overheen. Waarom beveilig je email en ip niet. Dat is nu een sql-injection-lek.
Regel 21: Or die() is geen nette manier. Bouw nette foutafhandeling in.
Regel 29, 31 en 33: $count is een getal en géén array().
Regel 43: Data hoort tussen enkele quotes te staan.
Regel 44: Or die() is geen nette manier. Bouw nette foutafhandeling in.
Regel 50 en 51: Moeten omgedraaid worden in verband met 'Headers already send' error.


@SanThe
Hoe zou ik IP kunnen beveiligen dan? Ook gewoon mysql_real_escape_string($var)??

En bedankt allen voor jullie feedback:

<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
?>
<?php
include ('includes/database.inc.php');

// Post the form data and prevent mysql injection.
$userdata = mysql_real_escape_string($_POST['user_name']);
$passdata = mysql_escape_string(sha1($_POST['password']));
$email = $_POST['email'];
$IP = $_SERVER['REMOTE_ADDR'];


// Connect to the database and check if either the username, ip, or email is registered.
$checksql = "SELECT *
  FROM users
  WHERE Username = '$userdata'
  AND Email = '$email'
  AND IP = '$IP'";
$checkquery = mysql_query($checksql);
if (!$checkquery) {

die ('Unable to check for existing records: ' . mysql_error());
}

$count = mysql_num_rows($checkquery);

// Check if any records exist, else post to database.
if ($count > 0) {
	
	// Throw an error message for data that already exists.
	if ($count['IP'] > 0) {
		echo 'Sorry, your IP: '.$IP.' already has been registered, we only allow one account per IP.';
	} elseif ($count['Username'] > 0) {
		echo 'Sorry, it seems your username: '.$userdata.' has already been taken.';
	} elseif ($count['Email'] > 0) {
		echo 'Sorry, it seems this email address is already registered.';
	}
} else {
	
	// Connect to the database and fill in the data.
	$sql = "INSERT 
	INTO users 
	(Username, Password, Email, Status, Rank, IP) 
	VALUES('$userdata', 
	'$passdata', 
	'$email', 'Disabled', 'User', '$IP')";
	$query = mysql_query($sql);
	if (!$query) {
		echo 'Unable to add data: ' . mysql_error();
	}
		
	
	if ($query) {
		
		// Show success and redirect.		
		header("Refresh: 2; url=index.php");
		echo 'Data added.';
		exit();
	}
}

?>


Op dit moment heb ik de script zo hier en daar aangepast. En hij werkt.
Ik zal er nog meer aan sleutelen en jullie feedback meenemen.
Je script zoals het er nu staat is niet correct.
Lees en verwerk de opmerkingen van SanThe.
Tolga Kavi op 10/02/2012 19:16:02

Hoe zou ik IP kunnen beveiligen dan? Ook gewoon mysql_real_escape_string($var)??


Uiteraard.

Tolga Kavi op 10/02/2012 19:16:02

Op dit moment heb ik de script zo hier en daar aangepast. En hij werkt.


Dat het werkt is zo te zien puur mazzel, want er zitten nog behoorlijk grove fouten in.

Haal ook alle $vars buiten de (php)quotes.

Reageren