Получить значение этого поля в эту переменную - PullRequest
0 голосов
/ 15 августа 2011
<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="dbname"; // Database name 
$tbl_name="Student"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$salt = '~Z`!@#$%I^&*()_-+Q=}]{[\|"><';
$myusername = mysql_real_escape_string($_POST['regduser']); 
$mypassword = $_POST['regdpass'];
$mypassword = hash('sha512', $mypassword.$salt);

$sql = "SELECT * FROM $tbl_name WHERE regduser = '$myusername' AND regdpass = '$mypassword')";
$studentID = $_POST['stuID'];
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count=1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("regduser");
session_register("regdpass"); 
header("location:/student.php?stuID=$studentID");
}
else {
echo "$mypassword<br />";
echo "$badpasses<br>";
echo "Wrong Username or Password";
}

ob_end_flush();
?>

В частности, в этой строке:

header("location:/student.php?stuID=$studentID");

Почему $studentID не получает значения в приведенном выше коде?Имя поля stuID выбирается в операторе SELECT над ним.Как мне получить это значение равным $studentID?

Спасибо.Извините, если немного новичок, я новичок в php.

Ответы [ 3 ]

2 голосов
/ 15 августа 2011

Вместо проверки значения $count с помощью ==, вы присваиваете значение:

// This...
if($count=1){

// Should be...
if($count == 1){

Также обратите внимание, что вызов header("Location"), чтобы соответствовать спецификации HTTP, должен бытьполный URL:

header("Location: http://www.example.com/student.php?stuID=$studentID");
// Also, you must call exit() right after to prevent further execution of your script
exit();

Наконец, вы позвонили mysql_real_escape_string() на regduser, но вы также должны позвонить на $myusername и $mypassword.

1 голос
/ 15 августа 2011

то, что вы в настоящее время делаете, это получает 'stuID' из $ _POST (из пользовательского ввода / http-запроса), так же, как вы получаете пользователя / pass

, который вы хотите получить из результата (который содержит'stuID') из SQL

после $ result = mysql_query ($ sql);

изменить это:

$sql = "SELECT * FROM $tbl_name WHERE regduser = '$myusername' AND regdpass = '$mypassword')";
$studentID = $_POST['stuID'];
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count=1){

на

$sql = "SELECT * FROM $tbl_name WHERE regduser = '$myusername' AND regdpass = '$mypassword')";
$result=mysql_query($sql);
$user = mysql_fetch_array($result);

if($user){   // login success
    $studentID = $user['stuID'];
....
0 голосов
/ 15 августа 2011

Вы никогда не используете результат запроса к базе данных! В частности, линия

$studentID = $_POST['stuID'];

означает не , получая значение из базы данных, а скорее из параметров HTTP POST. Вы должны использовать mysql_fetch_assoc или что-то подобное в какой-то момент:

$qures = mysql_fetch_assoc($result);
$studentID = $qures["stuID"];

(Это только концептуально. Сначала вы должны проверить количество результатов и убедиться, что есть результат.)

...