2010-06-29 5 views
0

Je suis en train de coder un CMS en PHP afin de revenir en PHP (je l'utilise pour l'utiliser tout le temps). Cependant, pour une raison étrange, quand "inclure" ou "exigeant" mon fichier de classes, il arrête simplement le script php, mon formulaire de connexion (html de login.php) n'apparaît pas (que je sois connecté ou pas). De l'aide? Voici deux de mes scripts:Le script PHP ne fonctionnera pas

login.php:

<?php 
session_start(); 
include "classes.php"; 
if(isset($_GET['logout'])) { 
    setupSession(2); 
} 
if($_SESSION['status'] == "online") header("location: admin.php"); 
if($_POST && isset($_POST['username']) && isset($_POST['password'])) { 
    $un = $_POST['username']; 
    $pwd = $_POST['password']; 

    $mysql = new mySql(); 
    $mysql->validateUser($un, $pwd); 
} else $attempt = 2; 

?> 
<html> 
<head> 
    <title>Log In</title> 
</head> 
<body> 
<form method="post" action=""> 
    <label for="username">username: </label> 
    <input type="text" name="username" /> 

    <label for="password">password: </label> 
    <input type="password" name="password" /> 

    <input type="submit" value="Log In" name="submit" /> 
</form> 
</body> 
</html> 

et classes.php

<?php 

class mySql { 

    protected $dbname; 
    protected $dbuser; 
    protected $dbpass; 
    protected $db; 
    private $conn; 

    function __construct() { 
     $conn = new mysqli($dbname, $dbuser, $dbpass, $db); 
    } 

    public function validateUser($username, $password) { 
     $query = "SELECT * FROM users WHERE username = ? AND password = ? LIMIT 1"; 

     if($stmt = $this->conn->prepare($query)) { 
      $stmt->bind_param('ss', $username, $password); 
      $stmt->execute(); 

      if($stmt->fetch()) { 
       $stmt->close(); 
       setupSession(1); 
      } else $attempt = 1; 
     } 
    } 
} 

function setupSession($status) { 
    switch($status) { 
     case 1: 
      $_SESSION['status'] = "online"; 
      //other user variables 
      header("location: admin.php"); 
      break; 
     case 2: 
      unset($_SESSION['status']); 
      if(isset($_COOKIE[session_name()])) { 
       setcookie(session_name(), '', time() - 1000); 
      } 
      session_destroy(); 
      break; 
     default: 
      session_start(); 
      if($_SESSION['status'] != "online") header("location: login.php"); 
      break; 
    } 
} 

?> 
+0

Votre 'error_reporting' est-il activé? –

+3

Notez également que ** doit, doit, doit ** 'die()' après un 'header (" emplacement: ... ")' sinon le contenu protégé sera envoyé au client dans le corps du document. –

+0

Je ne suis pas sûr de error_reporting, j'utilise MAMP pour le développement. Et pour la mort(), merci. – user379229

Répondre

3

Vous avez un problème d'étendue.

$conn = mysqli(....) 

devrait être $this->conn = mysqli(....)

+0

Droit! J'ai de mauvaises habitudes de Java :) – mexique1

+0

Merci. Fixe, ne fonctionnera toujours pas. – user379229

+0

Fixe, va fonctionner. J'ai collé tout mon code, appliqué ceci, et cela a fonctionné. Il y avait d'autres erreurs, mais mon problème principal était celui-ci. – user379229

0
error_reporting (1); 
+0

Rien n'apparaît. – user379229

+0

MAMP signale les erreurs, mais aucune erreur d'affichage n'est désactivée. Je crois que la ligne 277 dans le php.ini (pour MAMP.) – user379229

2

Il n'y a pas beaucoup de raisons pour un script nécessaire pour rompre le parent : le fichier requis n'existe pas, il a une erreur ou il appelle exit() ou die().

Etes-vous sûr que le fichier classes.php se trouve dans le même dossier que votre script ou dans le chemin d'inclusion?


Est-ce le code exact que vous utilisez?

Avec un constructeur comme ceci:

function __construct() { 
    $conn = new mysqli($dbname, $dbuser, $dbpass, $db); 
} 

Comment diable vous connecter à votre base de données?

$mysql = new mySql(); 
+0

new mySql(); fait référence à ma classe mysql, quand avec la nouvelle instance, la construction fait sa magie. – user379229

+0

et classes.php se trouve dans le même dossier. – user379229

1
function __construct() { 
    $conn = new mysqli($dbname, $dbuser, $dbpass, $db); 
} 

devrait être

function __construct($dbname, $dbuser, $dbpass, $db) { 
    $this->dbname = $dbname; 
    $this->dbuser = $dbuser; 
    $this->dbpass = $dbpass; 
    $this->db  = $db; 
    $this->connect(); 
} 

function connect() 
{ 
    $this->conn = new mysqli($this->dbname, $this->dbuser, $this->dbpass, $this->db); 
} 

Quelque chose de cette nature.

+0

Cela a fonctionné pour moi quand j'ai combiné les deux méthodes. (Le vôtre aussi, mais je n'ai vu aucune raison d'avoir plus de code.) function __construct() { $ this-> conn = new mysqli ($ this-> dbhost, $ this-> dbuser, $ this -> dbpass, $ this-> nombase); } – user379229

Questions connexes