<?php

//Defineer functie
function error($link)
{
header('Refresh: 3; url=' . $link . '');
}

if($_SERVER['REQUEST_METHOD'] == 'POST') // Controle of er op de knop is geklikt.
{
include_once 'connect.php'; // Connectie db.

if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password']) AND !empty($_POST['passwordc']) AND !empty($_POST['mail'])) // Controle op invoeren
{
if(($_POST['password']) == ($_POST['passwordc'])) // Controle of controle pw overeenkomt met echte pw.
{

include_once 'uwx3g.php'; // Connectie met salt page.
$gebruikersnaam = mysql_real_escape_string($_POST['gebruikersnaam']); //Data veilig maken voor sql injectie d.m.v. mysql_real.....
$password = sha1(salt($_POST['password'])); //sha1 hash van pass. Inclusief salt.
$mail = mysql_real_escape_string($_POST['mail']);
$query = ("SELECT * FROM ost_gebruikers WHERE gebruikersnaam='. $gebruikersnaam . '"); // Controle op gebruikersnaam, zo ja een 1 else en 0 (zie controle bij de volgende if)
$uitvoer = mysql_query($query); //($row = mysql_fetch_assoc($get))

$controle = mysql_num_rows($uitvoer);

if($controle == 0) // Als uitvoer is 0 registreren.
{
mysql_query("INSERT INTO ost_gebruikers (id, gebruikersnaam, password, mail) VALUES ('','" . $gebruikersnaam . "', '" . $password . "', '" . $mail . "')"); // Gebruiker in db plaatsen.
header('Refresh: 4; url=login1.php');
exit ('U bent succesvol aangemeld, u kunt nu inloggen.');
}
else
{
header('Refresh: 2; url=register.php');
exit ('Verkeerde gebruikersnaam of wachtwoord.'); // Negatieve melding van ingevoerde gegevens.
}
}
else
{
error('register.php');
exit ('De ingevoerde gegevens kloppen niet, u heeft het controle wachtwoord verkeerd ingevuld.'); // Negatieve melding van ingevoerde gegevens.
}
}
else
{
error('register.php');
exit ('De ingevoerde gegevens kloppen niet, niet alles is ingevuld.'); // Negatieve melding van ingevoerde gegevens.
}



}
else
{
error('register.php');
exit ('U bent op de verkeerde pagina gekomen, U wordt doorverwezen.');
}

?>

Het bovenstaande is dus mijn stukje PHP code. Ik heb het hier van de site en dusdanig bewerkt waardoor hij werkte.

Heb hem daarna in een ander script gestopt en mijn database veranderd zodat hij zou moeten werken.

Echter, ik krijg nu deze onderstaande melding:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Oefen\osTicket\OSTICKET\osticket_1.6.0\upload\registreerv.php on line 25

Ik heb op internet gezocht maar kon helaas niets bruikbaars vinden.

Help:(
dat is een probleempje met de query. daarom moet je ook altijd foutafhandeling inbouwen: tutorial

de query is fout: de query afsluiten gaat mis. probeer dit eens:
<?php
"SELECT * FROM ost_gebruikers WHERE gebruikersnaam='" . $gebruikersnaam . "'"
?>
Helaas, krijg nog steeds dezelfde melding. Had trouwens die query ook al maar heb ik veranderd. Weet alleen niet meer waarom :/

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Oefen\osTicket\OSTICKET\osticket_1.6.0\upload\registreerv.php on line 25
U bent succesvol aangemeld, u kunt nu inloggen.

Hij geeft dus nu dit bovenstaande aan. Maar hij voegt mij nog niet toe in de database.
gebruik je de juiste benaming voor de table naam? overigens kopieer je onnodig variablen regel 19 tot 23. lees die tut die Jeroen je gaf eens door en kijk wat je fout doet. pas dit vervolgens aan. verder klopt je if else constructie voor geen meter anders zou je ipv u bent sucescol aangemeld. een foutmelding moeten krijgen.

Jesse D op 11/04/2012 14:42:04

Ik heb het hier van de site en dusdanig bewerkt waardoor hij werkte.


Benieuwd wat je hier vandaan hebt en wat je hebt bewerkt.
empty is geen goede manier om iets te controleren. Gebruik liever isset.

Gebruik in je query geen * maar benoemd het veld/ de velden die je nodig hebt.

Zoals aangegeven: bouw foutafhandeling in.

Jeroen vd op 11/04/2012 14:48:32

dat is een probleempje met de query. daarom moet je ook altijd foutafhandeling inbouwen: tutorial

de query is fout: de query afsluiten gaat mis. probeer dit eens:
<?php
"SELECT * FROM ost_gebruikers WHERE gebruikersnaam='" . $gebruikersnaam . "'"
?>


Tip: Het gebruik van enkele quote's is effectiever. Omdat met dubbel quote's word gekeken of er nog variabelen zijn die mee moeten worden verwerkt. Scheelt weer wat belasting op je server.


$aErrors = array();

mysql_query('SELECT iets FROM tabel WHERE iets = "'.mysql_real_escape_string($var).'"') or $aErrors = mysql_error();


en als je toch dubble quote's gebruikt hoef je je variabel ook niet binnenin de dubbel quote's dubbel quote's mee te geven.


echo "ik het $naam";


@TS, gebruik ook mysql_affected_rows om te kijken of er ook echt daadwerkelijk een record is toegevoegd/aangepast/verwijdert. [php]mysql_error[/php] is niet genoeg!
http://www.phphulp.nl/php/script/php-algemeen/beveiligde-login-en-registratie/1873/

Hier heb ik het vandaan. Ik zal het aangepaste script, wat dus wel werkt hieronder neerzetten. Ik heb het gekopieerd en enkele dingen veranderd.

De foutafhandeling komt later aan bod en evt veiligheid ook. Het is nu even belangrijk dat het werkt.

Dit is het aangepaste script wat wel werkt.
<?php

//Defineer functie
function error($link)
{
header('Refresh: 3; url=' . $link.php . '');
}

if($_SERVER['REQUEST_METHOD'] == 'POST') // Controle of er op de knop is geklikt.
{
include_once 'connect.php'; // Connectie db.

if(!empty($_POST['gebruikersnaam']) AND !empty($_POST['password']) AND !empty($_POST['passwordc']) AND !empty($_POST['mail'])) // Controle op invoeren
{
if(($_POST['password']) == ($_POST['passwordc'])) // Controle of controle pw overeenkomt met echte pw.
{

include_once 'uwx3g.php'; // Connectie met salt page.
$gebruikersnaam = mysql_real_escape_string($_POST['gebruikersnaam']); //Data veilig maken voor sql injectie d.m.v. mysql_real.....
$password = sha1(salt($_POST['password'])); //sha1 hash van pass. Inclusief salt.
$mail = mysql_real_escape_string($_POST['mail']);
$sql = ("SELECT gebruikersnaam FROM gebruikers WHERE gebruikersnaam='". $gebruikersnaam . "'"); // Controle op gebruikersnaam, zo ja een 1 else en 0 (zie controle bij de volgende if)
$uitvoer = mysql_query($sql); //($row = mysql_fetch_assoc($get))

$controle = mysql_num_rows($uitvoer);

if($controle != 0) // Als uitvoer is 0 registreren.
{
mysql_query("INSERT INTO gebruikers (id, gebruikersnaam, password, mail) VALUES ('','" . $gebruikersnaam . "', '" . $password . "', '" . $mail . "')"); // Gebruiker in db plaatsen.
header('Refresh: 4; url=login.php');
exit ('U bent succesvol aangemeld, u kunt nu inloggen.');
}
else
{
header('Refresh: 2; url=registreren.php');
exit ('Verkeerde gebruikersnaam of wachtwoord.'); // Negatieve melding van ingevoerde gegevens.
}
}
else
{
error(registreren.php);
exit ('De ingevoerde gegevens kloppen niet, u heeft het controle wachtwoord verkeerd ingevuld.'); // Negatieve melding van ingevoerde gegevens.
}
}
else
{
error(registreren.php);
exit ('De ingevoerde gegevens kloppen niet, niet alles is ingevuld.'); // Negatieve melding van ingevoerde gegevens.
}



}
else
{
error(registreren.php);
exit ('U bent op de verkeerde pagina gekomen, U wordt doorverwezen.');
}

?>
Dit gaat werken?
Hmm, ik zou zweren dat dit toch een foutmelding zou moeten opleveren:
<?php
error(registreren.php);
?>
registeren.php is namelijk een string dus volgens mij moet dat tussen quotes (enkel of dubbel).
Jesse D op 11/04/2012 16:50:35

De foutafhandeling komt later aan bod en evt veiligheid ook. Het is nu even belangrijk dat het werkt.


Dat zijn nou net de 2 belangrijkste onderdelen bij scripten.

En jij doet alles altijd in 2x? Straks kun je nog een keer alle scripts nalopen. Kom je mogelijk (weer) foutmeldingen tegen. Kost je meer dan 2x zo veel tijd dan nu in 1x goed te doen. Bijkomend voordeel: als het niet goed gaat, zie je ook gelijk waarom...

Reageren