2011-05-21 4 views
0

Hey les gars, je ne sais pas pourquoi cela ne marchera pas ... Il ne semble pas vouloir prendre les valeurs POST .... Je ne peux pas le comprendrephp smarty vraiment besoin d'aide

Cette est Loginbox

<div class="loginbox"> 
<form action="processlogin.php" method="post"> 

    <table width="100%" border="0" cellspacing="0" cellpadding="5"> 
     <tr> 
      <td>Username</td> 
      <td><input type="text" name="UserName" /></td> 
     </tr> 
     <tr> 
      <td>Password</td> 
      <td><input type="text" name="Password" /></td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td><input type="submit" value="Login" /></td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td><span style="font-size:12px;"><a href="adduser.php">Click here to register</a></span></td> 
     </tr> 
    </table> 
</form> 

Ceci est juste une boîte que j'intégrer dans mon modèle d'index.

<div class="header"> 
    {if loggedin == false} 
     <h1>welcome</h1> 
    {else} 
     {include file="loginbox.tpl"} 
    {/if} 
    </div> 

Loginbox quand submited va processlogin.php qui est ce

<?php 
include '/usr/local/Smarty/libs/Smarty.class.php'; 
require "includes/defs.php"; 
$smarty = new Smarty; 

if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
    // Get any error message 
    $error = @$_GET['error']; 
    } else 
    { 

     $UserName = @$_POST['UserName']; 
     $Password = @$_POST['Password']; 
     echo $UserName; 
    } 
processlogin($UserName, $Password); 

?> 

Cette appelle la fonction processlogin ... mais avant même que je teste pour voir si je pouvais même obtenir UserName et je ne peut pas ...

function processlogin($UserName, $Password){ 
    echo $UserName; 
session_start(); 
$UserName = mysql_escape_string($UserName); 
$Password = md5($Password); 
echo $UserName; 

    $connection = mysql_open(); 
    $SQL = "SELECT * FROM tblUsers WHERE UserName = '$UserName' AND UserPass = '$Password'"; 

    $Result = @ mysql_query($SQL) 
    or showerror(); 

    if(mysql_num_rows($Result) > 0) 
    { 
     $DATA = mysql_fetch_assoc($Result); 
     $_SESSION['userID'] = $DATA['ID']; 
     $_SESSION['Loggedin'] = "true"; 
     echo 'true'; 
     //header("Location:index.php"); 
    } 
    else 
    { 
     $_SESSION['Loggedin'] = "false"; 
     echo 'trdddde'; 
     //header("Location:index.php"); 
    } 

} 

Ceci est la fonction ... vous verrez que j'ai juste des tests aléatoires qui n'ont aucun sens. J'essaie juste de montrer les choses en cours de route pour que je puisse comprendre ce qui ne va pas

Désolé pour mes mauvaises compétences de codage. Je n'ai appris que depuis deux mois.

Répondre

0

Par le regard de ce que vous avez posté, vous vous arrêtez votre session de démarrer correctement en écho les informations de débogage:

if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
    // Get any error message 
    $error = @$_GET['error']; 
} else { 

    $UserName = @$_POST['UserName']; 
    $Password = @$_POST['Password']; 
    echo $UserName; 
} 
processlogin($UserName, $Password); 

L'appel à session_start est dans la fonction processlogin, qui vient après vous avez déjà sorti du contenu dans le navigateur. Voici ce que le maunal PHP dit:

Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant outputing quoi que ce soit au navigateur.

Essayez de supprimer la ligne echo $UserName;

HTH.

p.s. Voyant que vous êtes un débutant, notez que votre fonction processlogin est sensible aux attaques par injection SQL.

+0

En fait, le bit sur les attaques par injection SQL est faux - désolé! – Robin

+0

Ça ne marche toujours pas. Je pense qu'il a des problèmes quelque part obtenir les variables du formulaire. Car avant même que le login du processus ne soit exécuté, il devrait afficher l'écho de UserName ... Je supprime le contrôle d'erreur et l'écho ne fonctionne toujours pas. Ce qui apparaît est "traddde" ce qui est ma façon de dire si loggedin == false. –

+0

Je l'ai réparé ... mais je n'ai aucune idée de comment ... ça a juste commencé à fonctionner ... Je n'ai rien changé et tout à coup ça a marché. –