header location

Status
Niet open voor verdere reacties.

dj technics

Gebruiker
Lid geworden
1 sep 2007
Berichten
367
dit is een deel van mijn script
PHP:
if( $bInfo['passwd'] == $_POST['passwd'] ){
		header ("location: http://**.***.***.***/spoor6/admin/login2.php");
	} else {
		echo '<br>de door u ingevoerde gebruikersnaam/passwoord komen niet overeen';
		echo '<form action="login.php" method="post">';
		echo '<p>gebruikersnaam:';
		echo '<input type="text" name="user_id">';
		echo '<br>passwoord:';
		echo '<input type="password" name="passwd">';
		echo '<br><input type="submit" name="verzenden" value="verzenden!"';
		echo '</form>';
	}

en dit is de output

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Naamloos document</title>
</head>
<body>
<p align="center"><h1>inloggen admin pagina</h1></p>
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/spoor6/admin/login.php:9) in <b>/var/www/spoor6/admin/login.php</b> on line <b>21</b><br />

</body>
</html>

kan iemand mij vertellen wat ik fout doe?

bedankt

dj technics
 
Je mag geen header() functie aanroepen als je al data verzonden hebt naar de browser. Header() moet je gebruiken voor je zelfs maar een lege spatie of een <html> verzend, anders werken ze niet.
 
Ob

Je mag inderdaad nog geen data verzonden hebben naar je pagina. Maar als je bovenaan je pagina ob_start(); neerzet en onderaan je pagina ob_flush(); moet het volgens mij werken.
 
Dat werkt wel, maar is niet echt de meest nette oplossing.
 
met die ob functie lukt het wel, bedankt daarvoor.
voor wat staat deze functie eigenlijk?

zijn er mischien nog manieren om dit te doen?

en mischien kan ik het dan ook ineens over mijn volgend probleem hebben:
kan ik bepaalde gegevens meegeven naar die volgende pagina?
mensen hebben zich dan ingelogd maar moeten op de volgende pagina's ook geautoriseerd worden.
hoe kan ik de informatie zoals username, passwd en werkelijke naam doorgeven?

bedankt
 
Laatst bewerkt:
ok dit werkt allemaal en dat andere probleem heb ik opgelost met sessions.
nu zit ik weer met een probleem XD

dit is mijn script om te beginnen
PHP:
<?php
ob_start();
session_name();
session_start();
?>
<html>
<head>
<title><?php echo 'admin ' . $_SESSION['naam']; ?></title>
<style type="text/css">
.title{ text-align: center; }
</style>
</head>
<body>
<p><div class="title">admin spoor 6</div></p>
<?php
if (isset ($_SESSION['user_id'])) {
$cServer = "localhost";
$cUser = "root";
$cPasswd = "------";
mysql_connect( $cServer, $cUser, $cPasswd );
mysql_select_db( 'spoor 6' );
$vQuery = "SELECT passwd FROM login_admin WHERE user_id='" . $_SESSION['user_id'] . "';";
$oInfo = mysql_query( $vQuery );
$bInfo = mysql_fetch_assoc( $oInfo );
if ($_SESSION['passwd'] == $bInfo['passwd']) {
	if (isset ($_SESSION['verwerken'])){
		if ($_SESSION['verwerken'] == true) {
			echo '<p>uw bewerking is uitgevoerd';
		} elseif ($_SESSION['verwereken'] == false) {
			echo '<p>er ging iets mis<br>neem contact op met de webmaster';
		} else {}
	if (isset ($_POST['ok'])) {
		$oQuery = "SELECT title, text FROM pagina's WHERE page_name = '" . $_POST['name'] . "';";
		$vQuery = mysql_query( $oQuery );
		$bInfo = mysql_fetch_assoc( $vQuery );
		echo '<form action="verwerken.php" method="post">"';
		echo '<input type="text" name="title" value="' . $bInfo['title'] . '">';
		echo '<br><input type="text" name="text" value="' . $bInfo['text'] . '">';
		echo '<br><input type="submit" name="aanpassen" value="aanpassen">';
		$_SESSION['name'] = $_POST['name'];
	} else {
		echo 'selecteer de pagina die u wenst te bewerken';
		$oQuery = "SELECT page_name FROM pagina's";
		$qPage_name = mysql_query( $oQuery );
		echo '<form action="bewerken.php" method="post">';
		while( $vPage_name = mysql_fetch_assoc( $qPage_name )) {
			echo '<br><input type="radio" name="' . $vPage_name . '">' . $vPage_name['naam'];
		}
		echo '<br><input type="submit" name="ok" value="verwerken"></form>';
		echo '<p>of maak een nieuwe pagina aan 
		<form action="verwerken.php" method="post">
		<input type="text" name="new_page"><br><input type="submit" name="aanmaken" value="aanmaken">';
	}
} else {
	header ("location: http://81.164.147.172/spoor6/admin/login.php");
} } else {
	header ("location: http://81.164.147.172/spoor6/admin/login.php");
}
?>
</body>
</html>
<?php ob_flush(); ?>

en ik krijg als output dit

HTML:
<br />
<b>Parse error</b>:  syntax error, unexpected $end in <b>/var/www/spoor6/admin/bewerken.php</b> on line <b>62</b><br />

wat doe ik nu weer fout???

p.s. niet letten op de vreemde opmaak op lijn 56 het werkt wel XD
 
Laatst bewerkt:
Hoe kan ik dit dan wel doen?

Je script zo herschrijven dat je eerst kijkt of er een header gestuurd moet worden, en pas als je weet dat dat niet nodig is output gaan genereren. Dat is efficienter, netter, en beter te lezen.

ob staat overigens voor "output buffering" wat simpel gezegd betekend dat alles wat naar de browser gestuurd wordt tegengehouden wordt totdat je de ob_flush() functie aanroept. Wat het voornamelijk betekent is dat je site trager wordt, want je moet eerst het hele script runnen en dan pas wordt er output gestuurd, tot die tijd zit de gebruiker naar een leeg scherm te turen ipv dat al bijv de achtergrondkleur enzo geladen worden.

Je nieuwe fout geeft aan dat je ergens een haakje geopend hebt en niet gesloten; hij loopt tegen het eind van het script aan terwijl er nog blokken open staan en dat mag niet.
 
voor wat staat deze functie eigenlijk?
ob_ staat voor Output Buffering. Ofwel, het 'tijdelijk opslaan' van de output. Zoals Frats al zei, het is geen nette oplossing; je kan veel beter een goede structuur in je code hebben.

Je kan, bijvoorbeeld, een variabele maken welke de html-data bevat die je op de pagina wilt laten zien. Dan kan je al je php-code (dus ook de headers) bovenaan neerzetten, en heb je geen ob_ functies nodig.


[edit]Sneak attack van Frats![/edit]
 
Muahaha, 2d6 damage :cool:

Al je data opslaan in een variabele is inderdaad ook een oplossing; is netter dan ob_start hoewel waarschijnlijk eerst bepalen wat je gaat doen en dan pas na gaan denken over welke dingen je naar de browser moet sturen nog beter is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan