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?
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.
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.