Note that there are some explanatory texts on larger screens.

plurals
  1. POPDO Prepared Insertion Statement Not Working, Returns No Error
    primarykey
    data
    text
    <p>I have a user registration script and it all works apart from the PDO prepared statement does not insert values in to the database. The script is not returning an error. The MySQL user does have the privileges for the actions I am performing.</p> <p>The Signup.php :</p> <pre><code>echo "&lt;?xml version=\"1.0\" ?&gt;"; if(isset($_POST['email'], $_POST['username'], $_POST['p'], $_POST['fname'], $_POST['lname'], $_POST['gender'])) { foreach ($_POST as $entry) { strip_tags($entry); } if(strlen($_POST['email']) &lt; 1) { echo "&lt;response&gt;Please enter an email address!&lt;/response&gt;"; exit(); } if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { echo "&lt;response&gt;Please enter a valid email address!&lt;/response&gt;"; exit(); } if(strlen($_POST['p']) &lt; 6) { echo "&lt;response&gt;Please enter a password that is longer than 6 characters!&lt;/response&gt;"; exit(); } if(strlen($_POST['username']) &lt; 5 || strlen($_POST['username']) &gt; 30) { echo "&lt;response&gt;Please enter a username that is between 5 and 30 characters in length!&lt;/response&gt;"; exit(); } if(strlen($_POST['fname']) &lt; 1 || strlen($_POST['lname']) &lt; 1) { echo "&lt;response&gt;Please enter a name!&lt;/response&gt;"; exit(); } if(strlen($_POST['gender']) &lt; 1) { echo "&lt;response&gt;Please select your gender!&lt;/response&gt;"; exit(); } //if(strlen($_POST['recaptcha_response_field']) &lt; 1) { // echo "&lt;response&gt;Please answer the Captcha!&lt;/response&gt;"; // exit(); //} if($_POST['gender'] === "Male") { $_POST['gender'] = "m"; } else { $_POST['gender'] = "f"; } //$recaptcha_response = null; //$recaptcha_error = null; //$recaptcha_response = recaptcha_check_answer($recaptcha_private_key, $_SERVER['REMOTE_ADDR'], $_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field']); //if($recaptcha_response-&gt;is_valid) { $salt = hash("sha512", uniqid(mt_rand(1, mt_getrandmax()), true)); $password = $_POST['p']; $password = hash("sha512", $password.$salt); $info = array( "email" =&gt; $_POST['email'], "password" =&gt; $password, "salt" =&gt; $salt, "username" =&gt; $_POST['username'], "fname" =&gt; $_POST['fname'], "lname" =&gt; $_POST['lname'], "gender" =&gt; $_POST['gender'] ); if(register($info, $database) === true) { echo "&lt;response&gt;Registration Successfull! Please check your inbox for an activation email!&lt;/response&gt;"; exit(); } //} else { // echo "&lt;response&gt;Incorrect Captcha! Please click the reCaptcha refresh button and try again!&lt;/response&gt;"; // exit(); //} } else { echo "&lt;response&gt;Invalid Sign-Up Request!&lt;/response&gt;"; exit(); } </code></pre> <p>The register() function :</p> <pre><code>function register($info, $database) { try { $query = $database -&gt; prepare("SELECT email FROM members WHERE email = :email LIMIT 1"); $query -&gt; execute( array( ":email" =&gt; $info['email'] ) ); $result = $query -&gt; fetch(); $result = $result[1]; if(strlen($result) &gt; 0) { echo "&lt;response&gt;Email already in use!&lt;/response&gt;"; exit(); } else { $query = $database -&gt; prepare("SELECT username FROM members WHERE username = :username LIMIT 1"); $query -&gt; execute( array( ":username" =&gt; $info['username'] ) ); $result = $query -&gt; fetch(); $result = $result[1]; if(strlen($result) &gt; 0) { echo "&lt;response&gt;Username already in use!&lt;/response&gt;"; exit(); } else { $query = $database -&gt; prepare("SELECT password FROM members WHERE password = :password LIMIT 1"); $query -&gt; execute( array( ":password" =&gt; $info['password'] ) ); $result = $query -&gt; fetch(); $result = $result[1]; if(strlen($result) &gt; 0) { echo "&lt;response&gt;Password already in use!&lt;/response&gt;"; exit(); } else { $time = time(); /* * This is where it isn't working */ $query = $database -&gt; prepare("INSERT INTO members (email, password, salt, username, first_name, last_name, signup, last_login, gender) VALUES (:email, :password, :salt, :username, :fname, :lname, :signup, :last_login, :gender)"); $query -&gt; execute( array( ":email" =&gt; $info['email'], ":password" =&gt; $info['password'], ":salt" =&gt; $info['salt'], ":username" =&gt; $info['username'], ":fname" =&gt; $info['fname'], ":lname" =&gt; $info['lname'], ":signup" =&gt; $time, ":last_login" =&gt; $time, ":gender" =&gt; $info['gender'] ) ) or die(print_r($query-&gt;errorInfo(), true)); $rc = hash("sha512", uniqid(mt_rand(1, mt_getrandmax()), true)); $query = $database -&gt; prepare("SELECT id FROM members WHERE email = :email LIMIT 1"); $query -&gt; execute( array( ":email" =&gt; $info['email'] ) ); $user_id = $query -&gt; fetch(); $query = $database -&gt; prepare("INSERT INTO regcodes (user_id, reg_code) VALUES (:id, :rc)"); $query -&gt; execute( array( ":id" =&gt; $user_id['id'], ":rc" =&gt; $rc ) ); mail($info['email'], "Activate your account for Code-Cluster!", "Please click the following link to activate your account for Code-Cluster!\r\n http://www.ablp.x10.mx/code-cluster/activate.php?rc=".$rc); return true; exit(); } } } } catch(PDOException $e) { echo "&lt;response&gt;An error occured whilst creating your account! An email has been sent to tech support!&lt;/response&gt;"; mail("admin@codecluster.x10.mx", "Code-Cluster Sign-Up Error", "Sign-Up Error; Timestamp @ " . date() . " ; IP Address : " . $_SERVER['REMOTE_ADDR'] . " ;\r\n" . $e); exit(); } } </code></pre> <p>This is the database structure: <img src="https://i.stack.imgur.com/jY5qL.png" alt="Database Structure"></p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload