Archief - variable in url

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

CrazyMonkeyz

Legacy Member
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:

PHP:
<?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";

?>

Ziet iemand iets fout want ik krijg steeds volgende melding:
Code:
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 1

Nochtans wordt "code" doorgegeven in de url en daarna gelijkgesteld aan $activatiestatus

CrazyMonkeyz

Legacy Member
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?

Kilghard

Legacy Member
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 imo

CrazyMonkeyz

Legacy Member
Kilghard zei:
3) Is dit snel geschreven / ben je aan het leren? anders heb ik nog heel wat verbeter puntjes (:

Ik ben volop aan het leren :) Heb voor een bachelorproef gekozen waarbij ik php moet kunnen, maar kan er eigenlijk niets van :p

Gebruik idd register.html. Ik zal dit veranderen en hopelijk lost dat alles op :)

CrushTheButton

Legacy Member
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'])".

Kilghard

Legacy Member
CrazyMonkeyz zei:
Ik ben volop aan het leren :) Heb voor een bachelorproef gekozen waarbij ik php moet kunnen, maar kan er eigenlijk niets van :p

Gebruik idd register.html. Ik zal dit veranderen en hopelijk lost dat alles op :)

hm ik hoop dat je dan toch niets te ingewikkelds gaat moeten doen ;) want dit is vrij basic en vol fouten ^^


CrushTheButton zei:
Kilghard was me voor :)

2fast2furious

CrazyMonkeyz

Legacy Member
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 posten

CrazyMonkeyz

Legacy Member
Volgens mij ben ik dichter bij een oplossing :)

Zit er hier een fout in?

PHP:
$sql="UPDATE gebruikers SET(gebruikersnaam,wachtwoord)values('$_POST[gebruikersnaam]','$_POST[wachtwoord]') WHERE activatiestatus='$activatiestatus'";

Krijg namelijk deze melding:

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 1

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

Slynx

Legacy Member
CrazyMonkeyz zei:
Volgens mij ben ik dichter bij een oplossing :)

Zit er hier een fout in?

PHP:
$sql="UPDATE gebruikers SET(gebruikersnaam,wachtwoord)values('$_POST[gebruikersnaam]','$_POST[wachtwoord]') WHERE activatiestatus='$activatiestatus'";

Krijg namelijk deze melding:

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 1

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

De update syntax is niet dezelfde als een insert statement!

Code:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value

CrushTheButton

Legacy Member
Dat ik daar heb overgekeken, zoals "Slynx" zegt. INSERT is niet hetzelfde als UPDATE.

Dit zou het voor jou moeten zijn.
PHP:
$sql = "UPDATE `gebruikers` SET `gebruikersnaam` = '$_POST[gebruikersnaam]', `wachtwoord` = '$_POST[wachtwoord]' WHERE `activatiestatus` = '$activatiestatus'";

CrazyMonkeyz

Legacy Member
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.

dendaak

Legacy Member
Misschien is dit net iets veiliger?

PHP:
$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);

Kilghard

Legacy Member
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 nodig
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan