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?
<?php
include ('database.inc.php');
// Post the form data and prevent mysql injection.
$userdata = mysql_real_escape_string($_POST['user_name']);
$passdata = mysql_real_escape_string($_POST['password']);
$passdata2 = mysql_real_escape_string($_POST['password2']);
$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, $db_link) or 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 (ID, Username, Password, Password2, Email, Status, Rank, IP)
VALUES('.$userdata.', MD5('.$passdata.'), SHA2('.$passdata2.', 256), '.$email.', Disabled, User, '.$IP.')';
$query = mysql_query($sql, $db_link) or die ('Unable to enter information. ' . mysql_error());
$result = mysql_affected_rows($query);
if ($result > 0) {
// Show success and redirect.
echo 'Success! Data has been stored into our database!';
header("Refresh: 2, url=index.php");
}
}
?>
Dat is het hem nou juist.
Ik krijg geen mysql_error() output naast de tekst die ik heb neergezet. In ieder geval ben ik erachter gekomen dat hij bij de select al fout gaat.
Met vriendelijke groet,
Tolga Kavi
N.B overigens. http://digital-universe.nl/reg_form.php voor als u het zelf wilt proberen met een test account aan te maken, wat ik nu krijg is alleen, Unable to check existing records. {Hier zou mysql_error() moeten komen, maar dat is niet het geval.}
Een ID wordt als het goed is al opgehoogd, die mag je weglaten. 2 maal een wachtwoord opslaan is wat overbodig (en gevoeliger voor hackers), en md5() en SHA2() zijn functies binnen php en niet van Mysql. Uiteindelijk moet dit werken;
Een aantal punten:
- INSERT * INTO bestaat niet, een asterix is voor het selecteren van velden.
- gebruik geen hoofdletters in je database structuur
- gebruik de md5 of sha2 functies van PHP en niet die van MySQL
Je hebt geen quotes om je variabelen staan in de query, dus die waardes worden niet in de query verwerkt.
Dit:
<?php
$checksql = 'SELECT * FROM users WHERE Username = '.$userdata.' AND Email = '.$email.' AND IP = '.$IP.'';
?>
Moet dit worden (met wat enters om het beter leesbaar te maken):
<?php
$checksql = "SELECT *
FROM users
WHERE Username = '".$userdata."'
AND Email = '".$email."'
AND IP = '".$IP."'";
?>
<?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_real_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) or 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) or die ('Unable to enter information. ' . mysql_error());
$result = mysql_affected_rows($query);
if ($result > 0) {
// Show success and redirect.
echo 'Success! Data has been stored into our database!';
header("Refresh: 2, url=index.php");
}
}
?>
Ik heb de code aangepast waar nodig, en ik krijg nu dit:
Unable to enter information. Column count doesn't match value count at row 1
En dit na het verwijderen van ID, ligt het dan aan de instelling waaronder mijn sql server draait? of moet ik om het ID kolom heen werken?