krypto
krypto

Reputation: 13

Setting $_SESSION as result from MySQL Query

I'm trying to create a script that logs you in and creates a session using a set usercode in the same table as my usernames.

Each usercode is different to each username as each usercode will display different data on my index.php

I am using the following code to authenticate my users and assign their usercodes:

<?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");
}

?>

My 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>

I'm quite new to PHP and SQL so any corrections would be respected!

If any database structures are needed, please ask.

Upvotes: 0

Views: 160

Answers (3)

baao
baao

Reputation: 73221

What can be improved / needs fixing:

You are using mysql_, which is depreciated since php 5.5 and shouldn't be used any more. Since you are new to php, now is the right time to learn PDO or mysqli_!

You are using md5, which shouldn't be used any more.

And: session_start(); needs to be the first line in all files that make use of session.

I guess you are using a tutorial that you have found - which is the right way, but I recommend finding another one.

I haven't fixed the md5 issue, because your passwords need to be changed in DB and the script wouldn't work if I did - but change it to mcrypt

I wrote a comment in the code - variable $usercode isn't set, I don't know where it's comming from, you might want to include usercode in the first query/do both together.

Here is your file writen with 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/>');
}

Your .db_def.php should look like this:

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

SIDENOTE:

I suppose usercode is in the users table? If so, change the query to:

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

and the part after list to:

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

You can then get rid of the second query!

Here is the complete code with only one query:

<?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/>');
}
?>

Your next pages should start like this:

<?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();
}

File structure I would recommend:

Create a folder "views"

in views, put this .htaccess file:

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

in your root folder, put the file I wrote above and name it index.php, and create the following file for every file you want to run, for the start, name it 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();
    }

Now, all the files you want to run will have to be in the 'views' folder, but you allways link to the file in your root folder. You need to create two files with the same name(makes it easier), one in root, one in views. In root, the file should contain the line

include('views/index.php');

but changed to the file you want to run, f.e.

include('views/dashboard.php');

Now create the file logged_in.php in "views" and just put

<?= "HELLO"; ?>

into it, just to see if it's running.

Upvotes: 2

newman
newman

Reputation: 2719

$sql2="SELECT usercode FROM $tbl_name WHERE usercode='$usercode'"

Variable $usercode is undefined

$sql2= $usercode1['usercode'];

Variable $usercode1 is undefined and code is very strange

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

This code is strange. If you want compare it then you should use operator if

I recommended you turn full error reporting and turn on errors output. You can make this by PHP settings in php.ini or in your code.

For example in begin of script

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

Upvotes: 1

Bhumi Shah
Bhumi Shah

Reputation: 9476

You can do like follwing code:

<?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");
    }
}

?>

Upvotes: 0

Related Questions