Thread: variable in url
-
10-10-2013, 17:13 #1
variable in url
Ik zit met een registratiesysteem dat werkt via uitnodiging. Er wordt op moment van uitnodiging een code gegenereerd die wordt toegevoegd aan de url (register.html?code='$code')
Indien er dan op de link geklikt wordt hoeft men enkel nog gebruikersnaam en wachtwoord in te geven. Het formulier voert volgende code uit:
Ziet iemand iets fout want ik krijg steeds volgende melding:PHP Code:<?php
include('configdb.php');
if($_POST["gebruikersnaam"] && $_POST["wachtwoord"] && $_POST["wachtwoord2"])
{
if($_POST["wachtwoord"]==$_POST["wachtwoord2"])
{
if(isset($_GET['code'])){
$activatiestatus = $_GET['code'];
}
$con = mysql_connect("localhost","root");
mysql_select_db("test", $con);
$check = mysql_query("SELECT * FROM `gebruikers` WHERE `activatiestatus` = '$activatiestatus'");
$test = mysql_num_rows($check);
if($test == 1)
{
$gebruikersnaam= 'gebruikersnaam';
$servername="localhost";
$username="root";
$conn= mysql_connect($servername,$username)or die(mysql_error());
mysql_select_db("test",$conn);
$sql="UPDATE gebruikers SET(gebruikersnaam,wachtwoord)values('$_POST[gebruikersnaam]','$_POST[wachtwoord]') WHERE activatiestatus='$activatiestatus'";
$result=mysql_query($sql,$conn) or die(mysql_error());
if($result)
{
$to = $emailadres;
$subject = "Bevestiging voor $gebruikersnaam";
$header = "Bevestiging van account";
$message = "Klik op onderstaande link om uw account te activeren.";
$message .= "localhost/confirm.php?passkey=$activatiestatus";
$sentmail = mail($to,$subject,$message,$header);
if($sentmail)
{
echo "De bevestigingsmail is verstuurd naar je emailadres";
}
else print "Verzenden van bevestigingsmail mislukt";
}
}
else print "Je kan je niet registreren!";
}
else print "Wachtwoorden zijn niet hetzelfde! ";
}
else print"Gegevens zijn niet allemaal ingevuld";
?>
Nochtans wordt "code" doorgegeven in de url en daarna gelijkgesteld aan $activatiestatusCode:Notice: Undefined variable: activatiestatus in D:\Software\XAMPP\htdocs\confirminvitation.php on line 14 Notice: Undefined variable: activatiestatus in D:\Software\XAMPP\htdocs\confirminvitation.php on line 24 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(gebruikersnaam,wachtwoord)values('goossensj','123') WHERE activatiestatus=''' at line 1XBL: Cr4zYm0nKeYz | Battlelog: Cr4zYm0nKeYz | ...no votes
-
-
10-10-2013, 17:50 #2
Zou het kunnen komen doordat ik POST en GET door elkaar gebruik? Mijn formulier is POST-methode, maar maakt dit uit voor variabelen die ik uit de url haal?
XBL: Cr4zYm0nKeYz | Battlelog: Cr4zYm0nKeYz | ...no votes
-
10-10-2013, 17:54 #3Member
- Registered
- 19/06/11
- Location
- Hasselt
- Posts
- 934
- iTrader
- -3 (0%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/5
1a) register.html gaat niet werken -> register.php
1b) Ga je via XAMPP of dubbel klik je gwn op de file? (dubbel klikken werkt niet)
2)
als dat een typ fout HIER was dan misschien :
if(isset($_GET['code'])){
$activatiestatus = $_GET['code'];
}
daar kom hij niet in dus daar zal het wel ergens zitten.
3) Is dit snel geschreven / ben je aan het leren? anders heb ik nog heel wat verbeter puntjes (:
4) Nee $_GET werkt altijd als het in de url staat
Kan je anders ook je register.html eens posten?
Of ik kijk er gewoon over (:
*edit
Tussen dubbele quotes moet je je variablen niet escapen met enkele quotes dat maakt het gewoon verwarrend imoLast edited by Kilghard; 10-10-2013 at 17:59.
Nobody notices what I'm doing ... Until I stop doing it.
Webhosting ? Klik hierno votes
-
10-10-2013, 17:58 #4XBL: Cr4zYm0nKeYz | Battlelog: Cr4zYm0nKeYz | ...no votes
-
10-10-2013, 18:00 #5Member
- Registered
- 27/03/12
- Location
- Knesselare
- Posts
- 425
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Heb je een online voorbeeld? Het is altijd makkelijk om zo de fout te vinden voor ons. Wat gebeurt er in de "configdb.php"? Om connectie te maken met je database kan je simpelweg bovenaan de pagina deze verbinding tot stand brengen in plaats van in je "if" statements.
Wat je nu doet is, wanneer de $_GET['code'] bestaat dan maak je de variable $activatiestatus aan. Wanneer deze niet bestaat dan bestaat de variable ook niet. Als het niet bestaat dan zou de code die van de variable gebruikt maakt ook niet meer mogen geactiveerd worden. Momenteel is dit wel het geval. Uw error zegt dus dat de variable niet bestaat. Er zou dus iets mis moeten zijn met de "isset($_GET['code'])".Portfolio website: http://www.rubenvermeulen.be/
Nederlandstalige PC Multi-Gaming Clan: http://www.soldiersoffreedom.be/
no votes
-
10-10-2013, 18:01 #6Member
- Registered
- 27/03/12
- Location
- Knesselare
- Posts
- 425
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Kilghard was me voor
Portfolio website: http://www.rubenvermeulen.be/
Nederlandstalige PC Multi-Gaming Clan: http://www.soldiersoffreedom.be/
no votes
-
10-10-2013, 18:02 #7Member
- Registered
- 19/06/11
- Location
- Hasselt
- Posts
- 934
- iTrader
- -3 (0%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/5
hm ik hoop dat je dan toch niets te ingewikkelds gaat moeten doen
want dit is vrij basic en vol fouten ^^
2fast2furiousNobody notices what I'm doing ... Until I stop doing it.
Webhosting ? Klik hierno votes
-
10-10-2013, 18:06 #8
Van die fouten ben ik me enorm bewust
een online voorbeeld is er momenteel nog niet, ik zal eerst al eens jullie oplossingen testen en als het dan niet lukt zal ik de rest van php-code postenXBL: Cr4zYm0nKeYz | Battlelog: Cr4zYm0nKeYz | ...no votes
-
10-10-2013, 18:11 #9
Volgens mij ben ik dichter bij een oplossing

Zit er hier een fout in?
Krijg namelijk deze melding:PHP Code:$sql="UPDATE gebruikers SET(gebruikersnaam,wachtwoord)values('$_POST[gebruikersnaam]','$_POST[wachtwoord]') WHERE activatiestatus='$activatiestatus'";
Momenteel krijg activatiestatus dus een waarde, maar hier staat dat die '3cbf' is en eigenlijk is die véél langer (of komt dit gewoon doordat de error niet heel de waarde wil weergeven?)Code:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(gebruikersnaam,wachtwoord)values('abc','123') WHERE activatiestatus='3cbf' at line 1XBL: Cr4zYm0nKeYz | Battlelog: Cr4zYm0nKeYz | ...no votes
-
10-10-2013, 18:15 #10no votes
-
10-10-2013, 18:21 #11Member
- Registered
- 27/03/12
- Location
- Knesselare
- Posts
- 425
- iTrader
- 10 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
Dat ik daar heb overgekeken, zoals "Slynx" zegt. INSERT is niet hetzelfde als UPDATE.
Dit zou het voor jou moeten zijn.
PHP Code:$sql = "UPDATE `gebruikers` SET `gebruikersnaam` = '$_POST[gebruikersnaam]', `wachtwoord` = '$_POST[wachtwoord]' WHERE `activatiestatus` = '$activatiestatus'";
Portfolio website: http://www.rubenvermeulen.be/
Nederlandstalige PC Multi-Gaming Clan: http://www.soldiersoffreedom.be/
no votes
-
10-10-2013, 18:46 #12
Enorm bedankt allemaal
Het werkt!
Je zal me waarschijnlijk de komende weken nog met enorm slechte code zien afkomen en met problemen die ik zelf totaal niet opgelost krijg.XBL: Cr4zYm0nKeYz | Battlelog: Cr4zYm0nKeYz | ...no votes
-
10-10-2013, 21:43 #13Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
Die code vraagt er gewoon om misbruikt te worden. Zoek eens naar SQL injection en hoe je die kan vermijden, anders komt Bobby Tables wel eens langs...
Wat verplicht leesvoer :
- http://www.phptherightway.com/
- http://phpsecurity.readthedocs.org/en/latest/
- https://www.owasp.org/index.php/Cate...op_Ten_Project
- https://www.owasp.org/index.php/OWAS...eference_GuideLast edited by dJeez; 10-10-2013 at 21:50.
PSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes
-
11-10-2013, 09:37 #14
Misschien is dit net iets veiliger?
PHP Code:$db = // uw database PDO connectie
$sql = "UPDATE `gebruikers` SET `gebruikersnaam` = '$_POST[gebruikersnaam]', `wachtwoord` = '$_POST[wachtwoord]' WHERE `activatiestatus` = '$activatiestatus'";
$sql = "UPDATE gebruikers SET gebruikersnaam=:gebruikersnaam,wachtwoord=:wachtwoord WHERE activatiestatus=:activatiestatus";
$stmt = $db->prepare($sql);
$params = array(
'gebruikersnaam' = $data['gebruikersnaam'],
'gebruikersnaam' = $data['wachtwoord'],
'activatiestatus' = $data['activatiestatus'],
);
$stmt->execute($params);
no votes
-
11-10-2013, 11:19 #15Member
- Registered
- 19/06/11
- Location
- Hasselt
- Posts
- 934
- iTrader
- -3 (0%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/5
Hoe is dat veiliger o.O je gebruikt nog altijd $_POST variabelen rechtstreeks in je query , dat is zowat de makkelijkste hack die er bestaat denk ik.
Google "Sql injection & protection " of zo iets
& again variabelen tussen dubbele quotes worden geparsed dus geen single quotes nodigNobody notices what I'm doing ... Until I stop doing it.
Webhosting ? Klik hierno votes



