Note that there are some explanatory texts on larger screens.

plurals
  1. PODisplaying error messages based on form data in php
    text
    copied!<p>I'm trying to create a pretty standard user creation form for a website I'm working on, but my PHP amateur status is preventing me from accomplishing my goal. </p> <p>Essentially what I want to do is have the user fill out a registration form, and then have a server-side script attempt to register that information. If the registration succeeds, then the user will be redirected to a page telling them to look for a verification email. If that registration fails (the email address is already in the system, not matching passwords, whatever), I would like to reload the page, but display the error message to the user above the form. Currently the form I have is being echoed out of a php file which is separate from the HTML from where the page is stored. My three questions are this.</p> <ol> <li><p>From what I've read, the way to redirect users on success is to use header("Location: <a href="http://foo.com" rel="nofollow">http://foo.com</a>"). Is that correct, or is there a more proper way to do it?</p></li> <li><p>How can I get access to the error(s) that caused the first user to fail? I've read that setting a session variable is a poor idea for a number of different reasons, but without that how can I keep track of the errors thrown by the form validation? Should I just create a global $errors variable that I clear every time I echo the registration form?</p></li> <li><p>For this case, should the page that the registration form is on have a .html extension or a .php extension, or does it not matter? More generally, is there any rule for when a page is .html vs .php/.asp/something else?</p></li> </ol> <p>Edit: added code below. Note, the form is rendered from a file called in ../views/register_form.php (I assume this is how I'd work on getting something MVC-like in PHP)</p> <p>The page that the form is rendered on (called index.html)</p> <pre><code>&lt;body&gt; &lt;script type="text/javascript"&gt; &lt;!-- put the jquery load stuff into here --&gt; $(function(){ $("#registration_form").load("views/register_form.php");}); &lt;/script&gt; &lt;div class="topbar"&gt;&lt;!-- Create the top bar layout--&gt; &lt;div class="fill"&gt; &lt;div class="container"&gt; &lt;a class="brand" href="#"&gt;Website!&lt;/a&gt; &lt;ul class="nav"&gt; &lt;li class="active"&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="#about"&gt;About&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;form action="scripts/login_user.php" method="post" class="pull-right"&gt; &lt;input class="input-medium" id="login-email" type="text" name="email_addr" placeholder="email" /&gt; &lt;input class="input-medium" id="login-password" type="password" name="password" placeholder="password" /&gt; &lt;button class="btn" type="submit"&gt;Login now!&lt;/button&gt; &lt;/form&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="container"&gt; &lt;div class="content"&gt; &lt;div class="page header"&gt; Page header! &lt;/div&gt; &lt;div id="registration_form"&gt; &lt;/div&gt; </code></pre> <p> </p> <p>The script</p> <pre><code> if(//some of the data in the form isn't set) { //Set error conditions based on missing data } $confirm_password=$_REQUEST['confirm_password']; $password=$_REQUEST['password']; if($confirm_password != $password){ //report passwords don't match} $email_addr=$_REQUEST['email_addr']; $first_name=$_REQUEST['first_name']; $last_name=$_REQUEST['last_name']; try { $successful_creation=create_user_and_send_verification_email($email_addr, $password, $first_name, $last_name); } catch(Exception $e) { /*SQL errors are caught here*/ } if($successful_creation==FALSE) { //If it couldn't be inserted for a non exception generating reason. If I get here, should I echo a page that has those errors printed, but is otherwise identical to the previous one? } else { //redirect to a "wait for a verification email" page } </code></pre>
 

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