Archief - Redirect

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.

Fristii

Legacy Member
Loha

Zit met een probleemke betreffende een redirect.
Even een kleine omschrijving:

Heb men frontpage (index.php) met daarop een html form, ik roep dan een php scriptje aan om men input te validaten en indien correct naar men database te schrijven. Indien de input niet correct is dient hij weer te geven wat er niet correct is. Dit lukt allemaal.

Het probleem zit em hier: Als alle input correct is, dan zou de nieuwe gebruiker automatisch naar een volgende pagina moeten doorverwezen worden. Nu weet ik dat ge moet zien dat ge niks (inclusief html tags) moogt outputten als ge nen header redirect wilt gebruiken, maar hoe kan ik een gebruiker dan op een proper gecode manier doorverwijzen naar een volgende pagina?

index.html:

HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

	<head>

		<link rel="stylesheet" type="text/css" href="frontpage.css" />

		<title>OWL: An Online Whishlist Managing System</title>

	</head>

	<body>

		<?php include("input_validation.php"); ?>

		<div class="container">

			<div class="header">

				<div style="float:left;padding:0;margin:0; height:100%">

					<h1 style="font-family:sans-serif;color:white; padding-top:20px; padding-left:20px; margin-top:0; font-size:3em">OWL</h1>

				</div>

				<div class="login" style="float:right; padding-top:20px;">

					<form>
						<label style="font-size:0.75em" for="rememberMe">Remember Me?</label>
						<input style="margin-right:75px" type="checkbox" id="remberMe" name="Remember Me" value="Remember Me" />
						<a style="font-size:0.75em; color:orange; margin-right:100px" href="passLost.php">Forgot your password?</a>
						<br />

						<input type="text" id="userName" name ="username" />

						<input type="password" id="pass" name = "password" />

						<input type="submit" value="logIn" />

					</form>

				</div>

			</div>

			<div class="bodycont">

				<div class="contents">

					<h2>Sign Up!</h2>

					<h3>It's Free, so why not join now?</h3>

					<div class="form">

						<form name="registerInput" action='<?php $_SERVER[PHP_SELF] ?>' method="post">
							<label for="fName">First Name:</label>

							<input id="fName" name="fName" type="text" value="First Name..." maxlength="25">
							
							<br />
							<label for="lName">Last Name:</label>
							<input id="lName" name="lName" type="text" value="Last Name..." maxlength="75">
							<br />
							<label for="eMail">Email:</label>

							<input id="eMail" name="eMail" type="text" value="E-mail..." maxlength="75">
							<br />
							<label for="pWord">Password:</label>

							<input id="pWord" name="pWord" type="password" value="" maxlength="16">
							<br />
							<label for="uName">Username:</label>
							<input id="uName" name="uName" type="text" value="" maxlength="12">
							<br />
							<input type="submit" value="Sign Up" style="margin-right:110px" />
							<?php validate(); ?>

						</form> 

					</div>

				</div>

				<div class="body">

					<h1 class="contents">OWL let's you create, manage and share whishlists!</h1>

					<img src="https://www.beyondgaming.be/forums" />

				</div>

			</div>

			<div class="footer">

				<hr />

				<div style="float:left;">

					<p class="footer">Kevin Wyckmans © 2009</p>

				</div>

				<div style="float:right; padding:0; ; margin:-0.5% 5% 0 0">

					<a href="about.php" style="padding:0; padding-right:10px">About</a>

					<a href="mailto:[email protected]?subject=Test" style="padding:0">Contact me</a>

				</div>

			</div>

		 </div>

	</body>

</html>

input_validation.php
PHP:
<?php

	require("email_validation.php");

	$valid = TRUE;



	function validate(){

	global $valid;

	if(checkSet() != FALSE)

	{

		if(empty($_POST['fName'])==FALSE && sanityCheck($_POST['fName'], 'string', 25))

		{

			$fName = $_POST['fName'];

		}

		else

		{
			$valid = FALSE;

			echo '<p style="color:red">Please enter a correct first name</p>';

			/*exit();*/

		}

		if(empty($_POST['lName'])==FALSE && sanityCheck($_POST['lName'], 'string', 75))

		{

			$lName = $_POST['lName'];

		}

		else

		{
			$valid = FALSE;

			echo '<p style="color:red">Please enter a correct last name</p>';

			/*exit();*/

		}

		if(empty($_POST['eMail'])==FALSE && sanityCheck($_POST['eMail'], 'string', 75) && checkmail($_POST['eMail']))

		{

			$eMail = $_POST['eMail'];

		}

		else

		{
			$valid = FALSE;

			echo '<p style="color:red">Please enter a correct e-mail address</p>';

			/*exit();*/

		}

		if(empty($_POST['pWord'])==FALSE && sanityCheck($_POST['pWord'], 'string', 16))

		{

			$pWord = sha1( $_POST['pWord']);

		}

		else

		{
			$valid = FALSE;

			echo '<p style="color:red">Please enter a password</p>';

		}
		if(empty($_POST['uName']) == FALSE && sanityCheck($_POST['uName'], 'string', 12))
		{
			$uName = $_POST['uName'];
		}
		else{
			$valid = FALSE;
			echo '<p style="color:red">Please enter a correct username</p>';
		}
		
		if($valid == TRUE)
		{
			$dsn = 'mysql:dbname=Owl;host=127.0.0.1';
			$user = 'fristi';
			$password = '';
			
			try{
				$dbh = new PDO($dsn, $user, $password);
				
				$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
				
				$sql = "INSERT INTO gebruiker (id, vNaam, aNaam, eMail, geboorteDatum, pFoto, pass,uNaam) VALUES ('0',' $fName',' $lName', '$eMail', NULL, NULL,
'$pWord', '$uName')";
				$dbh->query($sql);

				$dbh = null;
			}
			catch(PDOException $e){
				if($dbh->errorCode() == '23000')
				 {
				 	echo '<p style="color:red"> A user with that username already exists</p>';
				 }				 
			}
			
		}
		

	}

	}
	
	function redirect(){
		global $valid;
		if(valid){
			header( 'Location: http://127.0.0.1/dashboard.php' );
		}
	}



	/**



    * This function can be used to check the sanity of variables

    *

    * @access private

    *

    * @param string $type  The type of variable can be bool, float, numeric, string, array, or object

    * @param string $string The variable name you would like to check

    * @param string $length The maximum length of the variable

    *

    * return bool

    */

	

	function sanityCheck($string, $type, $length){

		// We kennen het type toe om dit iets verderop te kunnen controleren met ingebouwde functies

		$type = 'is_'.$type;

		

		//We controleren of onze string van het welbepaalde type is

		if(!$type($string)){

				return FALSE;

		}

		elseif(empty($string)){

				return FALSE;

		}

		elseif(strlen($string) > $length){

				return FALSE;

		}

		else{

				//De gegevens zijn alvast van het goeie type en niet te lang of leeg

				return TRUE;

		}

	}

	

	function checkSet(){

		return isset($_POST['fName'], $_POST['lName'], $_POST['eMail'], $_POST['pWord']);

	}

?>

Curahee Q

Legacy Member
Je hebt een functie redirect maar je gebruikt hem nergens. Je kan best wel zoiets hebben ze:
PHP:
<?php
if($valid == false) {
          echo 'alles is valid';
}
else {
          header('Location: test.html');
}
?>

Snap niet goed wat je probleem is. Waar wil je hem gebruiken en waar zit dan het probleem dat je niet kan redirecten omdat er al code is uitgeschreven?

Fristii

Legacy Member
Ja, zie nu dak ni echt duidelijk ben geweest.

Ik weet dak zon functie heb, gebruik hem inderdaad nergens omdat ik altijd met het code uitschrijven probleem zit.

Het probleem is dat als ik de functie oproep nadat ik het boeltje naar men database heb geschreven hij al de helft van de html pagina geschreven heeft (de validate oproep staat int midden, dus al tgeen erboven is al uitgeschreven).

Zet ik de oproep bovenaan men htmlpagina moet ik op een of andere manier te weten komen of alles juist gevalideerd is en kweet ni goe hoe ik da zou moeten doen (ben nog helemaal ni lang me php bezig).

hoop da het wa duidelijker is nu.

Curahee Q

Legacy Member
Als je met zo een probleem zit dan is gewoon de opzet van je code foutief. Wat jij doet is, je kijkt of iets valid is en je echo't meteen je bericht. Doe dat niet en plak alles in een variable.

Voorbeeld:
PHP:
<?php
function validate() {
	$show_error = false;
	$error = '<span class="error_message">';

	if(!isset($_POST['name'])) {
		$error .= "Geen naam ingevuld<br />";
		$show_error = true;
	}

	if(!isset($_POST['mail'])) {
		$error .= "Geen mail adres ingevuld";
		$show_error = true;
	}

	if($show_error == false) {
		// alles is correct ingevuld
		header('Location: test.html');
	}

	$error .= '</span>';
}
?>
...
<form action="..." method="post">

</form>

<?php
if($show_error) {
	echo $error;
}
?>
...

Hopelijk heb je hier iets aan?

Yngwie

Legacy Member
Ik zie dat ge rechtstreeks vanuit u logica html code echo't wat imo niet zo proper is.

Wat je best doet is het op een "template" manier aanpakken. Je kan dit heel eenvoudig zelf implementeren door ervoor te zorgen dat alle logica eerst wordt uitgevoerd zonder 1 letter output te versturen. Elke eventuele foutmelding sla je bv op in een array.

Wanneer dan alle logica uitgevoerd is en je weet naar welke pagina de gebruiker moet gestuurd worden, dan begin je pas met output naar de gebruiker te sturen. Dan heb je dus ook geen probleem om header redirects te doen.

Er bestaan natuurlijk ook een pak template libraries die het u makkelijk maken om logica en code gescheiden te houden. Ik denk hier bv aan Smarty (al is die misschien al wel een beetje outdated en zijn er betere te vinden). Deze libraries zijn meestal zo opgebouwd zodat je al je data die je output nodig heeft in variabelen gaat plaatsen en uiteindelijk deze variabele doorgeeft aan een template file. In de template file kan je dan gebruik maken van een soort template language om je html markup en de effectieve data aan mekaar te koppelen.

edit : doordat mijn post nogal lang duurde om op te stellen zie ik dat Curahee je al een stuk op weg geholpen heeft met het scheiden van je logica en output

Fristii

Legacy Member
Heel erg bedankt alvast aan beide, ik denk wel dat ik hiervan vertrekkende ergens kan geraken.

Voelde al wel aan dat er iets ni helemaal juist was, maar wist niet goe wa. Bedankt voor de tips wat het proper coden/design betreft, daar is nog welle wa werk aan en alle tips daaromtrent zijn zeker welkom.

Zal het dan zo proberen, moest er nog iets misgaan dan post ik het nog wel.

Curahee Q

Legacy Member
Als je daar net mee bezig bent dan ben je al blij dat het 'werkt'. Als je al iets meer ervaring hebt probeer je alles zo 'mooi' en zo efficient mogelijk te coderen. Het komt wel, gewoon blijven volharden.

Fristii

Legacy Member
klopt idd als een bus, beschrijft perfect hoek me voel ^^ :)

Fristii

Legacy Member
Kheb trouwens nog een klein vraagske, het scriptje van Curahee werkt goe, maar bij mij zit da dus in 2 scriptjes.

Dan moet ik mijn variabele met errors in van mijn validation script terug kunnen doorgeven aan mijn index.php page om die dan te kunnen weergeven. Hoe doet ge dit het properst?

Of is het beter om die code gewoon mee in men index.php te zetten?

Curahee Q

Legacy Member
Goeie vraag, denk dat je dan best je afhandeling ook in je index.php zet. Misschien ook hier eens naar kijken:
10binary, a new way of coding

En vergeet die <?php echo $_SERVER['PHP_SELF']; ?>, zet daar maar gewoon index.php

Fristii

Legacy Member
okeuj, I'll check it out, thanks a lot, komt wel in orde nu :)

Yngwie

Legacy Member
Wat je ook kan doen is niet met een header redirect werken maar de gewenste pagina includen. Je hebt toch nog geen output naar de gebruiker geschreven op dat moment. Vanaf de geinclude pagina heb je dan toegang tot de messages die je eerder hebt opgeslagen in een variabele.

dus je formulier post bv naar formulierafhandeling.php. Daarin valideer je de input. Uiteindelijk wanneer de input valid is include je succes.php. if de input niet valid dan zorg je ervoor dat de foutboodschappen in een variabele staan en include je index.php

Jonathan

Legacy Member
Is dat niet zoiets dat not-done is, uw index.php includen ? ( Het is een serieuze vraag, kben zelf ook nog niet echt ervaren in PHP, het lijkt me gewoon een redelijk ongebruikelijke manier op het 1ste zicht .. )

Yngwie

Legacy Member
De naamgeving uit mijn voorbeeld is niet zo geweldig nu ik het eens herlees.

Waar ik op doel is dat je eerst je logica uitvoert en eens je weet welke pagina moet getoond worden dan include je de html van die pagina met eventueel wat opmaakgerelateerde code (bv om te checken of er foutboodschappen zijn).

de index.php die ik bij mijn voorbeeld zou includen na een mislukte validatie is niet de index.php pagina zelf maar eerder de html template die bij deze pagina hoort. (hier ging mijn naamgeving dus compleet de mist in blijkbaar)

Fristii

Legacy Member
ik denk dak em wel snap :)
nuja, met de eerdere voorbeelden en de link van curahee ist gelukt
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