2013-06-11 3 views
1

Я пытаюсь создать систему входа PHP. Я нахожусь в точке, где я зарегистрировал данные пользователя в переменных сеанса, а также в базе данных пользователей, используя mysqli. Когда пользователь создает учетную запись, они перенаправляются на страницу профиля. На этой странице я пытаюсь отобразить электронную почту пользователя и имя пользователя пользователя. У меня нет проблем с отображением имени пользователя, поскольку я сохранил его в переменной сеанса. Однако я не могу понять, как получить сообщение по электронной почте. Я не хранил сообщение в переменной сеанса. Я пытаюсь извлечь его из базы данных пользователя (а не из базы данных сеансов). Вот код:fields and and bind_param/ajax post request

showuser.php (страница профиля):

<?php 
    session_start(); 

    $host="localhost"; // Host name 
    $uname="root"; // Mysql username 
    $password=""; // Mysql password 
    $db_name=""; // Database name 
    $tbl_name="users"; // Table name 

    // Connect to server and select database. 
    $mysqli = mysqli_connect($host, $uname, $password, $db_name); 
    $stmt = $mysqli->prepare("SELECT email FROM users WHERE email = ?"); 
    $stmt->bind_param("s", $email); 
    $stmt->execute(); 
    $stmt->bind_result($em); 
    $stmt->fetch(); 
?> 

<h2>Username - Email</h2> 
<div id="userinfo"><? echo $_SESSION["username"] ?> - <? echo $em ?></div> 

<? 
    $stmt->close(); 
    mysqli_close($mysqli); 
?> 

storeuser.php

<?php 
session_start(); 

$host="localhost"; // Host name 
$uname="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="itit"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select database. 
$mysqli = mysqli_connect($host, $uname, $password, $db_name); 

// Get values from form 
$username=$_POST['username']; 
$pw=$_POST['pw']; 
$email=$_POST['email']; 

$_SESSION["timeout"] = time(); 
$_SESSION["username"] = $_POST['username']; 
$_SESSION["password"] = $_POST['pw']; 
$_SESSION["loggedIn"] = true; 

// Insert data into mysql 
$sql = "INSERT INTO $tbl_name(username, password, email)VALUES(?,?,?)"; 
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param("sss", $username, $password, $email); 
$stmt->execute(); 
?> 

<?php 
// close connection 
mysqli_close($mysqli); 
?> 

application.js

$("#signupform").submit(function(e) { 
    e.preventDefault(); 
    $.post('storeuser.php', $(this).serialize(), function(data){ 
     $("#showuser").load("templates/showuser.php"); 
     $("#userinfo").text(data); 
     $("#signupform").remove(); 
    }); 
}); 

Было отмечено, мне в предыдущем вопросе, который я имел (относительно PDO), - что для того, чтобы письмо отображалось на странице профиля, мне нужно передать «dat переменной "в мой вызов ajax $ .post(). Где устанавливаются данные? И что находится в «данных»?

Одна странная вещь, что если я заменить эту строку:

$stmt->bind_param("s", $email); 

к этому:

$stmt->bind_param("s", $_SESSION["email"]); 

получает отображается электронная почта ... но я никогда не хранить электронную почту в сессии в любом месте! Нет даже поля электронной почты! Почему последний работал, а не первый?

+0

Как правило, это не рекомендуется размещать пароли на публичных форумах. – vascowhite

ответ

0

Вы ищете по электронной почте (с использованием неопределенной переменной $email) вместо того, чтобы пользователь, вы, вероятно, хотите, чтобы это:

$stmt = $mysqli->prepare("SELECT email FROM users WHERE username = ?"); 
$stmt->bind_param("s", $_SESSION["username"]); 

вместо этого:

$stmt = $mysqli->prepare("SELECT email FROM users WHERE email = ?"); 
$stmt->bind_param("s", $email); 
+1

получил! благодаря! – ewizard