2011-01-20 3 views
1

pour le moment, je vais prendre des informations POST d'un formulaire et le transmettre à une page login.php qui leur passe par cette fonction:PHP/Mysql Connexion Système

function verify_Username_and_Pass($un, $pwd) { 

    $query = "SELECT * 
      FROM users 
      WHERE username = ? AND password = ? 
      LIMIT 1"; 

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

     if($stmt->fetch()) { 
      $stmt->close(); 
      return true; 
     } 
    } 

} 

À l'heure actuelle, la seule chose que ce contrôle est de savoir si un enregistrement correspondant existe, ce qui redirige l'utilisateur vers secret.php avec ceci:

function validate_user($un, $pwd) { 
    $mysql = New Mysql(); 
    $ensure_credentials = $mysql->verify_Username_and_Pass($un, $pwd); 

    if($ensure_credentials) { 
     $_SESSION['status'] = 'authorized'; 
     header("location: ../secret.php"); 
    } else { 
     header("location: ../index.php"); 
    } 

} 

Mais ce que je dois faire est, au lieu d'une page secrète, ont une page PHP pour chaque utilisateur dans la base de données (il n'y aura qu'un couple) donc j'ai besoin de la fonction pour retourner le nom du nom d'utilisateur si succe ssful et les rediriger vers [nom d'utilisateur] .php et également définir une session avec le nom d'utilisateur, donc sur les pages secrètes je peux vérifier si le bon utilisateur arrive à la bonne page? C'est logique?

+1

Je reçois tout sauf les pages «secrètes», pourquoi avez-vous besoin d'en créer une pour chaque utilisateur? Pourquoi ne pas simplement utiliser des sessions et une page «secrète»? –

+0

voir le commentaire sur Matt Lowdens répondre – benhowdle89

Répondre

1
function validate_user($un, $pwd) { 
    $mysql = New Mysql(); 
    $ensure_credentials = $mysql->verify_Username_and_Pass($un, $pwd); 

    if($ensure_credentials) { 
     $_SESSION['status'] = 'authorized'; 
     $_SESSION['username'] = $un; 
     header("location: ../secret.php"); 
    } else { 
     header("location: ../index.php"); 
    } 

} 

secret.php

<?php 
session_start(); //important; 

if($_SESSION['status'] != 'authorized') { 
    header("Location: ../index.php"); // not logged in 
} 

/* user specific stuff.. */ 
echo '<h1>' . $_SESSION['username'] . '</h1>'; 

$query = 'SELECT * FROM `user_profile` WHERE `username`="' . $_SESSION['username'] . '"'; 
//etc 

modifier si vous insistez pour avoir des pages spécifiques, quelque chose comme ceci:

intérieur ross.php

<?php 
session_start(); 
if($_SESSION['username'] != 'Ross') { die('you shouldn\'t be here..'); } 

// ok it's Ross, carry on 
?> 

probablement tous mieux fait en utilisant DB + sessions

+0

voir edit pour une idée légèrement différente ~ – Ross

+0

comme cette idée! – benhowdle89

0

Vous pouvez avoir une page appelée member.php et transmettre le nom d'utilisateur en tant que paramètre.

par exemple member.php?username=benhowdle89.

Est-ce que cela suffirait? Qu'y a-t-il sur la page "secrète"?

Si vous avez vraiment besoin d'une page séparée pour chaque alors vous pouvez faire:

if(!is_file($username.'.php')){ 
    $user_file = fopen($username.'.php', 'w'); 
    fwrite($user_file, '<p>User content</p>'); 
} 

header('Location:'.$username.'.php', true, 302); 
exit; 

Il ne semble toujours pas comme la meilleure solution au problème. Personnellement, je simplement enregistrer l'identifiant utilisateur/nom à une session comme:

session_start(); 
$_SESSION['user_id'] = 23; 

Et puis je pourrais construire le contenu de chaque page utilisateur dynamique, en fonction de cette valeur.

+0

Je vois votre point, mais je vais avoir un contenu légèrement différent sur chaque page. Et il est impératif qu'un utilisateur ne voit pas une autre page d'utilisateurs. Mais je ne peux pas dire ce qui va être sur ces pages encore, alors pourquoi j'allais avoir une page par utilisateur – benhowdle89

1

Je ne discute pas de savoir s'il s'agit ou non d'une mise en œuvre correcte et claire. J'essaie juste de « fixer » votre code:

function validate_user($un, $pwd) { 
    $mysql = New Mysql(); 
    $ensure_credentials = $mysql->verify_Username_and_Pass($un, $pwd); 

    if($ensure_credentials) { 
     $_SESSION['status'] = 'authorized'; 
     $_SESSION['username'] = $un; 
     header("location: ../{$un}.php"); 
    } else { 
     header("location: ../index.php"); 
    } 

} 

Dans <username>.php vous pouvez vérifier si $_SESSION['username'] est égal à égal au nom de fichier moins les extensions .php

Mais! Peut-être il y a une meilleure mise en œuvre ... par exemple au lieu d'avoir des fichiers N php (onece pour l'utilisateur), vous pouvez avoir un seul fichier php qui charge les données appropriées sur la base $_SESSION['username'] valeur

MISE À JOUR: A la tête de <username> .php

<?php 
session_start(); 
if ($_SESSION['status'] == 'authorized' && preg_match("/^{$_SESSION['username']}\\.php$/",__FILE__)){ 
    echo "OK";! 
}else{ 
    header("location: ../index.php"); 
} 
?> 
+0

Merci de m'avoir donné une solution qui fonctionne, j'aimerais juste avoir une page pour tous mais comme je l'ai dit je Je vais avoir un contenu différent sur chaque page. – benhowdle89

+0

Regardez ma mise à jour –

0

les redirigez à en-tête secret.php? user = $ un

0

Il est logique et faisable, bien que je ne vois pas Pourquoi voudriez-vous faire quelque chose de compliqué comme ça? Tout d'abord vous devez renvoyer les données de votre requête au lieu de vrai, je ne sais pas quelle bibliothèque utilisez-vous, bien que les éléments $ stmt-> fetch() retournent un tableau, un objet, un tableau d'objets, faites donc quelque chose comme ceci: $ data = $ stmt-> fetch(); return $ data; un mettre un print_r ($ data) pour voir ce qu'il y a dedans. Afterwords utiliser la chose avec member.php forme l'aswer ci-dessus.

2

Ou, ne passe pas le nom d'utilisateur en tant que paramètre obtenir, mais enregistrer le nom d'utilisateur dans la session:

if($ensure_credentials) { 
    $_SESSION['status'] = 'authorized'; 
    $_SESSION['username'] = $un; 
    header("location: ../secret.php"); 
} 

et secret.php:

if ($_SESSION['username'] == 'Jack') { 
    echo 'Hey Jack!'; 
} 
elseif ($_SESSION['username'] == 'Jill') { 
    echo 'Hello Jill!'; 
} 
else { 
    // die/send 404 
} 

ou nom d'utilisateur match contre la base de données pour la page personnalisée contenu.

+0

idée similaire au reste, merci pour cette – benhowdle89