#1
  1. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jan 2017
    Posts
    308
    Rep Power
    1

    Question Converting PDO OOP To Mysqli Procedural


    Folks,

    My 3+ pages are all in mysqli procedural. I cannot just switch to pdo and oop and throw 6 mnths of work down the drain! And so, let's try converting the following code suggestion by Death Shadow to mysqli procedural.


    PHP Code:
    if (
        
    array_key_exists('login_username_or_email'$_POST) &&
        
    array_key_exists('login_password'], $_POST)
    ) {

        
    // don't bother trimming, they can't enter it right, don't let them log in!

        
    $stmt $conn->prepare('
            SELECT ids, usernames, passwords, emails, accounts_activations_statuses
            FROM users
            WHERE ' 
    . (
                
    strpos($usernameOrEmail'@') === false) ? 'usernames' 'emails'
            
    ) . ' = ?
        '
    );
        
    $stmt->bind_param('s'$_POST['login_username_or_email']);
        
    $stmt->execute();
        
    $stmt->bind_result(
            
    $db_id$db_username$db_password$db_email,
            
    $db_account_activation_status
        
    );
        
        if (
            
    $stmt->fetch() &&
            
    password_verify($_POST['login_password'], $db_password)
        ) {
            echo 
    '
                <p>Login Successful</p>
                <dl>
                    <dt>User Id</dt>
                    <dd>'
    $db_id'</dd>
                    <dt>E-Mail</dt>
                    <dd>'
    $db_email'</dd>
                    <dt>Username</dt>
                    <dd>'
    $db_username'</dd>
                    <dt>Activation Stats</dt>
                    <dd>'
    $db_account_activation_status'</dd>
                </dl>
            '
    ;
        } else echo 
    '<p>Invalid username or password</p>';
        
        
    $stmt->close();
        
    } else echo 
    '<p>Missing username or password</p>'
    I need your help.
    Remember, the script is a login page and the user is given a choice to either type his email or username. And then finally the password.
    The html form looks like this:

    PHP Code:
    <!DOCTYPE html>
    <html>
    <head>
    <title><?php $site_name?> Member Login Page</title>
      <meta charset="utf-8">
    </head>
    <body>
    <form method="post" action="">
        <h3><?= $site_name ?> Member Login Form</h3>
        <fieldset>
            <label for="login_name">Username/Email:</label>
            <input type="text" name="login_username_or_email" id="login_name" value="<?php if(isset($_COOKIE["login_username_or_email"])) echo $_COOKIE["login_username_or_email"]; ?>"
            <br>
            <label for="login_pass">Password:</label>
            <input type="password" name="login_password" id="login_pass" value="<?php if(isset($_COOKIE["login_password"])) echo $_COOKIE["login_password"]; ?>">
        </fieldset>
        <div class="submitsAndHiddens">
            <label for="login_remember">Remember Login Details:</label>
            <input type="checkbox" name="login_remember" />
            <br>
            <button type="submit">Login</button>
            <br>
            <a href="login_password_reset.php">Forgot your Password ? Reset it here!</a>
            <br>
            <a href="register.php">Register here!</a>
        </div>
    </form>

    </body>
    </html>

    The following is regex to check if the user typed email or not.
    Newbies, if you were after a regex that checks if the input is email or not. Then, here it is:
    PHP Code:
    function valid_email($email) { 
        if(
    preg_match('/^([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])*$/',$email)) { 
            return 
    TRUE
        } else { 
            return 
    FALSE
        } 

    I need help adding the above regex in the appropriate place in the script. Appropriate integrationing.

    :thumbsup:
    Last edited by UniqueIdeaMan; October 4th, 2017 at 08:02 AM.
  2. #2
  3. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jan 2017
    Posts
    308
    Rep Power
    1
    I fixed my original post. So, check the code there now.
  4. #3
  5. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Aug 2016
    Posts
    100
    Rep Power
    50
    a) This code isn't PDO. It's mysqli and there's no point in converting OOP to procedural. If you have a mysqli connection in $conn, these statements will work the same regardless of if they are OOP or procedural.

    b) This code is poorly designed and implemented and isn't worth saving. It's not validating the inputs (and telling the visitor that the username/password is missing if the array keys don't exist is ridiculous.) It's assuming that usernames cannot have an @ in them. It's not querying to find if the submitted username/email matches either the username column or the email column. It's not testing if the account has been activated before deciding that the user has logged in. It's not doing anything useful when the user does log in, such as remember who the logged in user is, in a session variable. It's outputting validation errors before the start of the html document, which results in an invalid html document that won't use the doctype that's be coded on the page.

    c) There's no point in having a login script check if the email address is formatted correctly, just test if it's not empty and see if it matches a row in the database table.

    d) And as you have already been told on one of the forums, don't use cookies for those values and don't put the cookie values into the form fields. If you are going to keep doing things that you have been told not to do, and told why not to do them, you have your answer as to why no one is willing to spend time trying to help you.
  6. #4
  7. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jan 2017
    Posts
    308
    Rep Power
    1
    Originally Posted by DSmabismad
    a) This code isn't PDO. It's mysqli and there's no point in converting OOP to procedural. If you have a mysqli connection in $conn, these statements will work the same regardless of if they are OOP or procedural.

    b) This code is poorly designed and implemented and isn't worth saving. It's not validating the inputs (and telling the visitor that the username/password is missing if the array keys don't exist is ridiculous.) It's assuming that usernames cannot have an @ in them. It's not querying to find if the submitted username/email matches either the username column or the email column. It's not testing if the account has been activated before deciding that the user has logged in. It's not doing anything useful when the user does log in, such as remember who the logged in user is, in a session variable. It's outputting validation errors before the start of the html document, which results in an invalid html document that won't use the doctype that's be coded on the page.

    c) There's no point in having a login script check if the email address is formatted correctly, just test if it's not empty and see if it matches a row in the database table.

    d) And as you have already been told on one of the forums, don't use cookies for those values and don't put the cookie values into the form fields. If you are going to keep doing things that you have been told not to do, and told why not to do them, you have your answer as to why no one is willing to spend time trying to help you.
    Thank you very much for your reply. I did laugh at your final comment. Lol!
    I have not come across you in any forum. And yes, I have been told on 2 or so forums not to save the password in the cookie. Actually, the cookie part is not my own coding as I don't know how to code the cookie feature. Either I copied it from a youtube tutorial or someone coded it. I reckon the latter. Just curious. On which forums you found others telling me what and what not to do with cookies ? How come you remember who has been told what and where and ho often ? You have a photographic memory or did I do something that made me difficult to forget ? If so, then I'd like to know. And so, do you mind answering this first ?
    That code is not mine that you just reviewed. Mine is in mysqli procedural and it logs every user in and so I asked for help in another forum and that code was built by an experienced programmer over my work's skeleton but he coded it in oop. I thought pdo. I am going to learn pdo soon once this 7 mnths old project is complete. Can you help me in my login.php so I can then go and count my project as complete in 7 mnths ? I finished the registration.php, account_activation.php, logout.php and working on the home.php.
    They are working fine. I just need help in the login.php to why it logs in every Tom, **** & Harry. I am showing you my original code below.
    I need help fixing this: My questions are in the comments of the code. I need help in adding the cookie feature so any user can be auto logged-in when they check the "Remember Me" check box in the login page.
    From your code and their comments, I aswell as other newbies would learn from them.

    login.php
    Code:
    <?php
     
    /*
    ERROR HANDLING
    */
    declare(strict_types=1);
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
     
    include 'config.php';
     
    // check if user is already logged in
    if (is_logged() === true) 
    {
    	//Redirect user to homepage page after 5 seconds.
    	header("refresh:2;url=home.php");
    	exit; //
    }
    
    
    if (isset($_POST["login_username_or_email"]) && isset($_POST["login_password"]))
    	{
    		$username_or_email = trim($_POST["login_username_or_email"]);
    		$password = $_POST["login_password"];		
             
    		//Select Username or Email to check against Mysql DB if they are already registered or not.
    				
            if(strpos("$username_or_email", "@"))
    		{
    			$email = $username_or_email;
    						
    			$query = "SELECT ids, usernames, passwords, emails, accounts_activations_statuses FROM users WHERE emails = ?";
    			$stmt = mysqli_stmt_init($conn);
    			$stmt = mysqli_prepare($conn, $query);			
    			mysqli_stmt_bind_param($stmt, 's', $email);
    			mysqli_stmt_execute($stmt);
    		    //$result = mysqli_stmt_get_result($stmt); //Which line to use ? This line or the next ?
    			$result = mysqli_stmt_bind_result($stmt, $db_id, $db_username, $db_password, $db_email, $db_account_activation_status); // Which line to use ? This line or the one above ?
    		}
    		else
    		{
    			$username = $username_or_email;
    						
    			$query = "SELECT ids, usernames, passwords, emails, accounts_activations_statuses FROM users WHERE usernames = ?";
    			$stmt = mysqli_stmt_init($conn);
    			$stmt = mysqli_prepare($conn, $query);
    			mysqli_stmt_bind_param($stmt, 's', $username);
    			mysqli_stmt_execute($stmt);
    			//$result = mysqli_stmt_get_result($stmt); //Which line to use ? This line or the next ?
    			$result = mysqli_stmt_bind_result($stmt, $db_id, $db_username, $db_password, $db_email, $db_account_activation_status); // Which line to use ? This line or the one above ?
    		}       	
    		
    		//Which of the following 3 to use and why that one over the other 2 ?
    		$row = mysqli_stmt_fetch($stmt); //Which line to use ? This line or 2 of the next 2 ?
    		//$row = mysqli_fetch_array($query, MYSQLI_ASSOC); //Which line to use ? This line or the one above this lone or the one below this line ?
    		//$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    		
    		mysqli_stmt_close($stmt);
    		
    		printf("%s (%s)\n",$row["usernames"],$row["passwords"]);
    		
    		if ($result == false)
    		{
    			echo "No result!"; // For debugging purpose!
    			exit();
    		}
    		elseif ($row['accounts_activations_statuses'] == '0')
    		{
    			{
    				echo "You have not activated your account yet! Check your email for instructions on how to activate it. 
    				Check your spam folder if you don't find an email from us.";
    				exit();
    			}
    		}
    		else
    		{
    			if (password_verify($password, $db_password))		
    			{
    				echo "IF triggered for password_verify! password_verify ok"; // For debugging purpose!
    			
    			$_SESSION["user"] = $db_username;
    			header("location:home.php?user=$db_username");				
    		}
    		else
    		{
    			echo "Incorrect User Credentials !';<br>";
    			exit();
    		}
    	}
    
    	
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
    <title><?php $site_name?> Member Login Page</title>
      <meta charset="utf-8">
    </head>
    <body>
    <form method="post" action="">
    	<h3><?= $site_name ?> Member Login Form</h3>
    	<fieldset>
    		<label for="login_name">Username/Email:</label>
    		<input type="text" name="login_username_or_email" id="login_name" value="">
    		<br>
    		<label for="login_pass">Password:</label>
    		<input type="password" name="login_password" id="login_pass" value="">
    	</fieldset>
    	<div class="submitsAndHiddens">
    		<label for="login_remember">Remember Login Details:</label>
    		<input type="checkbox" name="login_remember" />
    		<br>
    		<button type="submit">Login</button>
    		<br>
    		<a href="login_password_reset.php">Forgot your Password ? Reset it here!</a>
    		<br>
    		<a href="register.php">Register here!</a>
    	</div>
    </form>
    
    </body>
    </html>

    registration.php (working)

    Code:
    <?php
    
    /*
    ERROR HANDLING
    */
    declare(strict_types=1);
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    include 'config.php';
    
    //Step 1: Before registering User account, check if User is already registered or not.
    
    //Check if User is already logged-in or not.
    if (is_logged() === true) {
    	die("You are already logged-in! No need to register again!");
    }
    
    if ($_SERVER['REQUEST_METHOD'] == "POST")
    {
    //Step 2: Check User Submitted Details.
    	
    	//Check if user made all the required inputs or not.
    	if (isset($_POST["username"]) && 
    	   isset($_POST["password"]) &&
    	   isset($_POST["password_confirmation"]) && 
    	   isset($_POST["email"]) && 
    	   isset($_POST["email_confirmation"]) && 
    	   isset($_POST["first_name"]) && 
    	   isset($_POST["surname"]) && 
    	   isset($_POST["gender"])) {
    		   
    //Step  3: Check User details for matches against database. If no matches then validate inputs and register User account.
    		   
    		//Create variables based on user inputs.
    		$username 	= trim($_POST["username"]);
    		$password 	= $_POST["password"];
    		$password_confirmation = $_POST["password_confirmation"];
    		$email 		= trim($_POST["email"]);
            $email_confirmation = trim($_POST["email_confirmation"]);
            $first_name	= trim($_POST["first_name"]);
            $surname 	= trim($_POST["surname"]);
    		$gender 	= $_POST["gender"];	
    	   	$account_activation_code = sha1( (string) mt_rand(5, 30)); //Type Casted the INT to STRING on the 1st parameter of sha1 as it needs to be a STRING.
    		$account_activation_link = "http://www.".$site_domain."/".$social_network_name."/activate_account.php?email=".$_POST['email']."&account_activation_code=".$account_activation_code."";
    		$account_activation_status = 0; // 1 = active; 0 = not active.
            $hashed_password = password_hash($password, PASSWORD_DEFAULT); //Encrypt the password.
            
    		//Select Username and Email to check against Mysql DB if they are already registered or not.
    		$stmt = mysqli_prepare($conn, "SELECT usernames, emails FROM users WHERE usernames = ? OR emails = ?");
    		mysqli_stmt_bind_param($stmt, 'ss', $username, $email);
    		mysqli_stmt_execute($stmt);
    		$result = mysqli_stmt_get_result($stmt);		
    		$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
            
    		// Check if inputted Username is already registered or not.
    		if ($row['usernames'] == $username) {
    			$_SESSION['error'] = "That username is already registered.";
    			exit();
    		// Check if inputted Username is between the required 8 to 30 characters long or not.
    		} elseif (strlen($username) < 8 || strlen($username) > 30) {
    			$_SESSION['error'] = "Username must be between 8 to 30 characters long!";
    			exit();
    		// Check if both inputted Emails match or not.
    		} elseif ($email != $email_confirmation) {
    			$_SESSION['error'] = "Emails don't match!";
    			exit();
    		// Check if inputed Email is valid or not.
    		} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    			$_SESSION['error'] = "Invalid email! Insert your real Email in order for us to email you your account activation details.";
    			exit();
    		// Check if inputted Email is already registered or not.
    		} elseif ($row['emails'] == $email) {
    			$_SESSION['error'] = "That email is already registered.";
    			exit();
    		// Check if both inputted Passwords match or not.
    		} elseif ($password != $password_confirmation) {
    			$_SESSION['error'] = "Passwords don't match.";
    			exit();
    		// Check if Password is between 8 to 30 characters long or not.
    		} elseif (strlen($password) < 8 || strlen($password) > 30) {
    			$_SESSION['error'] = "Password must be between 6 to 30 characters long!";
    			exit();
    		} 
    		else 
    		{
    			//Insert the user's inputs into Mysql database using php's sql injection prevention method "Prepared Statements".
    			$stmt = mysqli_prepare($conn, "INSERT INTO users(usernames, passwords, emails, first_names, surnames, genders, accounts_activations_codes, accounts_activations_statuses) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
    			mysqli_stmt_bind_param($stmt, 'sssssssi', $username, $hashed_password, $email, $first_name, $surname, $gender, $account_activation_code, $account_activation_status);
    			mysqli_stmt_execute($stmt);
    			echo "INSERTING";
    
    			//Check if user's registration data was successfully submitted or not.
    			if (!$stmt)
    			{
    				$_SESSION['error'] = "Sorry! Our system is currently experiencing a problem registering your account! You may try registering some other time.";
    				exit();
    			}
    			else 
    			{
    				//Email the account activation link for user to click it to confirm their email and activate their new account.
    				$to = $email;
    				$subject = "Your ".$site_name." account activation details!";
    				$body  = nl2br("
    				===============================\r\n
    				".$site_name." \r\n
    				===============================\r\n
    				From: ".$site_admin_email."\r\n
    				To: ".$email."\r\n
    				Subject: Yours ".$subject." \r\n
    				Message: ".$first_name." ".$surname."\r\n You need to click on this following <a href=".$account_activation_link.">link</a> to activate your account. \r\n");
    				$headers = "From: " . $site_admin_email . "\r\n";
    			
    			    if (!mail($to,$subject,$body,$headers)) 
    				{
    					$_SESSION['error'] = "Sorry! We have failed to email you your account activation details. Please contact the website administrator!";
    					exit();
    				}
    				else
    				{
    					echo "<h3 style='text-align:center'>Thank you for your registration!<br /> Check your email for details on how to activate your account which you just registered.</h3>";
    					exit();
    				}
    			}
    	    }
    	}
    }
    
    ?>
    
    <!DOCTYPE html>
    <html>
    	<head>
    		<title><?php $social_network_name ?> Signup Page</title>
    	</head>
    <body>
    <div class ="container">
    
    <?php
    // Error Messages.
    if (isset($_SESSION['error']) && !empty($_SESSION['error'])) {
    	echo '<p style="color:red;">'.$_SESSION['error'].'</p>';
    }
    ?>
    
    <?php
    //Session Messages.
    if (isset($_SESSION['message']) && !empty($_SESSION['message'])) {
    	echo '<p style="color:red;">'.$_SESSION['error'].'</p>';
    }
    ?>
    
    <?php
    //Clear Registration Session.
    function clear_registration_session()
    	{
    		//Clear the User Form inputs, Session Messages and Session Errors so they can no longer be used.
    		unset($_SESSION['message']);
    		unset($_SESSION['error']);
    		unset($_POST);
    		exit();
    	}
    ?>
    
    <form method="post" action="">
    	<center><h2>Signup Form</h2></center>
    	<div class="form-group">
    		<center><label>Username:</label>
    		<input type="text" placeholder="Enter a unique Username" name="username" required [A-Za-z0-9] value="<?php if(isset($_POST['username'])) { echo htmlentities($_POST['username']); }?>"></center>
    	</div>
    	<div class="form-group">
    		<center><label>Password:</label>
    		<input type="password" placeholder="Enter a new Password" name="password" required [A-Za-z0-9]></center>
    	</div>
    	<div class="form-group">
    		<center><label>Repeat Password:</label>
    		<input type="password" placeholder="Repeat a new Password" name="password_confirmation" required [A-Za-z0-9]></center>
    	</div>
    		<div class="form-group">
    		<center><label>Email:</label>
    		<input type="email" placeholder="Enter your Email" name="email" required [A-Za-z0-9] value="<?php if(isset($_POST['email'])) { echo htmlentities($_POST['email']); }?>"></center>
    	</div>
    	<div class="form-group">
    		<center><label>Repeat Email:</label>
    		<input type="email" placeholder="Repeat your Email" name="email_confirmation" required [A-Za-z0-9] value="<?php if(isset($_POST['email_confirmation'])) { echo htmlentities($_POST['email_confirmation']); }?>"></center>
    	</div>
    	<div class="form-group">
    		<center><label>First Name:</label>
    		<input type="text" placeholder="Enter your First Name" name="first_name" required [A-Za-z] value="<?php if(isset($_POST['first_name'])) { echo htmlentities($_POST['first_name']); }?>"></center>
    	</div>
    	<div class="form-group">
    		<center><label>Surname:</label>
    		<input type="text" placeholder="Enter your Surname" name="surname" required [A-Za-z] value="<?php if(isset($_POST['surname'])) { echo htmlentities($_POST['surname']); }?>"></center>
    	</div>
    	<div class="form-group">
    		<center><label>Gender:</label>
    		<input type="radio" name="gender" value="male" <?php if(isset($_POST['gender'])) { echo 'checked'; }?> required>Male<input type="radio" name="gender" value="female" <?php if(isset($_POST['gender'])) { echo 'checked'; }?> required>Female</center>
    	</div>
    	<center><button type="submit" class="btn btn-default" name="submit">Register!</button></center>
    	<center><font color="red" size="3"><b>Already have an account ?</b><br><a href="login.php">Login here!</a></font></center>
    </form>
    </div>
    </body>
    </html>
    account_activation.php (working)
    Code:
    <?php
    
    /*
    ERROR HANDLING
    */
    declare(strict_types=1);
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
    include 'config.php';
    
    if (!isset($_GET["email"], $_GET["account_activation_code"]) === true)
    {
        $_SESSION['error'] = "Invalid Email Address! Invalid Account Activation Link! This email is not registered! Try registering an account if you do not already have one! <a href=\"register.php\">Register here!</a>";
        exit();
    } 
    else 
    {	
    	$email = htmlspecialchars($_GET['email']);
    	$account_activation_code = htmlspecialchars($_GET['account_activation_code']);
    
    	$stmt_one = mysqli_stmt_init($conn);	
    	if (mysqli_stmt_prepare($stmt_one, "SELECT usernames, accounts_activations FROM users WHERE emails = ? AND accounts_activations_codes = ?"))
    	{
    		mysqli_stmt_bind_param($stmt_one, 'si', $email,  $account_activation_code);
    		mysqli_stmt_execute($stmt_one);
    		mysqli_stmt_bind_result($stmt_one, $username, $account_activation_state);
    		mysqli_stmt_fetch($stmt_one);
    		mysqli_stmt_close($stmt_one);
        	
    		if ($account_activation_state != 0)
    		{	
    			echo "Since your account is already activated, why are you trying to activate it again ? Do not do that again and just login from <a href=\"login.php\">this webpage</a> next time! Make a note of that webpage, ok ?";
    			exit;
    		}
    		else
    		{
    			$account_activation_state = 1;
    				
    			$stmt_two = mysqli_stmt_init($conn);
    			if(mysqli_stmt_prepare($stmt_two, "UPDATE users SET accounts_activations = ? WHERE usernames = ?"))
    			{
    				mysqli_stmt_bind_param($stmt_two, 'is', $account_activation_state, $username);
    				mysqli_stmt_execute($stmt_two);	
    				mysqli_stmt_fetch($stmt_two);
    				mysqli_stmt_close($stmt_two);
    			
    				echo "Account Activation State: $account_activation_state";?><br>
    				<?php
    				echo "Username: $username";			
    		
    				echo "<h3 style='text-align:center'>Thank you for your confirming your email and activating your account.<br /> You may now try logging into your account.</h3>";
    				$_SESSION["user"] = $username;
    			}
    			else
    			{
    				echo 'Failure: Something is wrong. Unable to activate your account! Contact Site Admin.';
    				echo 'Failure: Mysqli_stmt_prepare($stmt_two)';
    				exit;
    			}
    		}	
    	}
    	else
    	{
    		echo 'Failure: This account activation link is invalid or has expired. Try <a href="register.php">registering</a> for an account now.';
    		echo 'Failure: Mysqli_stmt_prepare($stmt_one)';
    		exit;
    	}			
    }
    
    ?>
    logout.php (working)

    Code:
    <?php
           session_start();
           session_destroy();
           echo "You have successfully logged-out!";
    ?><br>
    <?php
           echo "<a href='login.php'>Re-Login.</a>";
    ?><br>
  8. #5
  9. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jan 2017
    Posts
    308
    Rep Power
    1

    Question


    People are welcome to provide their own code samples in mysqli procedural or fix my code by adding comments and displaying it on this thread for all newbies to learn from.

IMN logo majestic logo threadwatch logo seochat tools logo