In my register form, if a validation message needs to appear when the user clicks submit, the whole text out of all the boxes disappears, meaning they have to start again!
What PHP code do I need to add so the data remains?
Username<span class="required">*</span>
<input name="user_name" type="text" id="user_name" minlength="5" >
Full Name<span class="required">*</span>
<input name="full_name" type="text" id="full_name" size="30"
Nationality <span class="required">*</span>
<select name="nationality" id="select8">
<option value="" selected></option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
</select>
<p align="center">
<input name="doRegister" type="submit" id="doRegister" value="Register">
</p>
EDIT:
I have tried this:
<?php
$email_field = ($_POST['usr_email']);
?>
Email<span class="required">*</span>
<input type="text" id="usr_email3" name="usr_email" value="<?php echo
$email_field; ?>" />
but it says usr_email is not defined
As described in the HTTP specs, HTTP is stateless. That means that eventhough the user got to the page through a previous page the server has no idea of this. Each request is completely new, so it cant just send the previous output back.
You'll have to read the values send to your form out of $_POST, and resend that. For example:
<?php
//If the POST parameter has been send, set it to the $username variable. Otherwise make it empty.
$username = array_key_exists('username', $_POST) ? $_POST['username'] : '';
?>
<form name='f1' method='POST'>
<!-- Show username as its value, thus preserving state. -->
Name: <input type='text' value='<?php echo $username ?>' name='username' />
<input type='submit' value='Go' />
</form>
For select inputs (usually dropdown) you need to set the selected attribute on the correct option. As such:
<?php
$gender = array_key_exists('gender', $_POST) ? $_POST['gender'] : 'unknown'; //Default to unknown
?>
<form name='f1' method='POST'>
<select name='gender'>
<!-- The $gender will be the value of each option. -->
<option <? if($gender == 'unknown') { ?> selected <? } ?> value='unknown'>Unknown</option>
<option <? if($gender == 'male') { ?> selected <? } ?> value='male'>Male</option>
<option <? if($gender == 'female') { ?> selected <? } ?> value='female'>Female</option>
</select>
<input type='submit' value='Go' />
</form>
However i still recommend you buy a proper book, or read more tutorials. After you feel more comfortable as a developer you can explore and find these solutions youself, as we all here did once.
<input name="user_name" type="text" id="user_name" minlength="5" value="<?php if(isset($_POST['user_name'])) { echo $_POST['user_name']; } ?>" >
Related
So I am submitting a form to the same page. I have used the following code to check whether the form was submitted, and to avoid 'undefined variables' errors during the first page reload.
if (isset($_POST['submit'])){
// Get search variables
$pName = $_POST['pname'];
$pLocation = $_POST['plocation'];
$pPrice = $_POST['pprice'];
if (isset($_POST['ptype'])){
$pType = $_POST['ptype'];
}
echo "pType";
}
However, I cannot echo the php variables onto the page. I am guessing this is because the form is refreshed when it is sent by post, so the variables are lost.
How can I fix this problem?
This is the html form
<form method="post" action="../html/searchpage.php">
<div id="searchborder">
<input type="text" id="pname" name="pname" placeholder=" Property name">
<input type="text" id="plocation" name="plocation" placeholder=" Property location">
<input type="number" id="pprice" name="pprice" placeholder=" Property price">
<div id="ptypeholder">
<div id="ptypebox">
<select name="ptype">
<option value="" disabled selected>Post type</option>
<option value="buy">Buy</option>
<option value="rent">Rent</option>
</select>
</div>
</div>
<button type="submit"><img src="../images/search.png"></button>
</div>
</form>
I am trying to display 'property posts' into html cards from a database using php in this page. The form is the search bar for the property posts.
Thanks!
I don't think $_POST['submit'] is being set because the button needs a name ie
<input type="submit" name="submit" value="submit">
also you have a few other syntax errors, structure, may be this will help :-
<form method="post" action="searchpage.php">
<input type="text" id="pname" name="pname" placeholder="Property name">
<input type="text" id="plocation" name="plocation" placeholder="Property location">
<input type="number" id="pprice" name="pprice" placeholder="Property price">
<select name="ptype">
<option value="" disabled selected>Post type</option>
<option value="buy">Buy</option>
<option value="rent">Rent</option>
</select>
<input type="submit" name="submit" value="submit">
and you don't HAVE to assign the post values to $vars you can use them directly -
<?php
if (isset($_POST['submit'])){
// Get variables
//$pName = $_POST['pname'];
//$pLocation = $_POST['plocation'];
//$pPrice = $_POST['pprice'];
echo $_POST['ptype'].'<br>';
echo $_POST['pname'].'<br>';
echo $_POST['plocation'].'<br>';
echo $_POST['pprice'].'<br>';
}
?>
Needs more work to make it check all posts are set or validation but works as a basic starting point
Also in original you posted echo "pType"; will only echo the text pType not the value
I am executing an form based on PHP on Windows, however after I select an item in the drop down menu, the text does not show up (even though it was selected properly, as I can verify in the database after clicking the insert button).
The form code:
<div id="janela_formulario">
<form action="inserir_transportadoras.php" method="post">
<input type="text" name="nometransportadora" placeholder="Nome da Transportadora">
<input type="text" name="endereco" placeholder="Endereço">
<input type="text" name="telefone" placeholder="Telefone">
<input type="text" name="cidade" placeholder="Cidade">
<select name="estados">
<?php
while($linha = mysqli_fetch_assoc($lista_estados)) {
?>
<option value="<?php echo $linha["estadoID"]; ?>">
<?php echo utf8_encode($linha["nome"]); ?>
</option>
<?php
}
?>
</select>
<input type="text" name="cep" placeholder="CEP">
<input type="text" name="cnpj" placeholder="CNPJ">
<input type="submit" value="inserir">
</form>
</div>
The dropdown menu PHP code:
<input type="text" name="cidade" placeholder="Cidade">
<select name="estados">
<?php
while($linha = mysqli_fetch_assoc($lista_estados)) {
?>
<option value="<?php echo $linha["estadoID"]; ?>">
<?php echo utf8_encode($linha["nome"]); ?>
</option>
<?php
}
?>
</select>
How can I solve it?
while($linha = mysqli_fetch_assoc($lista_estados)) {
echo '<option value="'. $linha["estadoID"] .'"> '.utf8_encode($linha["nome"]).' </option>';
}
Use above code instead of while loop
test by inspect HTML code. is this estadoID are printing properly if yes then test you are catching (estados) data properly
I'm not able to combine the data from two pages. I'm only able to show data from one page. I tried searching for an explanation of my problem on google but I could not find it.
I get an "Undefined index" error as you can see [![in this screenshot][1]][1].
Could not put just code over here because it keeps telling me that I need to use spacing with ctrl + K and im newbie in all this things so please forgive me..
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<form action = "page2.php" method = "POST">
<select list="Country" placeholder="Country" name="country" required class="form-control" style="max-width:250px; margin-top:50px;" id="Country">
<option >Bosnia & Herzegovina</option>
<option >Croatia</option>
<option >Serbia</option>
<option >England</option>
<option >Germany</option>
<option >Austria</option>
<option >Belgium</option>
<option >Switzerland</option>
<option >Italy</option>
<option >Romania</option>
<option >France</option>
<option >Montenegro</option>
<option >Slovenia</option>
</select>
<input type="email" name="email" id="email" placeholder="Your email address" required class="form-control" style="max-width:250px;" />
<input type="password" name="password" id="creapass" placeholder="Create your password" required class="form-control" style="max-width:250px;" />
<input type="password" name="password2" id="password" placeholder="Confirm your password" required class="form-control" style="max-width:250px;" />
<input type="button" value="Next" class="btn btn-primary" style="width:150px;">
</form>
</body>
</html>
Second Page
<!DOCTYPE html>
<html>
<head>
<title>test2</title>
</head>
<body>
<form action = "finalpage.php" method = "POST">
<!-- Values from First Step -->
<input type="hidden" name="country" value="<?php $_POST['country'] ?>">
<input type="hidden" name="email" value="<?php $_POST['email'] ?>">
<input type="hidden" name="password" value="<?php $_POST['password'] ?>">
<input type="hidden" name="password" value="<?php $_POST['password2'] ?>">
<!-- End of Values from First Step -->
<?php
echo "Country:" .$_POST["country"]."</br>";
echo "Email:".$_POST["email"]."</br>";
echo "Password:".$_POST["password"]."</br>";
echo "Password2:".$_POST["password2"]."</br>";
?>
<input type="text" name="first" class="form-control" placeholder="First name" required style="max-width:250px;" >
<input type="text" name="last" class="form-control" placeholder="Last name" required style="max-width:250px;" />
<input type="date" name="date" class="dateb" id="dateOfBirth" required />
<select list="Country" placeholder="Country" name="country2" required class="form-control" style="max-width:250px; " id="Country">
<option >Bosnian</option>
<option >Croat</option>
<option >Serb</option>
<option >English</option>
<option >German</option>
<option >Austrian</option>
<option >Belgian</option>
<option >Swiss</option>
<option >Italian</option>
<option >Romanian</option>
<option >French</option>
<option >Montenegrin</option>
<option >Slovenian</option>
</select>
<input type="text" class="form-control" name="street1" placeholder="Street address 1" required style="max-width:250px;" />
<input type="text" class="form-control" name="street2" placeholder="Street address 2 (Optional)" style="max-width:250px;" />
<input type="text" class="form-control" name="city" placeholder="City" required style="max-width:250px;" />
<input type="text" class="form-control" name="region" placeholder="Province/Region" required style="max-width:250px;" />
<input type="text" class="form-control" name="postal" placeholder="Postal code" required style="max-width:250px;" />
<input type="tel" class="form-control" name="phone" placeholder="Phone number" required style="max-width:250px;" />
<input type="checkbox" name="terms" > I have read and agree to the Terms and WBC's User Agreement.
<input type="Submit" name="insert" value="Continue" class="btn btn-primary btn-lg">
</form>
</body>
</html>
Final Step.
<html>
<head>
<title>get data from another page</title>
</head>
<body>
<?php
echo "Country:" .$_POST["country"]."</br>";
echo "Email:".$_POST["email"]."</br>";
echo "Password:".$_POST["password"]."</br>";
echo "Password2:".$_POST["password2"]."</br>";
echo "First name:" .$_POST["first"]."</br>";
echo "Last name:".$_POST["last"]."</br>";
echo "Date:".$_POST["date"]."</br>";
echo "Country2:".$_POST["country2"]."</br>";
echo "Street1:" .$_POST["street1"]."</br>";
echo "Street2:".$_POST["street2"]."</br>";
echo "City:".$_POST["city"]."</br>";
echo "Region:".$_POST["region"]."</br>";
echo "Postal code:" .$_POST["postal"]."</br>";
echo "Phone number:".$_POST["phone"]."</br>";
?>
</body>
</html>
I am not copying the entire code of yours as it is not required. Below is the logic you have to follow.
In the first step, i.e. your first form (I prefer using PHP format as it allows you to use PHP functions, if required), put your second PHP in the form's action.
<form action = "step_2.php" method = "POST">
Now in your step_2.php, you have to add the below in your form.
<!-- Values from First Step -->
<input type="country" name="country" value="<?php echo $_POST['country'] ?>">
<input type="hidden" name="email" value="<?php echo $_POST['email'] ?>">
<input type="hidden" name="password" value="<?php echo $_POST['password'] ?>">
<!-- End of Values from First Step -->
Above code will add the values posted from the first step into your second step form. Now you can simply fetch these values in the final step. To do this, add your final step PHP in your Action of this form.
<form action = "final_step.php" method = "POST">
In your final_step.php, you can normally get the values by $_POST.
You've got a number of problems. First, your option fields don't have values.
What you have: <option>Bosnia</option>
What you need: <option value="bosnia" >Bosnia</option>
You should also have a default as your first option, otherwise your program is going to assume that everyone who doesn't pick something has the first option, and you are going to get a million submissions that are not accurate. Eg:
<option value="false" selected="selected">Please select an option from below</option>
Then your backend should be checking like this:
<?php
if (!isset($_POST['country'] || $_POST['country'] === 'false')
{
//They did not pick a country, and you need to bounce them back to the form with an error message.
header('Location: /path/to/your/form');
exit;
}
//country is defined, you can continue,
//but you should pre-validate the other required field here also.
//do not assume things are right, assumptions = bugs.
...
The anchor tag you have surrounding your submit button may be redirecting instead of submitting the form, in which case your $_POST will be completely empty. The below tag you have:
<input type="button" value="Next" class="btn btn-primary" style="width:150px;">
Needs to look more like this:
<input type="submit" value="Next" class="btn btn-primary" style="width:150px;">
Or alternately:
<button type="submit" class="btn btn-primary" style="width:150px;">Next</button>
If you are stumped, put this at the beginning of what you have on your processing code:
echo '<pre>' . print_r($_POST, 1); exit;
This will show you what was submitted, and let you work through from there as needed.
In general, your conditionals should check if a key exists before validating it if there is any ambiguity as to whether or not it is set:
//BAD
if ($_POST['country'] == 'someval') { ... }
//GOOD
if (array_key_exists('country', $_POST) && $_POST['country'] == 'someval') { ... }
You can also check with isset($_POST['country']); HOWEVER, if null values are valid for whatever you are checking, then this will return false, even if the key is there. So in any case where null is valid, you need to use array_key_exists() instead.
Instead of passing variables directly from one page to another, it's a lot easier if you use $_SESSION, so if they derp up and hit back or walk away for a while, the values are not entirely lost. Users hate having to redundantly redo things, and will probably entirely lose interest in your site if they have to do that. Instead, you can set the values if they exist into session memory like this:
<?php
session_start(); //you have to do this before printing ANY other content.
$_SESSION['country'] = (isset($_POST['country']) ? $_POST['country'] : null);
And then you can retrieve this at any time from any page by doing:
<?php
session_start();
echo $_SESSION['country'];
and if you want to clear them, you just do:
<?php
session_start(); //can't destroy a non-existent session, you have to do this first
session_destroy(); //clears the session
session_start(); //starts a new one
Stashing ongoing form values in the session temporarily lets you access them for as long as the session cookie lasts, so they are not lost if the user quits your form, goes to another site, then comes back to finish. Your form will have to put these back in manually though, so an input might look something like this
<input type="password" name="password" value="<?= isset($_SESSION) && isset($_SESSION['password'] ? $_SESSION['password'] : null; ?>" />
I tried to explain the relevant logic you are not applying rather than just the specific use case, because without actually grasping what the underlying lack of logic is, you would otherwise probably just hit the same wall again. Hopefully this saves you from a number of other bugs that you would otherwise likely hit immediately after this specific thing gets fixed for you.
I have a form in html and I am saving it as search.php:
<form name="myform" action="" method="POST" onsubmit="search_clicked(); return false;">
Keyword<input type="text" name="Keyword" id="Keyword" value="XYZ" required/><!-- value is the default name that appears in the text box-->
<br>
Type
<select name="sel" id="sel" class="form-control" onchange="checkcolors(this.value)">
<option selected value="Users">Users</option>
<option value="Pages">Pages</option>
<option value="Events">Events</option>
<option value="Places">Places</option>
<option value="Groups">Groups</option>
</select>
</form>
<div id="loc_dist_displayarea" style="display:none;">
Location<input type="text" name="Location" value="90007" required/> Distance(meters)<input type="text" name="distance" value="10000" required/>
</div>
<br><br>
<input type="submit" name="Search"/>
<input type="submit" value="clear" id="clear" onclick="return clearclicked()"/>
</form>
and my php script is in the same file:
<div id="body_area" style="display:none">
<?php
echo "hi I am searching ";
if($_SERVER["REQUEST_METHOD"]=="POST")
{
//echo "yes value is selected";
//echo $_POST["Keyword"];
if (isset($_POST['sel'])) {
$selectedval= $_POST["sel"];
echo "$selectedval";
}
//echo $_POST["Location"];
}
echo "no value is selected";
?>
</div>
I am not able to display the $_POST['sel'] while $_POST['Keyword'] is echoed.Please help.
First of all, you arent using good programming practices, you use quotation marks (these " and these ') Indiscriminately. You should only alternate between them when you have them nested.
Next, on the action paramenter you should put the name of the file, even if it's the same.
Trying out some things with php and html, I'm having issues trying to get all of my form data reposted. I've figured out how to do the text boxes. Still at a loss for the select box, radio and check box. Would I be better off reposting inside the HTML page or letting my include template code take care of it?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/rocks.css">
<title>About Us-- Rocks</title>
</head>
<body>
<?php include("templates/banner_navigation.php"); ?>
<div id="links_group">
<?php include("templates/menu.php"); ?> <!-- 1st include for navigation, stored in templates -->
</div>
<div id="about_us_form">
<?php include("templates/about_us_valid.php"); ?>
<form action="<?php echo $PHP_SELF;?>" method="post">
<table>
<tr><td>First name:</td><td><input type="text" name="contact_name" title="Enter your first name here" value="<?php if (isset($_POST['contact_name'])) echo $_POST['contact_name']; ?>" /></td></tr>
<tr><td>Email Address:</td><td><input type="text" name="contact_email" title="Enter your email here" value="<?php if (isset($_POST['contact_email'])) echo $_POST['contact_email']; ?>" ></td></tr>
<tr><td>Phone Number:</td><td><input type="text" name="contact_phone_number" title="555-555-5555" value="<?php if (isset($_POST['contact_phone_number'])) echo $_POST['contact_phone_number']; ?>" /></td></tr>
<tr><td>I prefer to be contacted by:</td><td><input type="radio" name="preference" value="Email" checked/>Email<input type="radio" name="preference" value="Phone" />Phone</td></tr>
<tr><td>I am interested in:</td> <td><select name="select_rocks"><option value="gold">Gold</option>
<option value="silver">Silver</option>
<option value="thorium" selected="selected">Thorium</option>
<option value="titanium">Titanium</option>
</select></td></tr>
<tr><td> I would like to ask about:</td></tr>
<tr><td><textarea name="that_textarea" rows ="10" cols="25" title="Enter your questions here!">
</textarea></td></tr>
<tr><td>I am also interested in:</td><td>
<tr><td>Gemstones <input type="checkbox" name="checkbox1[]" value="gemstones" /></td><tr>
<tr><td>Ore processing <input type="checkbox" name="checkbox1[]" value="oreprocessing" /></td></tr>
<tr><td><input type="hidden" name="checkbox1[]" value="" /> </td><tr>
<tr><td><input type="submit" value="submit" name="submitform" /></td></tr>
</table><br/>
</form>
</div>
</body>
the include template:
<?php
function check_for_cat($namecheck=false,$emailcheck=false){
if ($namecheck) $name_field_error = "(((Name Invalid!)))";
if ($emailcheck) $email_field_error = "(((Email Invalid!)))";
//Start of form
if($namecheck) echo "<tr><td>$name_field_error</td></tr>";
if($emailcheck) echo "<tr><td>$email_field_error</td></tr>";
}
if (!isset($_POST['submitform'])) {
check_for_cat();
} else {
$namecheck = false;
$emailcheck = false;
$contact_name = isset($_POST['contact_name']) ? trim($_POST['contact_name']) : '';
$contact_email = isset($_POST['contact_email']) ? trim($_POST['contact_email']) : '';
if (strlen($contact_name)<3) $namecheck = true;
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*#[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $contact_email)) $emailcheck=true;
if ($namecheck || $emailcheck ){
check_for_cat($namecheck,$emailcheck);
} else {
echo '(((OMG the form is submitted!)))';
}
}
?>
Its probably pretty easy to do, I've just been looking at the code for too long, Thanks for the help! If possible put some code up, google and yahoo haven't found me much to look at.
For use Selected Option ...
Both radio and checkbox inputs with work with checked="checked" in order for them to be checked. You must use some php logic to determine if the user's input matches the necessary input to check the radio/checkbox and dropdown. For instance:
<input type="checkbox" <?php if ($userval == $boxval) echo 'checked="checked"'; ?> />