2010-11-25 49 views
0

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!

+0

PHP_SELF n'est pas XSS sûr! – smilingthax

+0

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) –

+0

Felix - lire cela avec beaucoup d'enthousiasme. Je commençais à penser que j'avais atteint la fin de ma capacité à nicher comme ça. –

Répondre

1

Je ne suis pas sûr que cela vous aidera - mais en ligne 67 vous manque un terminal ; après la variable $string.

et sur une légère note - </input> étiquettes ne font pas partie du balisage HTML strict ...

utilisation <input type="submit" value="Sign in" name="submit" /> au lieu