Hallo,

Ik heb een vraagje, ik heb zelf al van alles geprobeerd. Maar ik kom er maar niet uit. Het is een fout met het inserten van de database.

<?php
$sql = mysql_query("INSERT INTO leden (gebruikersnaam, emailadress, wachtwoord, voornaam, achternaam, adres, postcode, plaats)VALUES (
".$_POST[md5('user')].",
".$_POST[md5('email')].",
".$_POST[md5(md5('pass'))].",
".$_POST[md5('voornaam')].",
".$_POST[md5('achternaam')].",
".$_POST[md5('postcode')].",
".$_POST[md5('huisnr')].",
".$_POST[md5('straat')].",
".$_POST[md5('woonplaats')].")");
?>
Lees eens een handleiding van PHP/MYSQL

if(mysql_num_rows($sql) == 0) {

Maak daar van

$result = mysql_query($sql);

if(mysql_num_rows($result) == 0) {
<?php
if($_CONFIG['database_active'] == '1') {
if(isset($_POST['subm'])) {

// controleren van velden account gegevens
if($_POST['user'] != "" AND $_POST['email'] != "" AND $_POST['pass'] != "") {
$sql = mysql_query("SELECT gebruikersnaam FROM leden WHERE gebruikersnaam='".$_POST['user']."'");
if(mysql_num_rows($sql) == 0) {
if(preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}$/i", $_POST['email'])) {
$account = 'oke';
}else{
$fout .= '<small>Het opgegeven emailadres is niet geldig</strong></small><br>';
}
}else{
$fout .= '<small>De opgegeven gebruikersnaam is reeds in gebruik</strong></small><br>';
}
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Account gegevens</strong></small><br>';
}

// controleren van velden persoonlijke gegevens
if($_POST['voornaam'] != "" AND $_POST['achternaam'] != "" AND $_POST['postcode'] != "" AND $_POST['huisnr'] != "" AND $_POST['straat'] != "" AND $_POST['woonplaats'] != "") {
$persoonlijk = 'oke';
}else{
$fout .= '<small>U bent een of meerdere velden vergeten in te voeren bij <strong>Persoonlijke gegevens</strong></small><br>';
}

// als alles correct is afgehandeld
if($account == 'oke' && $persoonlijk == 'oke') {

$sql =
"
INSERT INTO
leden
(
gebruikersnaam,
emailadress,
wachtwoord,
voornaam,
achternaam,
adres,
postcode,
straat,
plaats
)
VALUES
(
'".mysql_escape_string($_POST['user'])."',
'".mysql_escape_string($_POST['email'])."',
'".mysql_escape_string(md5($_POST['pass']))."',
'".mysql_escape_string($_POST['voornaam'])."',
'".mysql_escape_string($_POST['acternaam'])."',
'".mysql_escape_string($_POST['postcode'])."',
'".mysql_escape_string($_POST['huisnr'])."',
'".mysql_escape_string($_POST['straat'])."',
'".mysql_escape_string($_POST['woonplaats'])."'
)
";



if($sql == true) {
echo 'goed';
}
}

// fouten weergeven
if(isset($fout)) {
echo '<small><strong>Fouten:</strong></small><br>';
echo $fout;
}
}
if(isset($invoer)) {
echo '<small><strong>Registratie geslaagd:</strong></small><br>';
}
?>
Controleren of een formulier gesubmit wordt doen we met:

<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
?>

Controleren op variabele leegte doen we zo:

<?php
if(!empty($_POST['naam'])){
?>

Foutafhandeling queries ontbreekt. Doe dit zo:

<?php
$query = "jequery";
if(!$result = mysql_query($query)){
trigger_error(mysql_error());
}
else {
//rest code
}
?>

Gebruik ook in je eerste query mysql_real_escape_string.

Een md5 bevat nooit gekke tekens die je database kunnen "hacken", dus mysql_real_escape_string(md5(...)) is overbodig. Gebruik alleen md5(blabla) .

MD5 word trouwens tegenwoordig gezien als "onveilig". Gebruik 1 van de vele andere algoritmes van [php]hash[/php]() , óf gebruik in ieder geval een SALT.

Je kan trouwens ook:

<?php
if($sql = true){
?>

herschrijven naar:

<?php
if($sql))
//of, voor false:
if(!$sql)){
?>

In je eerste regel zou ik als ik jou was gebruik maken van true of false, en niet de STRING '1'. Dus

<?php
// === betekent gelijk EN hetzelfde type
if($_CONFIG['database_active'] === true) {
?>

in plaats van:

<?php
if($_CONFIG['database_active'] == '1') {
?>

Rewrite van je code:

{KOMT IN EDIT}
@ Afra

Heb je misschien een voorbeeldje hoe je een goed beveiligd wachtwoord maakt?
Kan je bijvoorbeeld ook een md5 en een hash samen doen? Of zal dat niet veel uitmaken kwa sterkte?
<?php
$string = 'wachtwoord';
$string = 'gewoon.lang.maken__' . $string . '__nog.meer.salt';
$hash = hash('ripemd160', $string);
?>
Agree met Eddy. Je kan ook je salt dynamisch laten genereren bij het registreren, in een aparte database of tabel opslaan. Die haal je dan bij het "decrypten" weer op. En je kan het nog meer uitbreiden met zogeheten pepper, daarbij maak je nog een extra string aan in een apart tekst bestand buiten de webserver. dan krijg je uiteindelijk iets als (oud concept dingetje):

<?php
/*encryption functie*/
function custom_hash($pass, $username) {

/*Pepper ophalen uit bestand */
$pepperfile = "pepper.txt";
$fh = fopen($pepperfile, 'r');
$pepper = fread($fh, filesize($pepperfile));
fclose($fh);

/*salt ophalen uit database*/
$query = "SELECT Salt FROM salt WHERE Gebruikersnaam = '".$username."'";
$result = mysql_query($query);
$rij = mysql_fetch_assoc($result);
$salt = $rij['Salt'];


/*password generaten*/
return hash('ripemd160', $pepper.$pass.$salt);
}
?>

Natuurlijk zet je pepper file buiten webserver.
Je hebt allemaal varchar(255) en één varchar(7).
Interessant, want een md5() heeft altijd precies varchar(32) nodig.
Dus die met 7 gaat helemaal fout.
waarom zal dat fout moeten gaan, de varchar(7) is voor de postcode. Deze mag niet langer zijn dan 7 karakters.
SanThe doelt waarschijnlijk op jouw initiele post waarin jij alles een md5 encryptie geeft.

Dan maakt het niet meer uit of je waarde nou 2, 5, 7 of 12 tekens heeft, de hash waarde (md5) wordt altijd een combinatie van 32 tekens, wat niet gaat passen in een varchar veld met een maximale lengte van 7.
Het gaat hier om mysql, dus een fout zou je daar niet voor terug krijgen enkel dat niet alles wordt opgeslagen 8-)

Reageren