J'ai essayé mon code sur lampe, wamp et xampp - il ne fonctionnait que sur lampe. Cependant, si j'échange le fichier php.ini de la lampe vers xampp, cela fonctionne - par conséquent, je suppose que je suis en train de coder de manière désordonnée sur LAMP que mon php.ini est irritant permissive. Actuellement, mon LAMP php.ini casse mon xampp mysqli, et il me semble que le code de ma lampe doit être sale dans tous les cas, alors je me demandais si vous pouviez voir ce qu'il fallait nettoyer ici?Mon code casse quand il est pris - ne m'attend pas T_ELSE, j'attends T_FUNCTION
class datamanagement{
protected $mysql_host = "localhost";
protected $mysql_username = "root";
protected $mysql_password = "";
protected $mysql_database = "data";
protected $security_table = "users";
function __construct($security_level = 0)
{
$this->security($security_level);
}
protected function mysql_connect_func(){
// ...standard mysql connect stuff
}
protected function security($security_level){
session_start();
if(isset($_GET['logout'])){
session_unset();
}
if($security_level > 0)
{
if(!isset($_SESSION['initiated'])){
if(!isset($_POST['username']) || empty($_POST['username']) || empty($_POST['password']))
{
if(isset($_GET['logout']))
{
$string = rtrim($_SERVER['PHP_SELF'], '?logout');
}
?>
<div class="main_container">
<div class="form_container">
<?php
if(isset($_GET['logout']))
{
echo "<p>successfully logged out</p>";
}else
{
echo "<p>Access to this section require logging in</p>";
}
?>
<form method="post" action="<?php echo $string ?>"><input
type="hidden" name="login" value="true"></input>
<div><label for="title">Username:</label> <input name="username"
type="text" value="<?php echo $_POST['username']; ?>"></input><?php if(isset($_POST['username']) && $_POST['username'] == ''){echo "username required";}?><br>
</div>
<div><label for="post">Password:</label> <input name="password"
type="password"></input><?php if(isset($_POST['username']) && $_POST['password'] == ''){echo "password required";}?><br>
</div>
<input type="submit" value="Sign in" name="submit"></input></form>
</div>
</div>
<?
exit();
} // end if - no username or password were posted
else{
$this->mysql_connect_func();
$sql = "SELECT * FROM " . $this->security_table . " WHERE username='" . $_POST['username'] . "'";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
if(mysql_num_rows($result) != 0)
{
if(sha1($_POST['password']) == $row['password'])
{
session_regenerate_id();
$_SESSION['initiated'] = "true";
$_SESSION['username'] = $row['username'];
$_SESSION['authority'] = $row['authority'];
} // end if sha1 of $_POST password == $row password
else {
?>
<div class="main_container">
<div class="form_container">
<?php
echo 'Incorrect password<br><a href="' . $_SERVER['PHP_SELF'] . '">Please try again</a>';
?>
</div>
</div>
<?php
exit();
} // if password is wrong
} // end if no rows with username returned
else{
?>
<div class="main_container">
<div class="form_container">
<?php
echo 'Incorrect username <br><a href="' . $_SERVER['PHP_SELF'] . '">Please try again</a>';
?>
</div>
</div>
<?php
exit();
} // if username not found
} // end else - no username or password were posted
} // end if - check the session !initiated
else { //*THIS IS THE LINE THAT THROWS THE ERROR IN XAMPP AND WAMP*
if($_SESSION['authority'] < $security_level)
{
die("security clearance insufficient");
}
} // end else - check the session !initiated
} // end if $security_level <= 0
} // end of function security()
}
Je suis désolé que c'est un morceau lourd de code, je ne pouvais pas penser à une façon logique de le casser sans compromettre la capacité de quelqu'un pour me aider à trouver l'erreur. Si vous avez des suggestions pour ramener la taille de la bête à un montant plus lisible, dites-le!
PHP_SELF n'est pas XSS sûr! – smilingthax
Peu importe, vous devez absolument refactoriser votre code! Cette structure "if-else" profondément imbriquée est difficile à maintenir. Essayez de séparer davantage HTML et PHP et pensez à utiliser [syntaxe alternative pour les structures de contrôle] (http://php.net/manual/fr/control-structures.alternative-syntax.php) –
Felix - lire cela avec beaucoup d'enthousiasme. Je commençais à penser que j'avais atteint la fin de ma capacité à nicher comme ça. –