Bepaalde links weergeven wanneer een gebruiker is ingelogd en weer andere links weergeven als er niemand is ingelogd. Echter, ik krijg een vreemde syntax foutmelding.
Foutmelding: Parse error: syntax error, unexpected '{' in includes/header.php on line 16
Verder heb ik andere vragen mbt header.php:
Moet ik de HTML-specialchars in het menu encoden?
Aangezien het bestand header.php in de map includes zit moet ik een niveau hoger wil komen bij andere bestanden en moet ik in dit geval php path gebruiken?
Wat is er vreemd aan? Je moet wel een if plaatsen.
Je andere vragen zijn wat onduidelijk, maar includes werken altijd vanuit het eerst aangeroepen script. Dus wanneer jij in index.php header.php opvraagt welke in includes staat, en header.php ook iets opvraagt moet dit gerekend worden vanuit de root. Kleine sidenote: HTML werkt met "" en niet met ''. Andere sidenote: waarom echo je zoveel? Je kan ook gewoon PHP sluiten en opnieuw openen.
Bedankt voor je snelle reactie!
Het klinkt sneu, maar kon het echt niet vinden!
Het nieuwe/logische probleem:
An error occurred in script 'index.php' on line 11: Cannot modify header information - headers already sent by (output started at /includes/header.php:16)
Volgens mij is deze foutcode logiscch, want in header.php heb ik in het begin HTML code en daarna begint PHP-code... en ik zou graag willen weten hoe ik dit beter kan aanpakken?
Als het kan, wil ik ook het liefste HTML buiten PHP laten en visa versa, maar volgens mij kan dat in dit geval niet, omdat een IF statement in zit...Hoe anders weet PHP code welke code wanneer moet weergegeven worden?
Wat bedoelde met mijn andere vragen:
In elke link heb ik instaan ../bestandsnaam. wordt dit geaccepteerd binnen PHP of moet ik php relative/obsolute gebruiken? Ik weet eff niet de exacte functie naam...
En in parent-link heb ik nu staan HTML-specialchar: » voglens mij moet ik dit ook encoden of wordt dit binnen PHP geaccepteerd?
Code van index.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
?>
<?php
require ('includes/config.inc.php');
include ('includes/header.php');
// If no user_id session variable exists, redirect the user:
if (!isset($_SESSION['user_id'])) {
$url = BASE_URL . 'login.php'; // Define the URL.
header("Location: $url");
exit(); // Quit the script.
}
?>
<p>This index page!</p>
</div></div>
<div id="footer">
<p>This is the Footer</p>
</div>
</div>
</body>
</html>
En verder werkt je header niet omdat je in header.php al output verstuurt, zoals de foutmelding aangeeft. De manier van werken moet daarom ook zijn:
1. Invoerverwerken, redirects etc
2. Output van data
Je mag gewoon relatieve paden gebruiken binnen HTML, PHP heeft hier niet veel mee te maken.
>> En in parent-link heb ik nu staan HTML-specialchar: » voglens mij moet ik dit ook encoden of wordt dit binnen PHP geaccepteerd??
Hier is geen touw aan vast te knopen. Wat denk je nou te moeten escapen en waarom?
Oke, voor het menu gedeelte heb ik nu PHP en HTML apart gehouden.
Helaas krijg ik nu een nieuwe foutmelding: Parse error: syntax error, unexpected '.' in includes/header.php on line 17.
Nogmaals dit vind ik vreemd, want op lijn 17 is er geen PHP-code en singel quotes heb ik vervangen door dubbel quotes.
Wat ik bedoelde met » kan ik dit zo maar plaatsen in een PHP-code of moet ik de functie htmlentities of htmlspecialchars gebruiken? Ik kan me voorstellen dat PHP door dit stukje PHP in de war raakt door ;
Opzich is het me wel duidelijk wat betreft de foutmelding van header output, maar in de code van header.php kan het niet anders dan moet ik wel beginnen met HTML voor PHP, want er wordt aanvankelijk een CSS-bestand ingeladen. Of is er een betere manier om dit aan te pakken?
Het is wel handig om die echo's dan weg te halen, of echo te gebruiken met ' ipv ". Anders gebeurt dat nu eenmaal, kijk maar eens naar de kleurtjes.
Verder: als je eerst de logica doet en daarna pas layout werk hoeft er geen probleem te zijn. Wat dit in jouw geval inhoudt is dat je eerst je session controles met evt header() calls doet, en daarna pas header.php includet.
Bedankt voor je heldere uitleg.
De header() foutmeldingen zijn nu weg, maar het resultaat is nog niet wat het moet zijn.
Bijv; wanneer een niet-ingelogde gebruiker naar de index.php gaat, dan wordt hij op basis van session doorverwijzen naar login.php. Tot zover gaat het prima, alleen de lay-out ontbreekt op loginpagina.
En, wat ik wil is dat de lay-out van alle pagina's overal hetzelfde blijft, enkel de functionaliteit wijzigt per pagina.
En, zoals je eerder aangaf; eerst de logica, dan de lay-out. Deze functie heb ik nu ook toegepast op login.php, helaas zie ik geen lay-out, dus geen inhoud van header.php pagina.
Ook wanneer ik naar header.php ga dan ziet de lay-out er vreemd uit
URL: hawarco.co/includes/header.php
De code van login.php
<?php
require ('includes/config.inc.php');
$page_title = 'Login';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
require (MYSQL);
// Validate the email address:
if (!empty($_POST['email'])) {
$e = mysqli_real_escape_string ($dbc, $_POST['email']);
} else {
$e = FALSE;
echo '<p class="error">You forgot to enter your email address!</p>';
}
// Validate the password:
if (!empty($_POST['pass'])) {
$p = mysqli_real_escape_string ($dbc, $_POST['pass']);
} else {
$p = FALSE;
echo '<p class="error">You forgot to enter your password!</p>';
}
if ($e && $p) { // If everything's OK.
// Query the database:
$q = "SELECT user_id, firstname, user_level FROM users WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
if (@mysqli_num_rows($r) == 1) { // A match was made.
// Register the values:
$_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC);
mysqli_free_result($r);
mysqli_close($dbc);
// Redirect the user:
$url = BASE_URL . 'index.php'; // Define the URL.
header("Location: $url");
exit(); // Quit the script.
} else { // No match was made.
echo '<p class="error">Either the email address and password entered do not match those on file or you have not yet activated your account.</p>';
}
} else { // If everything wasn't OK.
echo '<p class="error">Please try again.</p>';
}
mysqli_close($dbc);
} // End of SUBMIT conditional.
?>
<?php include ('includes/header.php'); ?>
<h1>Login</h1>
<form action="login.php" method="post">
<fieldset>
<p><label for="email"><b>Email Address:</b></label> <input type="text" name="email" id="email" size="20" maxlength="60" /></p>
<p><label for="pass"><b>Password:</b></label> <input type="password" name="pass" id="pass" size="20" maxlength="20" /></p>
<div align="center"><input type="submit" name="submit" value="Login" /></div>
</fieldset>
</form>
Bekijk voor de grap eens de bron op die URL, nogal logisch dat het er vreemd uit ziet, je hebt wat php open en sluit tags teveel, lijkt ze zelfs te echoën. Verder mis je natuurlijk de afsluitende HTML, maar dat had je zelf uiteraard ook al door.
Bekijk voor de grap eens de bron op die URL, nogal logisch dat het er vreemd uit ziet, je hebt wat php open en sluit tags teveel, lijkt ze zelfs te echoën. Verder mis je natuurlijk de afsluitende HTML, maar dat had je zelf uiteraard ook al door.
Hallo Ben,
Hahaha! Ik heb gekeken naar de bron van header.php en het ziet er idd raar uit en toch vind ik hem niet logisch.
Op lijn 15 begin ik met PHP en daarna breek ik PHP om vervolgens op lijn 44 weer te beginnen met PHP en daar het weer te eindigen.
Overigens, het valt me dat kleuring binnen Notepad++ PHPcode niet herkent wanneer ik het breek, maar ik krijg geen syntax foutmelding. Dit is ook bevestigd via http://phpcodechecker.com/
Dus jah, wat zou het kunnen zijn....
Op lijn 15 begin ik met PHP en daarna breek ik PHP om vervolgens op lijn 44 weer te beginnen met PHP en daar het weer te eindigen.
Nee, begint op lijn 15 met een PHP-blok welke je pas op lijn 44 eindigt.
Je begint een echo, waarin je PHP-sluit tags plaatst, welke uiteraard niet uitgevoerd worden als PHP-code, maar gewoon gezien worden als normale text.
[/quote]
Dit wil je juist bereiken, door het niet te echo'en. Want een echo betekent dat je binnen PHP-code output wilt tonen. En jij toont het buiten PHP om.
<?php
if (isset($_SESSION['user_id'])) { // hier begint je statement en sluit je het PHP-blok af.
?>
HIER JE HTML!
<?php
} else { // hier staat je else-statement en sluit je het PHP-blok weer netjes af.
?>
Hier NOG MEER HTML!
<?php
} // sluit je statement en sluit het PHP-blok netjes af.
?>
Bedankt voor je uitleg.
Zoals je voorstelde heb ik het header.php pagina code aangepast naar het volgende:
Ik krijg nu geen foutmeldingen meer, en toch ben ik niet helemaal tevreden met het resultaat.
Wellicht is mijn eis niet haalbaar, maar is het nu de bedoeling dat de header foto ook niet weergegeven mag worden als een gebruiker is niet ingelogd? Dit heb ik nergens aangegeven.
De reden waarom ik dit vraag, omdat ik enkel het menu op basis van session controleer en niet header foto.