【问题标题】:Setting $_SESSION as result from MySQL Query将 $_SESSION 设置为 MySQL 查询的结果
【发布时间】:2015-01-02 20:02:24
【问题描述】:

我正在尝试创建一个脚本,让您登录并使用与我的用户名相同的表中的一组用户代码创建会话。

每个用户代码都与每个用户名不同,因为每个用户代码将在我的 index.php 上显示不同的数据

我正在使用以下代码来验证我的用户并分配他们的用户代码:

<?php

include ("include/dbConfig.php");

$tbl_name="users"; // Table name 

// Connect to server and select databse.
mysql_connect($db_hostname, $db_username, $db_password)or die("cannot connect"); // no quotes  needed around vars
mysql_select_db($db_database)or die("cannot select DB"); // no quotes needed around vars



$username = mysql_real_escape_string($_POST['username']);
$encrypted_password = mysql_real_escape_string(md5($_POST['password']));

$sql="SELECT username, password FROM $tbl_name WHERE username='$username' and         password='$encrypted_password'";
$sql2="SELECT usercode FROM $tbl_name WHERE usercode='$usercode'";
$result=mysql_query($sql);
$result2=mysql_query($sql2);

$sql2= $usercode1['usercode'];



// If result matched $username and $password, table row must be *AT LEAST* 1 row
if(mysql_num_rows($result)){
    session_start();
    $_SESSION['isamsdata']->UserCode) != ''; //This needs fixing - array


        header("Location: index.php?logged in successfully");
    } else {
    header("Location:login.php?msg=email or password wrong");
}

?>

我的 index.php:

<?php

error_reporting(E_ALL);
session_start();
//$_SESSION['isamsdata']->UserCode = 'test';
unset($_SESSION['child_id']);
unset($_SESSION['child_first_name']);

require_once('include/newuserfunction.php');
if (isset($_SESSION['isamsdata']) AND $_SESSION['isamsdata'] != '') {

include "header.php";
include "topmenu.php";
include "leftmenu.php";
?>
    <?php
    include 'helpBox.php';
  ?>    
        <!-- BEGIN PAGE -->
        <div class="page-content">

            <!-- BEGIN PAGE CONTAINER-->
            <div class="container-fluid">
                <!-- BEGIN PAGE HEADER-->
                <div class="row-fluid">
                    <div class="span12">

                        <!-- BEGIN PAGE TITLE & BREADCRUMB-->           
                        <h3 class="page-title">
                            Parent Dashboard                
                            <small>This is your dashboard.</small>

                            <button class="btn orange" style="float: right; width: 150px;" id="addpupil" onclick="showhidepupilbox();" >Add Pupil</button>

                        </h3>
                        <ul class="breadcrumb">
                            <li>
                                <i class="icon-home"></i>
                                <a href="index.php">Home</a> 
                                <i class="icon-angle-right"></i>
                            </li>
                            <li><a href="#">Dashboard</a></li>
                            <!--<button style="float: right; background-color:green; color: white !important; margin: -1px 9px 0px 0px; border: none;" onclick="addChild();">Add Child</button>-->
                        </ul>
                                            <!-- END PAGE TITLE & BREADCRUMB-->
                    </div>
                </div>


                <?php 
                    if(isset($_GET['status']))
                    {
                        if($_GET['status'] == 1) {
                              echo '<div class="alert alert-success">
                              <button class="close" data-dismiss="alert"></button>Pupil Added Successfully. </div>';
                        } else {
                              echo '<div class="alert alert-error">
                              <button class="close" data-dismiss="alert"></button>Pupil Not Added Successfully. </div>';
                        }
                    }
                ?>
                <div class="row-fluid" id="addpupilform" style="display: none;" >
                    <div class="span12">    
                            <div class="portlet box orange-steel">
                                <div class="portlet-title">
                                    <h4><i class="icon-table"></i>Add Pupil</h4>
                                </div>
                                <div class="portlet-body">
                                        <div class="portlet-body form">



                                        <form action="insert-child.php" id="add_user" class="form-horizontal add_user" method="post" name="childform">

                                        <div class="alert alert-error hide">
                                            <button class="close" data-dismiss="alert"></button>
                                            You have some form errors. Please check below. </div>
                                        <div class="alert alert-success hide">
                                            <button class="close" data-dismiss="alert"></button>
                                            Your form validation is successful! </div>
                                        <div class="control-group">
                                            <label class="control-label">First Name<span class="required">*</span></label>
                                            <div class="controls">

                                                <input type="text" maxlength="15" name="first_name" data-required="1" class="span6 inputfields m-wrap popovers field_autosave required"  />
                                            </div>
                                        </div>
                                        <div class="control-group">
                                            <label class="control-label">Last Name<span class="required">*</span></label>
                                            <div class="controls">
                                                <input type="text" maxlength="15" name="last_name" data-required="1" class="span6 inputfields m-wrap popovers field_autosave required"   />
                                            </div>
                                        </div>

                                         <div class="control-group">
                                            <label class="control-label">Date Of Birth<span class="required">*</span></label>
                                            <div class="controls">
                                                <input type="text" maxlength="15" name="dob" data-required="1" class="span6 inputfields m-wrap popovers field_autosave required" />
                                            </div>
                                        </div>


                                        <div class="form-actions" style=" padding-left: 12px;">
                                            <button type="submit" class="btn orange" >Add</button>
                                        </div>
                                        </form>

                                        <!--- close body-form-->
                                        </div>

                                </div>
                            </div>
                    </div>
                </div>
                <div class="row-fluid">
                    <div class="span12">
                    <div class="clearfix"></div>
                    <div class="rows">


                        <div class="span12">
                            <div class="portlet box orange-steel">
                                <div class="portlet-title">
                                    <h4><i class="icon-table"></i>Pupil's Details</h4>
                                </div>

                                <div class="portlet-body">
                                <!--<div class="scroller" style="height: 300px;" data-always-visible="1" data-rail-visible="0">-->
                                    <div class="portlet-body">
                                        <?php if(getUserChilds($_SESSION['isamsdata']->UserCode) != '') { ?>
                                        <table class="table table-striped table-bordered table-hover" id="sample_2">
                                            <thead>
                                                <tr>
                                                    <th >First Name</th> 
                                                    <th>Last Name</th>
                                                    <th>Date Of Birth</th>
                                                    <th>Change Details</th>
                                                    <th>Progress</th>
                                                    <th>Action</th>
                                                </tr>
                                            </thead>
                                            <tbody>

                                                <?php
                                                echo getUserChilds($_SESSION['isamsdata']->UserCode);
                                                ?>

                                            </tbody>
                                        </table>
                                    <?php } else { ?>You have not setup any pupil account currently, please fill the form by clicking the Add Pupil icon above.<?php } ?>
                                    </div>
                                </div>

                                <!-- scroller </div>-->
                            </div>
                        </div>

                    <!-- End Rows-->
                    </div>


                    <!-- Close Div span12-->
                    </div>
                    <!-- Close Row-span12 -->
                    </div>
                <!-- Close Row-fluid -->


            <div class="row-fluid">
                    <div class="span12">
                    <div class="clearfix"></div>
                    <div class="rows">


                        <div class="span12">
                            <div class="portlet box orange-steel">
                                <div class="portlet-title">
                                    <h4><i class="icon-table"></i>Welcome Parent</h4>
                                </div>

                                <div class="portlet-body">
                                <!--<div class="scroller" style="height: 300px;" data-always-visible="1" data-rail-visible="0">-->
                                    <div class="portlet-body">
                                        Dear <i><?php echo $_SESSION['parentdetails']->title;?> <?php echo $_SESSION['parentdetails']->firstName;?> <?php echo $_SESSION['parentdetails']->surname;?>,</i><br><br>
<p>
A very warm welcome to the on-line joining forms and thank you so much for logging on. We know there's a lot to do here but we hope that completing these on-line forms will be relatively easy and stress-free. Simply enter the name of your son or daughter above by clicking on the &lsquo;add pupil&rsquo; tab at the top right hand corner of this page and then click &lsquo;Fill form&rsquo;.
</p>
<p>
The fields which contain a red asterisk symbol must be completed. All updates to the forms are automatically saved so you can return to the on-line joining forms at any time to complete your submissions.
</p><p>
We recommend that you have a copy of the new parents' Joining Booklet in front of you whilst completing these forms. Don't worry if you haven't, because you can access a PDF of the <a href="#" target="_blank">Joining Booklet 2014 here</a>.  Information and help icons are available on all the forms in case you need guidance and, if you are still stuck, please do not hesitate to call the Admissions Office on 000000000.
</p><p>
As well as the forms, we would be very grateful if you could upload a picture of your son/daughter when prompted (this does not have to be a passport photo) and also a copy of the main page of your son or daughter's passport with all their details on it.  If you do not have access to a scanner, then please feel free to send in a photocopy to Name, Registrar, at the usual School/College address. 
</p><p>
I should also remind you that we do require the following to be posted in hard-copy back to the School/College:</p><p>
<ul style="width: 80%;">
<li>The Medical Forms (required)  <a class="pull-right" href="#" target="_blank">Download Form</a></li>
<li>The Direct Debit Form (if appropriate) <a class="pull-right" href="#" target="_blank">Download Form</a></li>
<li>The Gift Aid Form (if appropriate) <a  class="pull-right" href="#" target="_blank">Download Form</a></li>
</ul></p><p>
All forms should be completed by Monday 16th June. The information provided on these forms will be processed lawfully and fairly and held for our management and administrative purposes only.
</p><p>
I do hope that you all remain as excited about September as we are, and we look forward to seeing you all soon. 
</p><p>
With best wishes,
</p><p>
Name here<br>
Director of Admissions
    </p>                        </div>
                                </div>

                                <!-- scroller </div>-->
                            </div>
                        </div>

                    <!-- End Rows-->
                    </div>


                    <!-- Close Div span12-->
                    </div>
                    <!-- Close Row-span12 -->
                    </div>
                <!-- Close Row-fluid -->
                </div>
                </div>

            <!-- END PAGE CONTAINER-->
            </div>
            <!-- END PAGE CONTAINER-->      
        </div>  <!-- END PAGE -->

<?php

    include "footer.php";
} else {

    header("Location:login.php");
}

?>

    <script>
        function showhidepupilbox()
        {
            console.log('Check');
            jQuery('#addpupilform').toggle();
        }

        jQuery(document).ready(function() {     
            jQuery('#addpupilform').hide();
            jQuery('#addpupil').click(function(){
                console.log('sdf');
                jQuery('#addpupilform').toggle();
            });
            App.setPage("table_managed");  // set current page

            App.init(); // init the rest of plugins and elements

        });
        jQuery(document).ready(function() {     

            App.setPage("form_validation");  // set current page

            App.init(); // init the rest of plugins and elements

        });
        jQuery(document).ready(function() {

        });

    </script> 

    <!-- END JAVASCRIPTS -->
</body>
<!-- END BODY -->
</html>

我对 PHP 和 SQL 还很陌生,所以任何更正都会受到尊重!

如果需要任何数据库结构,请询问。

【问题讨论】:

  • 我正在重写你的代码,请稍等
  • 用户码在哪个表中?

标签: php mysql sql session


【解决方案1】:

可以改进/需要修复的地方:

您正在使用 mysql_,它自 php 5.5 起已被贬值,不应再使用。既然你是 php 新手,现在正是学习 PDO 或 mysqli_ 的好时机!

您正在使用 md5,不应该再使用了

并且: session_start(); 必须是所有使用会话的文件中的第一行

我猜您正在使用您找到的教程 - 这是正确的方法,但我建议您再找一个。

我还没有解决 md5 问题,因为您的密码需要在数据库中更改,如果我这样做了脚本将无法工作 - 但将其更改为 mcrypt

我在代码中写了一条注释 - 变量 $usercode 未设置,我不知道它来自哪里,您可能希望在第一个查询中包含用户代码/同时执行。

这是您使用 PDO 编写的文件:

<?php
session_start();
include('include/.db_def.php');

try {
    $connection = new PDO('mysql:host=' . HOST_ONE . ';dbname=' . DB_ONE , USER_ONE, PASS_ONE);

    $state = $connection->prepare("SELECT username, password FROM users WHERE username = :names AND password = :password");

    $state->execute(array('names' => $_POST['username'], 'password' => md5($_POST['password'])));

    list ($user,$password)=$state->fetch(PDO::FETCH_NUM);
    $state->closeCursor();

    $state2 = $connection->prepare("SELECT usercode FROM users WHERE usercode= :usercode");

    $state2->execute(array('usercode' => $usercode)); //<<< $usercode isn't set, you need to fix this

    list($usercode)=$state2->fetch(PDO::FETCH_NUM);
    $state2->closeCursor();
    unset($connection);

    if (isset($usercode) AND $usercode != '')
    {
        $_SESSION['isamsdata'] = $usercode;

        header("Location: index.php?logged in successfully");
        exit();

    }
    else {
        header("Location:login.php?msg=email or password wrong");
        exit();
    }

} catch (PDOException $e) {
    die('Error!: ' . $e->getMessage() . '<br/>');
}

您的 .db_def.php 应该如下所示:

define('HOST_ONE','your host');
define('USER_ONE','db_user');
define('PASS_ONE','db_pass');
define('DB_ONE','db');

旁注:

我想用户代码在用户表中?如果是这样,请将查询更改为:

$state = $connection->prepare("SELECT username, password, usercode FROM users WHERE username = :names AND password = :password");

以及列表之后的部分:

list ($user,$password,$usercode)=$state->fetch(PDO::FETCH_NUM);

然后你就可以摆脱第二个查询了!

这里是完整的代码,只有一个查询:

<?php
session_start();
include('include/.db_def.php');

try {
    $connection = new PDO('mysql:host=' . HOST_ONE . ';dbname=' . DB_ONE , USER_ONE, PASS_ONE);

    $state = $connection->prepare("SELECT username, password, usercode FROM users WHERE username = :names AND password = :password");

    $state->execute(array('names' => $_POST['username'], 'password' => md5($_POST['password'])));

    list ($user,$password,$usercode)=$state->fetch(PDO::FETCH_NUM);
    $state->closeCursor();


    unset($state,$connection);

    if (isset($usercode) AND $usercode != '')
    {
        $_SESSION['isamsdata'] = $usercode;

        header("Location: logged_in.php?logged in successfully");
        exit();

    }
    else {
        header("Location:login.php?msg=email or password wrong");
        exit();
    }

} catch (PDOException $e) {
    die('Error!: ' . $e->getMessage() . '<br/>');
}
?>

你的下一页应该是这样开始的:

<?php
session_start();
if (isset($_SESSION['isamsdata']) AND $_SESSION['isamsdata'] != '') {
// user seems to be logged in, do whatever you want here
}
else 
{
 header("Location:login.php?msg=you_are_not_logged_in");
            exit();
}

我推荐的文件结构:

创建文件夹“views”

在视图中,放置这个 .htaccess 文件:

<Files ~ "\.(htaccess|php)$">
order allow,deny
deny from all
</Files>

在你的根文件夹中,把我上面写的文件命名为 index.php,然后为你想要运行的每个文件创建以下文件,首先,将它命名为logged_in:

 <?php
   session_start();

    if (isset($_SESSION['isamsdata']) AND $_SESSION['isamsdata'] != '') {

        include('views/logged_in.php'); //here you put the file you want to run


    }
    else
    {

        header("Location:login.php?msg=not_logged_in");
        exit();
    }

现在,您要运行的所有文件都必须位于“views”文件夹中,但您始终链接到根文件夹中的文件。您需要创建两个具有相同名称的文件(使其更容易),一个在根目录中,一个在视图中。在根目录下,文件应包含

include('views/index.php');

但是改成你要运行的文件,f.e.

include('views/dashboard.php');

现在在“views”中创建文件logged_in.php,然后放

<?= "HELLO"; ?>

进入它,只是为了看看它是否正在运行。

【讨论】:

  • 是的,谢谢,这行得通。有没有办法将它包含在任何地方? $_SESSION['isamsdata']->UserCode 因为我的大部分页面都使用这个
  • 请再等一下。我将对文件结构进行另一次编辑
  • 试试看,如果有问题,欢迎提问!
  • 我忘了写,在我写的第一个文件中,替换 header("Location: index.php?logged in successfully");出口(); with header("位置:logged_in.php");退出();
  • 抱歉回复晚了,我可以在我的一个页面上向您展示代码,以便您了解我的会话是如何开始的吗?谢谢,
【解决方案2】:
$sql2="SELECT usercode FROM $tbl_name WHERE usercode='$usercode'"

变量 $usercode 未定义

$sql2= $usercode1['usercode'];

变量 $usercode1 未定义,代码很奇怪

$_SESSION['isamsdata']->UserCode) != '';

这段代码很奇怪。如果你想比较它,那么你应该使用运算符 if

我建议您打开完整的错误报告并打开错误输出。您可以通过 php.ini 或您的代码中的 PHP 设置来完成此操作。

例如在脚本的开头

error_reporting(E_ALL);
ini_set("display_errors", 1);

【讨论】:

    【解决方案3】:

    您可以按照以下代码进行操作:

    <?php
    session_start();
    include ("include/dbConfig.php");
    
    $tbl_name="users"; // Table name
    
    // Connect to server and select databse.
    mysql_connect($db_hostname, $db_username, $db_password)or die("cannot connect"); // no quotes  needed around vars
    mysql_select_db($db_database)or die("cannot select DB"); // no quotes needed around vars
    
    
    
    $username = mysql_real_escape_string($_POST['username']);
    $encrypted_password = mysql_real_escape_string(md5($_POST['password']));
    
    $sql="SELECT usercode FROM $tbl_name WHERE username='$username' and  password='$encrypted_password'";
    $result=mysql_query($sql);
    
    // If result matched $username and $password, table row must be *AT LEAST* 1 row
    if(mysql_num_rows($result)){
        $row = mysql_fetch_assoc($result);
        $usercode= $row['usercode'];
        if($usercode!=''){
            $_SESSION['isamsdata']->UserCode= $usercode;
            header("Location: index.php?logged in successfully");
        } else {
            header("Location:login.php?msg=email or password wrong");
        }
    }
    
    ?>
    

    【讨论】:

    • PHP Warning: Creating default object from empty value
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多