PHP Developers Network

A community of PHP developers offering assistance, advice, discussion, and friendship.
 
Loading
It is currently Thu Jul 20, 2017 9:32 am

All times are UTC - 5 hours




Post new topic Reply to topic  [ 15 posts ] 
Author Message
PostPosted: Sun Jan 05, 2014 11:48 pm 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
Hi everyone,

Please bare with me as English is not my native language. I will try the best I can to formulate a cohesive question the best I can.

I have created a the beginning of a website that I will use to manage tenants in a buildings that I manage. I am at the point where I had to make a decision to split my table and build normalized tables. I use the users table to get a user to sign up and login with personal information. the second phase of my project is to offer an area where prospect tenants can submit an application to rent a unit in my building. I have designed roughly 7 tables so far. I will need more in the future because I am thinking of scalability ahead of time and the more I normalize my tables the easier it will be for me. I know it can affect the performance of my database but since I dont ever expect to have millions of applicant and registered tenants on my website I think it will work fine.

so that's the background of my project.

my question:

bare in mind I am new at writing php codes.

I have copied my user profile setting page and modified it to build the first page of the application which is called "Employment" see below.
Syntax: [ Download ] [ Hide ]
 
<?php
include_once 'core/init.php';
$general->logged_out_protect();
?>
<!doctype html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="css/style.css" >
    <title>Employment Info</title>    
</head>
<body>
        <div id="container">
                <?php include 'includes/menu.php'; ?>
                <?php
            if (isset($_GET['success']) && empty($_GET['success'])) {
                echo '<h3>Your details have been updated!</h3>';               
            } else{

            if(empty($_POST) === false) {              
                       
                                if (isset($_POST['users_employer']) && !empty ($_POST['users_employer'])){
                                        if (ctype_alpha($_POST['users_employer']) === false) {
                                        $errors[] = 'Please enter your First Name with only letters!';
                                        }      
                                }
                                if (isset($_POST['users_emp_supervisor']) && !empty ($_POST['users_emp_supervisor'])){
                                        if (ctype_alpha($_POST['users_emp_supervisor']) === false) {
                                        $errors[] = 'Please enter your Last Name with only letters!';
                                        }      
                                }
                               
                                if (isset($_POST['users_emp_working']) && !empty($_POST['users_emp_working'])) {
                                       
                                        $workingyesno = array('undisclosed', 'yes', 'no');

                                        if (in_array($_POST['users_emp_working'], $workingyesno) === false) {
                                                $errors[] = 'Please select yes or no from the list';   
                                        }
                                }
                               
                                if (isset($_POST['users_emp_phone']) && !empty ($_POST['users_emp_phone'])){
                                        if (ctype_digit($_POST['users_emp_phone']) === false) {
                                        $errors[] = 'Please enter your employer phone number, numbers only!';
                                        }
                                }
                               
                                if (isset($_POST['users_emp_email']) && !empty ($_POST['users_emp_email'])){
                                        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",($_POST['users_emp_email'])) === false) {
                                        $errors[] = 'Please enter a valid email address!';
                                        }
                                }
                                       
                                if (isset($_POST['users_emp_start']) && !empty ($_POST['users_emp_start'])){
                                        if (ctype_digit($_POST['users_emp_start']) === false) {
                                        $errors[] = 'Please enter yyyy-mm-dd format for when you started working!';
                                        }
                                }
                               
                                if (isset($_POST['users_emp_end']) && !empty ($_POST['users_emp_end'])){
                                        if (ctype_digit($_POST['users_emp_end']) === false) {
                                        $errors[] = 'Please enter yyyy-mm-dd format for when you ended working!';
                                        }
                                }
                                       
                                if (isset($_POST['users_emp_position']) && !empty ($_POST['users_emp_position'])){
                                        if (ctype_alpha($_POST['users_emp_position']) === false) {
                                        $errors[] = 'Please enter position title while using only letters!';
                                        }
                                }
                                       
                                if (isset($_POST['users_emp_salary']) && !empty ($_POST['users_emp_salary'])){
                                        if (ctype_digit($_POST['users_emp_salary']) === false) {
                                        $errors[] = 'Please enter numbers only without "\$"!';
                                        }
                                }

                                /*if (isset($_FILES['myfile']) && !empty($_FILES['myfile']['name'])) {
                                       
                                        $name                   = $_FILES['myfile']['name'];
                                        $tmp_name               = $_FILES['myfile']['tmp_name'];
                                        $allowed_ext    = array('jpg', 'jpeg', 'png', 'gif' );
                                        $a                              = explode('.', $name);
                                        $file_ext               = strtolower(end($a)); unset($a);
                                        $file_size              = $_FILES['myfile']['size'];           
                                        $path                   = "avatars";
                                       
                                        if (in_array($file_ext, $allowed_ext) === false) {
                                                $errors[] = 'Image file type not allowed';     
                                        }
                                       
                                        if ($file_size > 2097152) {
                                                $errors[] = 'File size must be under 2mb';
                                        }
                                       
                                } else {
                                        $newpath = $user['image_location'];
                                }

                                if(empty($errors) === true) {
                                       
                                        if (isset($_FILES['myfile']) && !empty($_FILES['myfile']['name']) && $_POST['use_default'] != 'on') {
                               
                                                $newpath = $general->file_newpath($path, $name);

                                                move_uploaded_file($tmp_name, $newpath);

                                        }else if(isset($_POST['use_default']) && $_POST['use_default'] === 'on'){
                        $newpath = 'avatars/default_avatar.png';
                    }*/

                                                       
                                        $users_employer                         = htmlentities(trim($_POST['users_employer']));
                                        $users_emp_supervisor           = htmlentities(trim($_POST['users_emp_supervisor']));  
                                        $users_emp_working                      = htmlentities(trim($_POST['users_emp_working']));
                                        $users_emp_phone                        = htmlentities(trim($_POST['users_emp_phone']));
                                        $users_emp_email                        = htmlentities(trim($_POST['users_emp_email']));
                                        $users_emp_start                        = htmlentities(trim($_POST['users_emp_start']));
                                        $users_emp_end                          = htmlentities(trim($_POST['users_emp_end']));
                                        $users_emp_position                     = htmlentities(trim($_POST['users_emp_position']));
                                        $users_emp_salary                       = htmlentities(trim($_POST['users_emp_salary']));
                                        $users_id                                       = $_SESSION['id']; // I added this line myself (not sure if this is correct)
                                        //$image_location                               = htmlentities(trim($newpath));
                                       
                                        $users->Update_employment($users_employer, $users_emp_supervisor, $users_emp_working, $users_emp_phone, $users_emp_email, $users_emp_start, $users_emp_end, $users_emp_position, $users_emp_salary, $users_id, $id);//$user_id needs to be defined in my database or use alias
                                        header('Location: settings.php?success');
                                        exit();
                               
                                } else if (empty($errors) === false) {
                                        echo '<p>' . implode('</p><p>', $errors) . '</p>';     
                                }      
            }
                ?>
         
                <h2>Employment Information.</h2> <p><b>Note: Information posted are legally binding. </b></p>
            <hr />

            <form action="" method="post" enctype="multipart/form-data">
                <div id="profile_picture">
                 
                        <h3>Change Profile Picture</h3>
                    <ul>
                       
                                        <?php /*
                        if(!empty ($user['image_location'])) { //fix: pictures for tenants and selection UI display list and max number of pic
                            $image = $user['image_location'];
                            echo "<img src='$image'>";
                        }
                        ?>
                       
                        <li>
                        <input type="file" name="myfile" />
                        </li>
                        <?php if($image != 'avatars/default_avatar.png'){ ?>
                                <li>
                                    <input type="checkbox" name="use_default" id="use_default" /> <label for="use_default">Use default picture</label>
                                </li>*/

                                //<?php
                        //}
                        ?>
                    </ul>
                </div>
           
                <div id="personal_info">
                        <h3 >Change employment Information </h3>
                        <ul>
                            <li>
                                <h4>Employer:</h4>
                                <input type="text" name="users_employer" value="<?php if (isset($_POST['users_employer']) )
                                                        {echo htmlentities(strip_tags($_POST['users_employer']));} else { echo $user['users_employer']; }?>">
                            </li>    
                            <li>
                                <h4>Supervisor Name: </h4>
                                <input type="text" name="users_emp_supervisor" value="<?php if (isset($_POST['users_emp_supervisor']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_supervisor']));} else { echo $user['users_emp_supervisor']; }?>">
                            </li>
                            <li>
                                <h4>Are you Working:</h4>
                                <?php
                                        $users_emp_working      = $user['users_emp_working'];
                                        $options        = array("undisclosed", "yes", "no");
                                    echo '<select name="users_emp_working">';
                                    foreach($options as $option){
                                        if($users_emp_working == $option){
                                                $sel = 'selected="selected"';
                                        }else{
                                                $sel='';
                                        }
                                        echo '<option '. $sel .'>' . $option . '</option>';
                                    }
                                ?>
                                </select>
                            </li>
                            <li>
                                <h4>Employer Phone:</h4>
                               <input type="text" name="users_emp_phone" value="<?php if (isset($_POST['users_emp_phone']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_phone']));} else { echo $user['users_emp_phone']; }?>">
                            </li>
                         <li>
                                <h4>Employer email:</h4>
                                <input type="text" name="users_emp_email" value="<?php if (isset($_POST['users_emp_email']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_email']));} else { echo $user['users_emp_email']; }?>">
                            </li>
                        <li>
                                <h4>Employment Start Date:</h4>
                                <input type="text" name="users_emp_start" value="<?php if (isset($_POST['users_emp_start']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_start']));} else { echo $user['users_emp_start']; }?>">
                            </li>
                         <li>
                                <h4>Employment End Date:</h4>
                                <input type="text" name="users_emp_end" value="<?php if (isset($_POST['users_emp_end']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_end']));} else { echo $user['users_emp_end']; }?>">
                            </li>
                         <li>
                                <h4>Position / title:</h4>
                               <input type="text" name="users_emp_position" value="<?php if (isset($_POST['users_emp_position']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_position']));} else { echo $user['users_emp_position']; }?>">
                            </li>
                         <li>
                                <h4>Salary:</h4>
                                <input type="text" name="users_emp_salary" value="<?php if (isset($_POST['salary']) )
                                                        {echo htmlentities(strip_tags($_POST['users_emp_salary']));} else { echo $user['users_emp_salary']; }?>">
                            </li>
                        </ul>    
                </div>
                <div class="clear"></div>
                <hr />
                        <span>Update Changes:</span>
                    <input type="submit" value="Update">
               
            </form>
    </div>
</body>
</html>
<?php
//}
 


I copied the Update_user function and modified it to create an Employment_update function:
Syntax: [ Download ] [ Hide ]
<?php
class Users{
       
        private $db;

        public function __construct($database) {
            $this->db = $database;
        }      
       
        public function update_user($first_name, $last_name, $gender, $bio, $image_location, $id){

                $query = $this->db->prepare("UPDATE `users` SET
                                                                `first_name`    = ?,
                                                                `last_name`             = ?,
                                                                `gender`                = ?,
                                                                `bio`                   = ?,
                                                                `image_location`= ?
                                                               
                                                                WHERE `id`              = ?
                                                                "
);

                $query->bindValue(1, $first_name);
                $query->bindValue(2, $last_name);
                $query->bindValue(3, $gender);
                $query->bindValue(4, $bio);
                $query->bindValue(5, $image_location);
                $query->bindValue(6, $id);
               
                try{
                        $query->execute();
                }catch(PDOException $e){
                        die($e->getMessage());
                }      
        }

        public function Update_employment($users_employer, $users_emp_supervisor, $users_emp_working, $users_emp_phone, $users_emp_email,$users_emp_start,$users_emp_end, $users_emp_position, $users_emp_salary,$users_id){
               
                $users_id       = $_SESSION['id'];
                $query = $this->db->prepare("UPDATE `users_emp` SET
                                                                `users_employer`                = ?,
                                                                `users_emp_supervisor`  = ?,
                                                                `users_emp_working`             = ?,
                                                                `users_emp_phone`               = ?,
                                                                `users_emp_email`               = ?,
                                                                `users_emp_start`               = ?,
                                                                `users_emp_end`                 = ?,
                                                                `users_emp_position`    = ?,
                                                                `users_emp_salary`              = ?,
                                                                `users_id`                              = ?  
                                                               
                                                                WHERE `users_id`                = ?
                                                                "
); // the users_id above originate from users_emp table.  it is the foreign key to users table.

                $query->bindValue(1, $users_employer);
                $query->bindValue(2, $users_emp_supervisor);
                $query->bindValue(3, $users_emp_working);
                $query->bindValue(4, $users_emp_phone);
                $query->bindValue(5, $users_emp_email);
                $query->bindValue(6, $users_emp_start);
                $query->bindValue(7, $users_emp_end);
                $query->bindValue(8, $users_emp_position);
                $query->bindValue(9, $users_emp_salary);
                $query->bindValue(10, $users_id);
                $query->bindValue(11, $id);
               
                try{
                        $query->execute();
                }catch(PDOException $e){
                        die($e->getMessage());
                }      
        }
 


I tried the form but I am getting error message in every single input boxes

Quote:

<b>Notice</b>: Undefined index: users_employer in <b>C:\xampp\htdocs\lar\personalinfo.php</b> on line <b>169</b>

every single field has teh same error message but with a different line of course.

I have tried to update the form and I am able to connect with the database because I get a "success" message. the thing is I unfortunately am not saving anything to the database since I have undefined index problem with all my input field.

I am also trying to get the userid to copy itself into the foreign key users_id in my users_emp table.

can see where I might not be going at it the right way?


Top
 Profile  
 
PostPosted: Mon Jan 06, 2014 2:51 am 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
Am i correct in my understanding that you are receiving the notices when you execute the second script?


Top
 Profile  
 
PostPosted: Mon Jan 06, 2014 12:35 pm 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
social_experiment wrote:
Am i correct in my understanding that you are receiving the notices when you execute the second script?


Yes, when I open the page that runs the script. I know I make a connection with the database since I am getting a "success" message after submiting the form with dummy data in it but nothing get written.


Top
 Profile  
 
PostPosted: Mon Jan 06, 2014 3:59 pm 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
the notices come from the else statement/s, where you try to echo the value of something like $user['users_emp_supervisor'] but $user (array with those values) isn't defined anywhere. where do you retrieve the values from that is to be displayed in those text boxes?


Top
 Profile  
 
PostPosted: Mon Jan 06, 2014 8:14 pm 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
Well as I mentioned I copied this page from another called profile setting. that was built from a tutorial. This profile setting page gets it's values either by the form, or from the database if the form has already been filled-in, it update the profile of a user in a table called users.

My employment page, "this one" that I am having problem with. I copied the setting page and modified it to create another form and script to gather employment information and also created another table table called users_emp to save this information.

I will have to create many other tables if I want to keep things normalized. I have already created this application in MS Access and I know what's ahead of me. So this is the reason why I introduce another table if you wondered. I tried not to change anything around since the user setting page (the original worked great with no glitch and tried not to change anything aside from the reference. I know I missed one (or more) and reason why I am getting this notice from mysql. Does this clarify the context a bit better?


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 12:40 am 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
In the code, where do you retrieve the information from the database ?


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 1:09 am 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
good question, I'm not there yet. I figured if I can first write to the users_emp table, I would be able to pass along the user id from the session to my ['users_id']field which is the foreign key linking my users table and my new table users_emp. then once I got a user id inserted in the table I could then fetch the information from that row based on the condition users_id ==$_session[id] and then be able to insert the employment data of the current user into the users_emp table. It probably doesn't make any sense does it? I'm trying to find ways to work around it anyway I can. right now that is the only thing I can think of.


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 2:09 am 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
> why I am getting this notice from mysql
;) those notices are from php, not the mysql (thought i'd mention it as i didn't read it the first time round)

> I'm not there yet.
i think this explains the fact why you can't update the table; the values aren't present to add into the table


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 2:22 am 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
I tried inserting values from the form. and I get a "success" message after clicking submit. The only thing is I don't see any data added into my database nor does it get me closer at finding out how to create the foreign key


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 2:27 am 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
Is anything at all inserted, even if it is just a blank row?


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 2:29 am 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
no, not even a blank row


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 2:36 am 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
$users->Update_employment($users_employer, $users_emp_supervisor, $users_emp_working, $users_emp_phone, $users_emp_email, $users_emp_start, $users_emp_end, $users_emp_position, $users_emp_salary, $users_id, $id);//$user_id needs to be defined in my database or use alias
header('Location: settings.php?success');

^ you have this line, but in the code you don't create new instance of the Users class; i'm unsure why this isn't throwing another error for trying to use a class method on a non-object (i think); the function (Update_employment) isn't even executing and you are directly redirected to settings.php?success which gives you message, regardless of whether the update happend


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 2:58 am 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
here is my instance of $user in a file called init.php

Syntax: [ Download ] [ Hide ]
<?php
session_start();
require 'connect/database.php';
require 'classes/users.php';
require 'classes/general.php';
require 'classes/bcrypt.php';

// error_reporting(0);

$users  = new Users($db);
$general        = new General();
$bcrypt         = new Bcrypt(12);

$errors = array();

if ($general->logged_in() === true)  {
        $user_id        = $_SESSION['id'];
        $user           = $users->userdata($user_id);
}

ob_start(); // Added to avoid a common error of 'header already sent'
 


Do I need to put another __construct function in my user class?
or do I need to create a new instance of a user somewhere and call it something else? if true? why can't I use the same instance since I have the same user, only I am using a different page and table.

this is my full user class(in case I am missing something in there)
Syntax: [ Download ] [ Hide ]
<?php
class Users{
       
        private $db;

        public function __construct($database) {
            $this->db = $database;
        }      
       
        public function update_user($first_name, $last_name, $gender, $bio, $image_location, $id){

                $query = $this->db->prepare("UPDATE `users` SET
                                                                `first_name`    = ?,
                                                                `last_name`             = ?,
                                                                `gender`                = ?,
                                                                `bio`                   = ?,
                                                                `image_location`= ?
                                                               
                                                                WHERE `id`              = ?
                                                                "
);

                $query->bindValue(1, $first_name);
                $query->bindValue(2, $last_name);
                $query->bindValue(3, $gender);
                $query->bindValue(4, $bio);
                $query->bindValue(5, $image_location);
                $query->bindValue(6, $id);
               
                try{
                        $query->execute();
                }catch(PDOException $e){
                        die($e->getMessage());
                }      
        }

        public function update_employment($users_employer, $users_emp_supervisor, $users_emp_working, $users_emp_phone, $users_emp_email,$users_emp_start,$users_emp_end, $users_emp_position, $users_emp_salary,$users_id){
               
                $users_id       = $_SESSION['id'];
                $query = $this->db->prepare("UPDATE `users_emp` SET
                                                                `users_employer`                = ?,
                                                                `users_emp_supervisor`  = ?,
                                                                `users_emp_working`             = ?,
                                                                `users_emp_phone`               = ?,
                                                                `users_emp_email`               = ?,
                                                                `users_emp_start`               = ?,
                                                                `users_emp_end`                 = ?,
                                                                `users_emp_position`    = ?,
                                                                `users_emp_salary`              = ?,
                                                                `users_id`                              = ?  
                                                               
                                                                WHERE `user_id`                 = ?
                                                                "
); // the users_id above originate from users_emp table.  it is the foreign key to users table.

                $query->bindValue(1, $users_employer);
                $query->bindValue(2, $users_emp_supervisor);
                $query->bindValue(3, $users_emp_working);
                $query->bindValue(4, $users_emp_phone);
                $query->bindValue(5, $users_emp_email);
                $query->bindValue(6, $users_emp_start);
                $query->bindValue(7, $users_emp_end);
                $query->bindValue(8, $users_emp_position);
                $query->bindValue(9, $users_emp_salary);
                $query->bindValue(10, $users_id);
                $query->bindValue(11, $id);
               
                try{
                        $query->execute();
                }catch(PDOException $e){
                        die($e->getMessage());
                }      
        }

        public function change_password($user_id, $password) {

                global $bcrypt;

                /* Two create a Hash you do */
                $password_hash = $bcrypt->genHash($password);

                $query = $this->db->prepare("UPDATE `users` SET `password` = ? WHERE `id` = ?");

                $query->bindValue(1, $password_hash);
                $query->bindValue(2, $user_id);                        

                try{
                        $query->execute();
                        return true;
                } catch(PDOException $e){
                        die($e->getMessage());
                }

        }

        public function recover($email, $generated_string) {

                if($generated_string == 0){
                        return false;
                }else{
       
                        $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `email` = ? AND `generated_string` = ?");

                        $query->bindValue(1, $email);
                        $query->bindValue(2, $generated_string);

                        try{

                                $query->execute();
                                $rows = $query->fetchColumn();

                                if($rows == 1){
                                       
                                        global $bcrypt;

                                        $username = $this->fetch_info('username', 'email', $email); // getting username for the use in the email.
                                        $user_id  = $this->fetch_info('id', 'email', $email);// We want to keep things standard and use the user's id for most of the operations. Therefore, we use id instead of email.
                       
                                        $charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
                                        $generated_password = substr(str_shuffle($charset),0, 10);

                                        $this->change_password($user_id, $generated_password);

                                        $query = $this->db->prepare("UPDATE `users` SET `generated_string` = 0 WHERE `id` = ?");

                                        $query->bindValue(1, $user_id);
       
                                        $query->execute();

                                        mail($email, 'Your password', "Hello " . $username . ",\n\nYour your new password is: " . $generated_password . "\n\nPlease change your password once you have logged in using this password.\n\n-Example team");

                                }else{
                                        return false;
                                }

                        } catch(PDOException $e){
                                die($e->getMessage());
                        }
                }
        }

    public function fetch_info($what, $field, $value){

                $allowed = array('id', 'username', 'first_name', 'last_name', 'gender', 'bio', 'email'); // I have only added few, but you can add more. However do not add 'password' eventhough the parameters will only be given by you and not the user, in our system.
                if (!in_array($what, $allowed, true) || !in_array($field, $allowed, true)) {
                    throw new InvalidArgumentException;
                }else{
               
                        $query = $this->db->prepare("SELECT $what FROM `users` WHERE $field = ?");

                        $query->bindValue(1, $value);

                        try{

                                $query->execute();
                               
                        } catch(PDOException $e){

                                die($e->getMessage());
                        }

                        return $query->fetchColumn();
                }
        }

        public function confirm_recover($email){

                $username = $this->fetch_info('username', 'email', $email);// We want the 'id' WHERE 'email' = user's email ($email)

                $unique = uniqid('',true);
                $random = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),0, 10);
               
                $generated_string = $unique . $random; // a random and unique string

                $query = $this->db->prepare("UPDATE `users` SET `generated_string` = ? WHERE `email` = ?");

                $query->bindValue(1, $generated_string);
                $query->bindValue(2, $email);

                try{
                       
                        $query->execute();

                        mail($email, 'Recover Password', "Hello " . $username. ",\r\nPlease click the link below:\r\n\r\nhttp://www.example.com/recover.php?email=" . $email . "&generated_string=" . $generated_string . "\r\n\r\n We will generate a new password for you and send it back to your email.\r\n\r\n-- Example team");                  
                       
                } catch(PDOException $e){
                        die($e->getMessage());
                }
        }

        public function user_exists($username) {
       
                $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?");
                $query->bindValue(1, $username);
       
                try{

                        $query->execute();
                        $rows = $query->fetchColumn();

                        if($rows == 1){
                                return true;
                        }else{
                                return false;
                        }

                } catch (PDOException $e){
                        die($e->getMessage());
                }

        }
         
        public function email_exists($email) {

                $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `email`= ?");
                $query->bindValue(1, $email);
       
                try{

                        $query->execute();
                        $rows = $query->fetchColumn();

                        if($rows == 1){
                                return true;
                        }else{
                                return false;
                        }

                } catch (PDOException $e){
                        die($e->getMessage());
                }

        }

        public function register($username, $password, $email){

                global $bcrypt; // making the $bcrypt variable global so we can use here

                $time           = time();
                $ip             = $_SERVER['REMOTE_ADDR']; // getting the users IP address
                $email_code = $email_code = uniqid('code_',true); // Creating a unique string.
               
                $password   = $bcrypt->genHash($password);

                $query  = $this->db->prepare("INSERT INTO `users` (`username`, `password`, `email`, `ip`, `time`, `email_code`) VALUES (?, ?, ?, ?, ?, ?) ");

                $query->bindValue(1, $username);
                $query->bindValue(2, $password);
                $query->bindValue(3, $email);
                $query->bindValue(4, $ip);
                $query->bindValue(5, $time);
                $query->bindValue(6, $email_code);

                try{
                        $query->execute();

                        mail($email, 'Please activate your account', "Hello " . $username. ",\r\nThank you for registering with us. Please visit the link below so we can activate your account:\r\n\r\nhttp://www.example.com/activate.php?email=" . $email . "&email_code=" . $email_code . "\r\n\r\n-- Example team");
                }catch(PDOException $e){
                        die($e->getMessage());
                }      
        }

        public function activate($email, $email_code) {
               
                $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `email` = ? AND `email_code` = ? AND `confirmed` = ?");

                $query->bindValue(1, $email);
                $query->bindValue(2, $email_code);
                $query->bindValue(3, 0);

                try{

                        $query->execute();
                        $rows = $query->fetchColumn();

                        if($rows == 1){
                               
                                $query_2 = $this->db->prepare("UPDATE `users` SET `confirmed` = ? WHERE `email` = ?");

                                $query_2->bindValue(1, 1);
                                $query_2->bindValue(2, $email);                        

                                $query_2->execute();
                                return true;

                        }else{
                                return false;
                        }

                } catch(PDOException $e){
                        die($e->getMessage());
                }

        }


        public function email_confirmed($username) {

                $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ? AND `confirmed` = ?");
                $query->bindValue(1, $username);
                $query->bindValue(2, 1);
               
                try{
                       
                        $query->execute();
                        $rows = $query->fetchColumn();

                        if($rows == 1){
                                return true;
                        }else{
                                return false;
                        }

                } catch(PDOException $e){
                        die($e->getMessage());
                }

        }

        public function login($username, $password) {

                global $bcrypt;  // Again make get the bcrypt variable, which is defined in init.php, which is included in login.php where this function is called

                $query = $this->db->prepare("SELECT `password`, `id` FROM `users` WHERE `username` = ?");
                $query->bindValue(1, $username);

                try{
                       
                        $query->execute();
                        $data                           = $query->fetch();
                        $stored_password        = $data['password']; // stored hashed password
                        $id                             = $data['id']; // id of the user to be returned if the password is verified, below.
                       
                        if($bcrypt->verify($password, $stored_password) === true){ // using the verify method to compare the password with the stored hashed password.
                                return $id;     // returning the user's id.
                        }else{
                                return false;  
                        }

                }catch(PDOException $e){
                        die($e->getMessage());
                }
       
        }

        public function userdata($id) {

                $query = $this->db->prepare("SELECT * FROM `users` WHERE `id`= ?");
                $query->bindValue(1, $id);

                try{

                        $query->execute();

                        return $query->fetch();

                } catch(PDOException $e){

                        die($e->getMessage());
                }

        }
                         
        public function get_users() {

                $query = $this->db->prepare("SELECT * FROM `users` ORDER BY `time` DESC");
               
                try{
                        $query->execute();
                }catch(PDOException $e){
                        die($e->getMessage());
                }

                return $query->fetchAll();

        }      
}
 


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 3:25 am 
Offline
DevNet Master
User avatar

Joined: Sun Feb 15, 2009 12:08 pm
Posts: 2794
Location: .za
No, another __construct function is not needed; that might generate an error of sorts.
No, a new instance would also be useless because if you didn't have one to start off with you'd get an error.

try{
$query->execute();
}catch(PDOException $e){
die($e->getMessage());
}

Try changing the snippet above to only $query->execute() and run the code again


Top
 Profile  
 
PostPosted: Tue Jan 07, 2014 3:41 am 
Offline
Forum Commoner
User avatar

Joined: Fri Jan 03, 2014 6:30 am
Posts: 95
Location: Vancouver Canada
LOVELY! I got something..... yoohooooo

Syntax: [ Download ] [ Hide ]
Notice: Undefined variable: id in C:\xampp\htdocs\lar\personalinfo.php on line 124

Notice: Undefined variable: id in C:\xampp\htdocs\lar\core\classes\users.php on line 84

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_id' in 'where clause'' in C:\xampp\htdocs\lar\core\classes\users.php:87 Stack trace: #0 C:\xampp\htdocs\lar\core\classes\users.php(87): PDOStatement->execute() #1 C:\xampp\htdocs\lar\personalinfo.php(124): Users->update_employment('stroshin', 'scott', 'undisclosed', '&lt;br /&gt;&lt...', '&lt;br /&gt;&lt...', '&lt;br /&gt;&lt...', '&lt;br /&gt;&lt...', '&lt;br /&gt;&lt...', '&lt;br /&gt;&lt...', '3', NULL) #2 {main} thrown in C:\xampp\htdocs\lar\core\classes\users.php on line 87
 


I never been happier to see error message like this lol. Now I got somewhere to start. I am going to hit the sac, it's 1am here and have to get up at 5am to go to work. I'll pick at it when I come back from work tomorrow. Cheers for the great help. Amazing!


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 15 posts ] 

All times are UTC - 5 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Jump to:  
Powered by phpBB® Forum Software © phpBB Group