Quiero recordar el valor de una entrada específica después de hacer clic en el botón Enviar.
Frecuentes
Visto 1,307 veces
0
I want to remember the value of a specific input after the submit button is clicked? Purpose is if during the user registers an account and encounters errors like email exist or password do not match i want to retain the values like name, age and etc. as of the moment here's my code, what should I do? Any help or suggestion? thanks
<?php
session_start();
$errflag = false;
$errmsg = array();
if(isset($_SESSION['errmsg'])&&is_array($_SESSION['errmsg'])&&count($_SESSION['errmsg'])>0){
foreach($_SESSION['errmsg'] as $msg){
echo $msg;
}
unset($_SESSION['errmsg']);
}
?>
<form method="post">
<table>
<tr>
<td>Last Name:</td><td><input id="txtfield" type="text" name="lname" autofocus="autofocus" required="required"></td>
</tr>
<tr>
<td>First Name:</td><td><input id="txtfield" type="text" name="fname" required="required"></td>
</tr>
<tr>
<td>E-mail:</td><td><input id="txtfield" type="email" name="email" required="required"></td>
</tr>
<tr>
<td>Password:</td><td><input id="txtfield" type="password" name="pass" pattern=".{6,}" required="required"></td>
</tr>
<tr>
<td>Re-type:</td><td><input id="txtfield" type="password" name="rpass" pattern=".{6,}" required="required"></td>
</tr>
<tr>
<td></td><td><input id="btn" type="submit" name="register" value="Register"></td>
</tr>
</table>
</form>
<?php
include 'functions/functions.php';
if(isset($_POST['register'])){
$result=ValidateEmail($_POST['email']);
if($result){
$errmsg[] = '<p id="error"><img src="img/error.png" alt="error">This email address is already in use.</p>';
$errflag = true;
}
if($_POST['pass']!=$_POST['rpass']){
$errmsg[] = '<p id="error"><img src="img/error.png" alt="error">Passwords does not match.</p>';
$errflag = true;
}
if($errflag){
session_regenerate_id();
$_SESSION['errmsg'] = $errmsg;
session_write_close();
$errflag = false;
header('location: register.php');
exit();
}
else {
$user = array('lname'=>$_POST['lname'],'fname'=>$_POST['fname'],'email'=>$_POST['email'],'pass'=>$_POST['pass']);
RegisterUser($user);
session_regenerate_id();
$errmsg[] = '<p id="success"><img src="img/success.png" alt="success">Your account is now active. You may now login.</p>';
$_SESSION['errmsg'] = $errmsg;
session_write_close();
header('location: index.php');
exit();
}
}
?>
3 Respuestas
1
Use ajax/ javascript to check if password do not match or username already exists. That way you would be querying database without actually changing the page.
So you have the fields filled remain there. Here's small ejemplo en w3schools
Respondido 25 ago 12, 07:08
is there another way without using any ajax/js? just pure php ^^ thanks! - Sui ir
You can use Sessions for this but it is highly not recommended. Another way would be to have the submit redirect to the same page with all the post variables. If the verification fails, put all the post variables back into the form. - serguei fedorov
yes post back to same page, is another cleaner solution and check for var's - amichhajer
then where should i put the post values? - Sui ir
Put the post values back into your form. Ill change my answer to accommodate this - serguei fedorov
0
<form method="post">
<input id="txtfield" type="text" name="lname" autofocus="autofocus" required="required" Value=<?php $lname ?>/>
already posts back to the same page. What you can do now is something like:
$lname = ""; //and all the other fields
$fname = "";
if ($_POST['lname'] == "")
{
$fname = $_POST['fname'];//and all the other fields
//put all the variables back into the form and display an error text
}
else
{
//Lets do the whole form processing and submit here
}
In other words, set all your values for your input fields using variables that are blank. If an error happens, set all those variables to their original value.
Respondido 25 ago 12, 07:08
0
according to my understanding, you want the submitted variables to appear back again in the form in case of wrong or missing submission.
Replace the HTML code with this, it should do it:
<form method="post">
<table>
<tr>
<td>Last Name:</td><td><input id="txtfield" type="text" name="lname" value="<?=$_POST['lname'];?>" autofocus="autofocus" required="required"></td>
</tr>
<tr>
<td>First Name:</td><td><input id="txtfield" type="text" name="fname" value="<?=$_POST['fname'];?>" required="required"></td>
</tr>
<tr>
<td>E-mail:</td><td><input id="txtfield" type="email" name="email" value="<?=$_POST['email'];?>" required="required"></td>
</tr>
<tr>
<td>Password:</td><td><input id="txtfield" type="password" name="pass" pattern=".{6,}" required="required"></td>
</tr>
<tr>
<td>Re-type:</td><td><input id="txtfield" type="password" name="rpass" pattern=".{6,}" required="required"></td>
</tr>
<tr>
<td></td><td><input id="btn" type="submit" name="register" value="Register"></td>
</tr>
</table>
</form>
Respondido 25 ago 12, 07:08
why this not work? in the textbox is shows <?=$_POST['lname'];?> - Sui ir
seems to me you are using localhost. replace the values with these: <?php echo $_POST['lname'];?> , <?php echo $_POST['fname'];?>, <?php echo $_POST['email'];?> - user1494855
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php html session post or haz tu propia pregunta.
Yes, as the answer below says, its best to send an AJAX request which will return some kind of verification. No need to "remember" values as you will not be changing pages, but rather sending out a request to another page via AJAX and if the response is true (or whatever you want to verify it as) then you can continue. - Serguei Fedorov
any samples or link, since I'm not familiar in ajax yet :( - Sui Go
@SuiGo have added an example in answer below, basic guide for ajax. - amitchhajer
@amitchhajer thanks, i'll try that - Sui Go