Hoi,

Ik wil in mijn script op 2 verschillende momenten een submit kunnen doen. Dit werkt alleen niet.
Het moet zo ongeveer gaan:
Aanmelden -> submit
Check door gebruiker -> submit
Verwerk gegevens -> message...

<?php
function registerUser()
{
try
{
$oForm = new Formulier('Aanmelden');
$oForm->add( new Text('Gebruikersnaam:', 'naam', 40), 'isText' );
$oForm->add( new Text('Email:', 'email', 255), 'isEmail' );
$oForm->add( new Text('Postcode:', 'postcode', 6), 'isPostcode');
$oForm->add( new Password('Wachtwoord:', 'wachtwoord', 40), array('minLengte', 5));
$oForm->add( new Password('Herhaal wachtwoord:', 'retypewachtwoord', 40), array('minLengte', 5));
$oForm->add( new Radio('Geslacht:', 'geslacht', array('Man', 'Vrouw') ), 'verplicht' );
$oForm->add( new Checkbox('<b>Ja</b> ik ga akkoord met de voorwaarden.', 'voorwaarden', '1'), 'verplicht' );
$oForm->add( new Submit('aanmelden', 'Aanmelden') );
$oForm->add( new Reset('wis', 'Wis velden') );

$html = $oForm;

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if( $oForm->controleerVelden() )
{
if($_POST['wachtwoord'] !== $_POST['retypewachtwoord'])
{
$html.= 'De wachtwoorden komen niet overeen.';
}
else
{
//Session maken van de posts
$_SESSION['input']['username'] = $_POST['naam'];
$_SESSION['input']['password'] = $_POST['wachtwoord'];
$_SESSION['input']['pass_md5'] = md5($_POST['wachtwoord']);
$_SESSION['input']['email'] = $_POST['email'];
$_SESSION['input']['postcode'] = $_POST['postcode'];
$_SESSION['input']['geslacht'] = $_POST['geslacht'];

$this->sUsername = $_SESSION['input']['username'];
$this->sPassword = $_SESSION['input']['password'];
$this->sPass_MD5 = $_SESSION['input']['pass_md5'];
$this->sEmail = $_SESSION['input']['email'];
$this->sPostcode = $_SESSION['input']['postcode'];
$this->sGeslacht = $_SESSION['input']['geslacht'];

//unset($_SESSION['input']);

}
if(isset($_POST['aanmelden']))
{
$html = clsLogin::checkRegister();
}
else
{
if(isset($_POST['Doorgaan']))
{
$html = clsLogin::verwerkRegister();
}
}
}
}
return $html;
}
catch( Exception $e )
{
return '<pre>'.$e->getMessage().'</pre>';
}
}

//user check user input
function checkRegister()
{
$html = 'Dit is het resultaat van de door u ingevulde gegevens.<br /><br />';
$html.= 'Naam: '.$this->sUsername.'<br />';
$html.= 'Email: '.$this->sEmail.'<br />';
$html.= 'Postcode: '.$this->sPostcode.'<br />';
$html.= 'Wachtwoord: '.$this->sPassword.'<br />';
$html.= 'Geslacht: '.$this->sGeslacht.'<br />';

$oForm = new Formulier('Check');
$oForm->add( new Submit('doorgaan', 'Doorgaan') );
$html.= $oForm;

return $html;
}

function verwerkRegister()
{
$this->sActcode = clsCode::Randpass(15);

$dConnector = new DbConnect('mark moes');
$dConnector->DbConnector();
$dConnector->MySQLquery("INSERT INTO users (
id,
username,
password,
email,
postcode,
city,
country,
geslacht,
activation,
rank,
activation_date,
times_online,
last_online
) VALUES (
'',
'".mysql_real_escape_string($this->sUsername)."',
'".mysql_real_escape_string($this->sPass_MD5)."',
'".mysql_real_escape_string($this->sEmail)."',
'".mysql_real_escape_string($this->sPostcode)."',
'Haulerwijk',
'NL',
'".mysql_real_escape_string($this->sGeslacht)."',
'".$this->sActcode."',
'00',
NOW(),
'2',
NOW()
)"); //Insertquery

//mail activatiecode, gebruikersnaam en wachtwoord
$sMsgSub = 'Activatie'.$this->sRoot.'!';

$sMsg = 'Gefeliciteerd!\n\n';
$sMsg.= 'Uw activatie op '.$this->sRoot.' kan succesvol worden afgerond!\n\n';
$sMsg.= 'U bent geregistreerd met de volgende gegevens:\n';
$sMsg.= 'Gebruikersnaam: '.$this->sUsername.'.';
$sMsg.= 'Wachtwoord: '.$this->sPassword.'.\n';
$sMsg.= 'Bewaar deze gegevens goed! Ze zijn uniek.\n\n';
$sMsg.= 'Het enige wat nog moet gebeuren is het activeren van uw account.';
$sMsg.= 'Dit kan door te klikken op de onderstaande link, waarna u meteen gebruik kunt maken van '.$this->sRoot.'!\n\n';
$sMsg.= 'http://www.'.$this->sRoot.'?activation='.$this->sActcode.'&&user='.$this->sUsername.'\n\n';;
$sMsg.= 'Veel succes, en tot WWW!\n\n';
$sMsg.= 'Met vriendelijke groet,\n';
$sMsg.= 'de webmaster van '.$this->sRoot.'.';

$mail = new mailer();
$mail->addReceiver($this->sEmail);
$mail->setSender();
$mail->setSubject($sMsgSub);
$mail->setMessage($sMsg);

$html = $sMsg;

return $html;
}
?>
Het registreren gaat goed. Velden worden door script gecontroleerd, anders overnieuw invullen.
Vervolgens wordt het resultaat geechoed, gebruiker moet dit checken, en vervolgens doorgaan. Dit gaat ook goed, alleen als de gebruiker klikt op doorgaan, krijg ik het aanmeld formulier weer, met 2 meldingen dat ik 2 velden niet heb ingevoerd. dat gaat dus niet goed, het form moet verzonden worden, en een msg op het scherm komen.

Ter informatie:
Er staat inderdaad session_start() bovenin mijn script, en error reporting staat ook op schreeuwen.

Weet iemand de oplossing?

<b>edit:</b> vraagteken vergeten, lijkt zo onvriendelijk... ;-)

ik heb niet naar je code gekeken maar ik kan je zo zeggen hoe je de verschillen tussen verschillende forms kan bepalen (en dit moet dan uiteindelijk naar je oplossing leiden).

Je kan kijken naar wat voor data is gevuld. Dit raad ik niet aan omdat de gebruiker dan wel die velden ingevuld moet hebben.

Je kan kijken naar de waarde van de submit button. name="submit" value="Login" en bij form 2: name="submit" value="Registreer". Dit werkt meestal goed genoeg.

In het geval dat je geen submit button hebt (ja het is mogelijk om dat toch te submitten) kan je een form een hidden value meegeven dat aangeeft welk form gesubmit heeft.

Ga er trouwens vanuit dat de gebruiker (niet de doorsnee gebruiker) je form kan aanpassen en submitten wat hij/zij maar wil.
@Flip,
wat je zegt, klopt, en werkt ook hier... Maar waar t om gaat is dat er dus wel gesubmit word, alleen naar de verkeerde locatie. Ik snap niet hoe ik weer terug kom bij het eerste form.
ik moet er zo vandoor, dus ik kijk/type zo lang ik kan

wat ik vreemd vind is regel 17, regel 25
$html is een object en in regel 25 ga je een object aan een string plakken?

is het object Formulier is dat je zelf hebt gemaakt of ergens vandaan hebt gehaald?

staat deze code weer in een ander object? ik neem aan van wel regel 37 gebruik van $this

regel 51 & regel 53: je kan elseif gebruiken hier denk ik

ik denk dat de locatie waarnaar je formulier wordt gesubmit bepaald wordt in het object Formulier. Althans als (vanaf regel 6) dit het formulier is wat je bedoelt.

Zou handig zijn als je:
* het hele object zou laten zien (ik refereer aan regel 37)
* het object Formulier zou laten zien
* de pagina waar deze objecten worden aangemaakt (dus een nieuwe copy van de class)

... kan posten

mijn tijd is nu op, hopelijk heb je hier wat aan
Ik heb dat object inderdaad expres in een string staan, zodat ik dat allemaal in een keer kan returnen. Die tweede html op regel 25 is een foutmelding, zoals je wel hebt gezien waarschijnlijk :P. Je kunt toch niet 2 dingen returnen? anders maak ik er van: return $oForm en return $html.

Gezien die $this op regel 37, ik heb de variabelen boven aan de class gezet, en dan moet je toch this gebruiken om de variabelen ook in verschillende functies te gebruiken?

Nou ja, ik laat je de hele class zien:

<?php

class clsLogin
{
static public
$sRoot,
$sUsername,
$sPassword,
$sPass_MD5,
$sEmail,
$sPostcode,
$sGeslacht;

public function getSettings()
{
//settings ophalen uit SystemComponent
$aSettings = SystemComponent::getSettings();
$this->sRoot = $aSettings['root'];
}


//Registreren nieuwe gebruikers
//Outputs $html
//Needs: !! session_start() !!
function registerUser()
{
try
{
$oForm = new Formulier('Aanmelden');
$oForm->add( new Text('Gebruikersnaam:', 'naam', 40), 'isText' );
$oForm->add( new Text('Email:', 'email', 255), 'isEmail' );
$oForm->add( new Text('Postcode:', 'postcode', 6), 'isPostcode');
$oForm->add( new Password('Wachtwoord:', 'wachtwoord', 40), array('minLengte', 5));
$oForm->add( new Password('Herhaal wachtwoord:', 'retypewachtwoord', 40), array('minLengte', 5));
$oForm->add( new Radio('Geslacht:', 'geslacht', array('Man', 'Vrouw') ), 'verplicht' );
$oForm->add( new Checkbox('<b>Ja</b> ik ga akkoord met de voorwaarden.', 'voorwaarden', '1'), 'verplicht' );
$oForm->add( new Submit('aanmelden', 'Aanmelden') );
$oForm->add( new Reset('wis', 'Wis velden') );

$html = $oForm;

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if( $oForm->controleerVelden() )
{
if($_POST['wachtwoord'] !== $_POST['retypewachtwoord'])
{
$html.= 'De wachtwoorden komen niet overeen.';
}
else
{
//Session maken van de posts
$_SESSION['input']['username'] = $_POST['naam'];
$_SESSION['input']['password'] = $_POST['wachtwoord'];
$_SESSION['input']['pass_md5'] = md5($_POST['wachtwoord']);
$_SESSION['input']['email'] = $_POST['email'];
$_SESSION['input']['postcode'] = $_POST['postcode'];
$_SESSION['input']['geslacht'] = $_POST['geslacht'];

$this->sUsername = $_SESSION['input']['username'];
$this->sPassword = $_SESSION['input']['password'];
$this->sPass_MD5 = $_SESSION['input']['pass_md5'];
$this->sEmail = $_SESSION['input']['email'];
$this->sPostcode = $_SESSION['input']['postcode'];
$this->sGeslacht = $_SESSION['input']['geslacht'];

//unset($_SESSION['input']);

}
if(isset($_POST['aanmelden']))
{
$html = clsLogin::checkRegister();
}
else
{
if(isset($_POST['Doorgaan']))
{
$html = clsLogin::verwerkRegister();
}
}
}
}
return $html;
}
catch( Exception $e )
{
return '<pre>'.$e->getMessage().'</pre>';
}
}

//user check user input
function checkRegister()
{
$html = 'Dit is het resultaat van de door u ingevulde gegevens.<br /><br />';
$html.= 'Naam: '.$this->sUsername.'<br />';
$html.= 'Email: '.$this->sEmail.'<br />';
$html.= 'Postcode: '.$this->sPostcode.'<br />';
$html.= 'Wachtwoord: '.$this->sPassword.'<br />';
$html.= 'Geslacht: '.$this->sGeslacht.'<br />';

$oForm = new Formulier('Check');
$oForm->add( new Submit('doorgaan', 'Doorgaan') );
$html.= $oForm;

return $html;
}

function verwerkRegister()
{
$this->sActcode = clsCode::Randpass(15);

$dConnector = new DbConnect('mark moes');
$dConnector->DbConnector();
$dConnector->MySQLquery("INSERT INTO users (
id,
username,
password,
email,
postcode,
city,
country,
geslacht,
activation,
rank,
activation_date,
times_online,
last_online
) VALUES (
'',
'".mysql_real_escape_string($this->sUsername)."',
'".mysql_real_escape_string($this->sPass_MD5)."',
'".mysql_real_escape_string($this->sEmail)."',
'".mysql_real_escape_string($this->sPostcode)."',
'Haulerwijk',
'NL',
'".mysql_real_escape_string($this->sGeslacht)."',
'".$this->sActcode."',
'00',
NOW(),
'2',
NOW()
)"); //Insertquery

//mail activatiecode, gebruikersnaam en wachtwoord
$sMsgSub = 'Activatie'.$this->sRoot.'!';

$sMsg = 'Gefeliciteerd!\n\n';
$sMsg.= 'Uw activatie op '.$this->sRoot.' kan succesvol worden afgerond!\n\n';
$sMsg.= 'U bent geregistreerd met de volgende gegevens:\n';
$sMsg.= 'Gebruikersnaam: '.$this->sUsername.'.';
$sMsg.= 'Wachtwoord: '.$this->sPassword.'.\n';
$sMsg.= 'Bewaar deze gegevens goed! Ze zijn uniek.\n\n';
$sMsg.= 'Het enige wat nog moet gebeuren is het activeren van uw account.';
$sMsg.= 'Dit kan door te klikken op de onderstaande link, waarna u meteen gebruik kunt maken van '.$this->sRoot.'!\n\n';
$sMsg.= 'http://www.'.$this->sRoot.'?activation='.$this->sActcode.'&&user='.$this->sUsername.'\n\n';;
$sMsg.= 'Veel succes, en tot WWW!\n\n';
$sMsg.= 'Met vriendelijke groet,\n';
$sMsg.= 'de webmaster van '.$this->sRoot.'.';

$mail = new mailer();
$mail->addReceiver($this->sEmail);
$mail->setSender();
$mail->setSubject($sMsgSub);
$mail->setMessage($sMsg);

$html = $sMsg;

return $html;
}
//Activeren nieuwe account
function activationUser()
{
if(!empty ($_GET['user']))
{
$sUsername = $_GET['user'];
}

$connector = new DbConnect('mark moes'); //Select the db..
$connector->DbConnector(); //make connection
$aRow = $connector->fetchArray($connector->MySQLquery("SELECT actcode FROM users WHERE username = '$sUsername' LIMIT 1")); //Selectquery

if($_GET['activation'] == $aRow['actcode'])
{
$connector->MySQLquery("UPDATE users SET actcode = '1' LIMIT 1"); //Updatequery

if($connector->MySQLquery)
{
$html = 'De activatie van uw account is voltooid.\n';
$html.= 'U kunt nu inloggen met de volgende gegevens:\n\n';
$html.= 'Gebruikersnaam: <b>'.$sUsername.'</b>\n';
$html.= 'Wachtwoord: <b>'.$sPass_noMD5.'</b>\n\n';
$html.= 'Veel succes!';
}
}
else
{
$html = 'De activatiecode komt niet voor in dit systeem of niet in combinatie met uw gebruikersnaam.';
}
return $html;
}

//Inloggen
function loginUser()
{
try
{
$oForm = new Formulier('Aanmelden');
$oForm->add( new Text('Gebruikersnaam:', 'gebruikersnaam', 40), 'isAlnum' );
$oForm->add( new Password('Wachtwoord:', 'wachtwoord', 40), array('minLengte', 5));
$oForm->add( new Submit('aanmelden', 'Aanmelden') );
$oForm->add( new Reset('wis', 'Wis velden') );
}
catch( Exception $e )
{
return '<pre>'.$e->getMessage().'</pre>';
}

$sUsername = $_POST['gebruikersnaam'];

$connector = new DbConnect('mark moes'); //Select the db..
$connector->DbConnector(); //make connection
$aRow = $connector->fetchArray($connector->MySQLquery("SELECT username, password FROM users WHERE username = '$sUsername' LIMIT 1")); //Selectquery

if(md5($_POST['wachtwoord']) !== $aRow['password'])
{
return false;
}

}
}

?>

Reageren