Får detta felmess:
Parse error: parse error, unexpected $ in /cust/ec/ec/httpd.www/articles_php/admin/login.php on line 31
Jag har fetmarkerat rad 31 och det är ju inget fel på den raden. Jag tycker att mina villkorssatser ser korrekta ut. Är det nåt med att jag skickar header-data när jag egentligen inte får det?
login.php:
<?
if ($_POST['usr'] == "admin" && $_POST['psw'] == "test")
{
session_start();
session_register("min_session");
header("Location: index.php");
} else {
if (!empty($_POST['usr']) || !empty($_POST['psw']))
{
$login_info = "Fel inloggningsuppgifter.";
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Artiklar login</title>
<link rel="stylesheet" href="../../Ec.css" type="text/css" />
</head>
<body>
<form id="loginForm" name="loginForm" action="login.php" method="post">
<fieldset>
[b]<legend>Logga in</legend>[/b]
<p><label for="usr">Användarnamn</label>
<br /><input type="text" id="usr" name="usr" tabindex="1" /></p>
<p><label for="psw">Lösenord</label>
<br /><input type="password" id="psw" name="psw" tabindex="2" /></p>
</fieldset>
<input type="submit" id="btnSubmit" name="btnSubmit" tabindex="3" value="Logga in" />
</form>
<?
echo($login_info); ?>
</body>
</html>
tpf
CompusaMedlem sedan jan. 20023 327 inlägg Börja med att byta ut dina taggar från
<? ?>
till
<?php ?>
Inte säkert att det hjälper men en början...
Den kortare varianten <? fungerar endast om man i php.ini satt variabeln short_open_tag till On. Även om detta är standardinställningen är det relativt vanligt att man stänger av det. Den korta varianten kan dessutom ställa till med problem då man i sin kod har en XML-deklaration överst i dokumentet. XML-deklarationen börjar nämligen med <?xml och om short_open_tag då är påslaget kommer PHP avsluta skriptet med ett parse error. Alltså, använd alltid <?php.
Jag löste det genom att lägga till ob_start(); högst upp på sidan.
MeleaMedlem sedan juli 20033 147 inlägg Använd session() istället för session_register. Vet inte om det gör någon skillnad men de rekommenderar session() på php.net.
php.net skrev:
Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for improved security and code readability. With $_SESSION, there is no need to use the session_register(), session_unregister(), session_is_registered() functions. Session variables are accessible like any other variables.
Annars ser jag inget direkt fel, du kan testa att använda enkelfnuttar/dubbelfnuttar rakt igenom i din if-sats, kan vara någon inställning i php.ini som spökar.
if ($_POST['usr'] == 'admin' && $_POST['psw'] == 'test')
MeleaMedlem sedan juli 20033 147 inlägg Står det någonting innan php-koden?
Har du kollat så att det inte står ett mellanslag innan (<?)?
Det står inget innan php-koden. Tack för tipset om sessioner!
Hej, du gör fel i dina villkorsatser.
Såhär ska det se ut så kommer det nog fungera fint sen!
if (($_POST['usr'] == "admin") && ($_POST['psw'] == "test")) {
session_start();
session_register("min_session");
header("Location: index.php");
} else {
if ((!empty($_POST['usr'])) || (!empty($_POST['psw']))) {
$login_info = "Fel inloggningsuppgifter.";
}
}
MeleaMedlem sedan juli 20033 147 inlägg Forsberg: Nej, han skriver alldeles korrekt, och det gör du också, fast med onödigt många paranteser.
Melea: Är det fler villkor i en sats skall alltid villkoren omslutas i separata paranteser. Precis som i alla andra språk som använder villkorstyrning, dvs i stort sätt alla.
Och förövrigt så behöver du inte använda paranteser när du använder echo.
echo är ingen funktion och ska därför inte användas på det sättet.
Saxat direkt från manualen:
// Because echo is not a function, following code is invalid.
($some_var) ? echo('true'): echo('false');
// However, the following examples will work:
($some_var) ? print('true'): print('false'); // print is a function
echo $some_var ? 'true': 'false'; // changing the statement around
MeleaMedlem sedan juli 20033 147 inlägg Det är ju helt beroende på vilka villkor som ska matcha varandra.
if ($value1 == $value2 && $value3 == $value4 || $value5 == $value6)
Ger inte samma resultat som:
if ($value1 == $value2 && ($value3 == $value4 || $value5 == $value6))
Nej, just för att du utför det på fel sätt.
Detta ger exakt samma resultat som ditt alternativ, men är ett mycket bättre sätt att skriva det på:
if ( ($value1 == $value2) && ($value3 == $value4) || ($value5 == $value6) )
Det blir mycket lättare att avläsa vad som händer om man skriver på detta sättet.
MeleaMedlem sedan juli 20033 147 inlägg Det ger inte alls samma resultat som min andra villkorssats.
Och varför är det ett bättre sätt att skriva på?