Address form validationUnicode parsing in PHPPopulating form contents from GET - especially radio...
Has the Isbell–Freyd criterion ever been used to check that a category is concretisable?
When was drinking water recognized as crucial in marathon running?
Is there a low-level alternative to Animate Objects?
CBP Reminds Travelers to Allow 72 Hours for ESTA. Why?
Hacker Rank: Array left rotation
What type of postprocessing gives the effect of people standing out
What is this waxed root vegetable?
"Murder!" The knight said
How to kill a localhost:8080
How to mitigate "bandwagon attacking" from players?
Difference between 小吃 and 零食
Did 5.25" floppies undergo a change in magnetic coating?
Should I choose Itemized or Standard deduction?
Where was Karl Mordo in Infinity War?
Did Amazon pay $0 in taxes last year?
How can I be pwned if I'm not registered on that site?
Is my plan for fixing my water heater leak bad?
What is the difference between throw e and throw new Exception(e)?
How to acknowledge an embarrassing job interview, now that I work directly with the interviewer?
Does music exist in Panem? And if so, what kinds of music?
How to properly claim credit for peer review?
Can you benefit from a Hammer of Thunderbolts’s Strength increase by holding it with something else than your hands?
What can I substitute for soda pop in a sweet pork recipe?
Easy code troubleshooting in wordpress
Address form validation
Unicode parsing in PHPPopulating form contents from GET - especially radio buttonsContact information validationMake code more memory efficient, or shorterEmail Template Parser PHP ClassExtracting relevant form data to an arrayAdding border to required fields when fields are emptyMy included in every script file - follow-up -1Is it possible to make easier this code?Check PHP validation code
$begingroup$
I need help with this code. How can I make it shorter? How can I create an array with the names, for example, errors, and modify code without so many If
statements? I still can't solve it. I'm a beginner in PHP.
$error1 = $error2 = $error3 = $error4 = $error5 = $error6 = $error7 = $error8 = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["fname"])) {
$error1 = "fill in fname";
}
if (empty($_POST["lname"])) {
$error2 = "fill in lname";
}
if (empty($_POST["street"])) {
$error3 = "fill in street";
}
if (empty($_POST["city"])) {
$error4 = "fill in city";
}
if (empty($_POST["postcode"])) {
$error5 = "fill in postcode";
}
if (empty($_POST["country"])) {
$error6 = "fill in country";
}
if (empty($_POST["email"])) {
$error7 = "fill in email";
}
if (empty($_POST["phone"])) {
$error8 = "fill in phone";
}
if (empty($_POST["fname"]) ||
empty($_POST["lname"]) ||
empty($_POST["street"]) ||
empty($_POST["city"]) ||
empty($_POST["postcode"]) ||
empty($_POST["country"]) ||
empty($_POST["email"]) ||
empty($_POST["phone"])) {
} else {
$form_items = $_POST;
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml'))
{
$document->load("form_data.xml");
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
else
{
$xmlko = $document->createElement("xml");
$document->appendChild($xmlko);
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
$form = $document->createElement("form");
$new_user = $document->createElement("user");
foreach ($form_items as $ite => $val) {
$this_user = $document->createElement($ite, $val);
$new_user->appendChild($this_user);
}
$form->appendChild($new_user);
$xmlko->appendChild($form);
$document->save("form_data.xml");
}
}
?>
Here is HTML code. Everything is in one PHP file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>form</title>
<link rel="stylesheet" href="CSS/styly.css">
</head>
<body>
<h1>FORM</h1>
<form action="" method="post">
<p>FName:</p>
<input type="text" name="fname"/><span class="error"><?php echo $error1?></span>
<p>LName:</p>
<input type="text" name="lname"/><span class="error"><?php echo $error2?></span>
<p>Street:</p>
<input type="text" name="street"/><span class="error"><?php echo $error3?></span>
<p>City:</p>
<input type="text" name="city"/><span class="error"><?php echo $error4?></span>
<p>Postcode:</p>
<input type="text" name="postcode"/><span class="error"><?php echo $error5?></span>
<p>Country:</p>
<input type="text" name="country"/><span class="error"><?php echo $error6?></span>
<p>E-mail:</p>
<input type="text" name="email"/><span class="error"><?php echo $error7?></span>
<p>Phone:</p>
<input type="text" name="phone"/><span class="error"><?php echo $error8?></span>
<input type="submit" value="SUBMIT"/>
</form>
<?php
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml')) {
$document->load("form_data.xml");
$users = $document->getElementsByTagName("user");
echo "<table>";
echo '<tr>';
foreach($users->item(0)->childNodes as $data) {
echo '<th>'.$data->nodeName."</th>";
}
echo '</tr>';
foreach($users as $user){
echo '<tr>';
foreach($user->childNodes as $data) {
echo '<td>'.$data->nodeValue."</td>";
}
echo '</tr>';
}
echo "</table>";
}
?>
</body>
</html>
All data from the HTML form is inserted into the table below the form.
php html validation form
$endgroup$
add a comment |
$begingroup$
I need help with this code. How can I make it shorter? How can I create an array with the names, for example, errors, and modify code without so many If
statements? I still can't solve it. I'm a beginner in PHP.
$error1 = $error2 = $error3 = $error4 = $error5 = $error6 = $error7 = $error8 = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["fname"])) {
$error1 = "fill in fname";
}
if (empty($_POST["lname"])) {
$error2 = "fill in lname";
}
if (empty($_POST["street"])) {
$error3 = "fill in street";
}
if (empty($_POST["city"])) {
$error4 = "fill in city";
}
if (empty($_POST["postcode"])) {
$error5 = "fill in postcode";
}
if (empty($_POST["country"])) {
$error6 = "fill in country";
}
if (empty($_POST["email"])) {
$error7 = "fill in email";
}
if (empty($_POST["phone"])) {
$error8 = "fill in phone";
}
if (empty($_POST["fname"]) ||
empty($_POST["lname"]) ||
empty($_POST["street"]) ||
empty($_POST["city"]) ||
empty($_POST["postcode"]) ||
empty($_POST["country"]) ||
empty($_POST["email"]) ||
empty($_POST["phone"])) {
} else {
$form_items = $_POST;
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml'))
{
$document->load("form_data.xml");
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
else
{
$xmlko = $document->createElement("xml");
$document->appendChild($xmlko);
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
$form = $document->createElement("form");
$new_user = $document->createElement("user");
foreach ($form_items as $ite => $val) {
$this_user = $document->createElement($ite, $val);
$new_user->appendChild($this_user);
}
$form->appendChild($new_user);
$xmlko->appendChild($form);
$document->save("form_data.xml");
}
}
?>
Here is HTML code. Everything is in one PHP file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>form</title>
<link rel="stylesheet" href="CSS/styly.css">
</head>
<body>
<h1>FORM</h1>
<form action="" method="post">
<p>FName:</p>
<input type="text" name="fname"/><span class="error"><?php echo $error1?></span>
<p>LName:</p>
<input type="text" name="lname"/><span class="error"><?php echo $error2?></span>
<p>Street:</p>
<input type="text" name="street"/><span class="error"><?php echo $error3?></span>
<p>City:</p>
<input type="text" name="city"/><span class="error"><?php echo $error4?></span>
<p>Postcode:</p>
<input type="text" name="postcode"/><span class="error"><?php echo $error5?></span>
<p>Country:</p>
<input type="text" name="country"/><span class="error"><?php echo $error6?></span>
<p>E-mail:</p>
<input type="text" name="email"/><span class="error"><?php echo $error7?></span>
<p>Phone:</p>
<input type="text" name="phone"/><span class="error"><?php echo $error8?></span>
<input type="submit" value="SUBMIT"/>
</form>
<?php
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml')) {
$document->load("form_data.xml");
$users = $document->getElementsByTagName("user");
echo "<table>";
echo '<tr>';
foreach($users->item(0)->childNodes as $data) {
echo '<th>'.$data->nodeName."</th>";
}
echo '</tr>';
foreach($users as $user){
echo '<tr>';
foreach($user->childNodes as $data) {
echo '<td>'.$data->nodeValue."</td>";
}
echo '</tr>';
}
echo "</table>";
}
?>
</body>
</html>
All data from the HTML form is inserted into the table below the form.
php html validation form
$endgroup$
$begingroup$
I changed the title so that it describes what the code does per site goals: "State what your code does in your title, not your main concerns about it.". Feel free to edit and give it a different title if there is something more appropriate.
$endgroup$
– Sᴀᴍ Onᴇᴌᴀ
10 mins ago
add a comment |
$begingroup$
I need help with this code. How can I make it shorter? How can I create an array with the names, for example, errors, and modify code without so many If
statements? I still can't solve it. I'm a beginner in PHP.
$error1 = $error2 = $error3 = $error4 = $error5 = $error6 = $error7 = $error8 = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["fname"])) {
$error1 = "fill in fname";
}
if (empty($_POST["lname"])) {
$error2 = "fill in lname";
}
if (empty($_POST["street"])) {
$error3 = "fill in street";
}
if (empty($_POST["city"])) {
$error4 = "fill in city";
}
if (empty($_POST["postcode"])) {
$error5 = "fill in postcode";
}
if (empty($_POST["country"])) {
$error6 = "fill in country";
}
if (empty($_POST["email"])) {
$error7 = "fill in email";
}
if (empty($_POST["phone"])) {
$error8 = "fill in phone";
}
if (empty($_POST["fname"]) ||
empty($_POST["lname"]) ||
empty($_POST["street"]) ||
empty($_POST["city"]) ||
empty($_POST["postcode"]) ||
empty($_POST["country"]) ||
empty($_POST["email"]) ||
empty($_POST["phone"])) {
} else {
$form_items = $_POST;
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml'))
{
$document->load("form_data.xml");
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
else
{
$xmlko = $document->createElement("xml");
$document->appendChild($xmlko);
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
$form = $document->createElement("form");
$new_user = $document->createElement("user");
foreach ($form_items as $ite => $val) {
$this_user = $document->createElement($ite, $val);
$new_user->appendChild($this_user);
}
$form->appendChild($new_user);
$xmlko->appendChild($form);
$document->save("form_data.xml");
}
}
?>
Here is HTML code. Everything is in one PHP file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>form</title>
<link rel="stylesheet" href="CSS/styly.css">
</head>
<body>
<h1>FORM</h1>
<form action="" method="post">
<p>FName:</p>
<input type="text" name="fname"/><span class="error"><?php echo $error1?></span>
<p>LName:</p>
<input type="text" name="lname"/><span class="error"><?php echo $error2?></span>
<p>Street:</p>
<input type="text" name="street"/><span class="error"><?php echo $error3?></span>
<p>City:</p>
<input type="text" name="city"/><span class="error"><?php echo $error4?></span>
<p>Postcode:</p>
<input type="text" name="postcode"/><span class="error"><?php echo $error5?></span>
<p>Country:</p>
<input type="text" name="country"/><span class="error"><?php echo $error6?></span>
<p>E-mail:</p>
<input type="text" name="email"/><span class="error"><?php echo $error7?></span>
<p>Phone:</p>
<input type="text" name="phone"/><span class="error"><?php echo $error8?></span>
<input type="submit" value="SUBMIT"/>
</form>
<?php
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml')) {
$document->load("form_data.xml");
$users = $document->getElementsByTagName("user");
echo "<table>";
echo '<tr>';
foreach($users->item(0)->childNodes as $data) {
echo '<th>'.$data->nodeName."</th>";
}
echo '</tr>';
foreach($users as $user){
echo '<tr>';
foreach($user->childNodes as $data) {
echo '<td>'.$data->nodeValue."</td>";
}
echo '</tr>';
}
echo "</table>";
}
?>
</body>
</html>
All data from the HTML form is inserted into the table below the form.
php html validation form
$endgroup$
I need help with this code. How can I make it shorter? How can I create an array with the names, for example, errors, and modify code without so many If
statements? I still can't solve it. I'm a beginner in PHP.
$error1 = $error2 = $error3 = $error4 = $error5 = $error6 = $error7 = $error8 = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["fname"])) {
$error1 = "fill in fname";
}
if (empty($_POST["lname"])) {
$error2 = "fill in lname";
}
if (empty($_POST["street"])) {
$error3 = "fill in street";
}
if (empty($_POST["city"])) {
$error4 = "fill in city";
}
if (empty($_POST["postcode"])) {
$error5 = "fill in postcode";
}
if (empty($_POST["country"])) {
$error6 = "fill in country";
}
if (empty($_POST["email"])) {
$error7 = "fill in email";
}
if (empty($_POST["phone"])) {
$error8 = "fill in phone";
}
if (empty($_POST["fname"]) ||
empty($_POST["lname"]) ||
empty($_POST["street"]) ||
empty($_POST["city"]) ||
empty($_POST["postcode"]) ||
empty($_POST["country"]) ||
empty($_POST["email"]) ||
empty($_POST["phone"])) {
} else {
$form_items = $_POST;
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml'))
{
$document->load("form_data.xml");
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
else
{
$xmlko = $document->createElement("xml");
$document->appendChild($xmlko);
$xmlko = $document->getElementsByTagName('xml')->item(0);
}
$form = $document->createElement("form");
$new_user = $document->createElement("user");
foreach ($form_items as $ite => $val) {
$this_user = $document->createElement($ite, $val);
$new_user->appendChild($this_user);
}
$form->appendChild($new_user);
$xmlko->appendChild($form);
$document->save("form_data.xml");
}
}
?>
Here is HTML code. Everything is in one PHP file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>form</title>
<link rel="stylesheet" href="CSS/styly.css">
</head>
<body>
<h1>FORM</h1>
<form action="" method="post">
<p>FName:</p>
<input type="text" name="fname"/><span class="error"><?php echo $error1?></span>
<p>LName:</p>
<input type="text" name="lname"/><span class="error"><?php echo $error2?></span>
<p>Street:</p>
<input type="text" name="street"/><span class="error"><?php echo $error3?></span>
<p>City:</p>
<input type="text" name="city"/><span class="error"><?php echo $error4?></span>
<p>Postcode:</p>
<input type="text" name="postcode"/><span class="error"><?php echo $error5?></span>
<p>Country:</p>
<input type="text" name="country"/><span class="error"><?php echo $error6?></span>
<p>E-mail:</p>
<input type="text" name="email"/><span class="error"><?php echo $error7?></span>
<p>Phone:</p>
<input type="text" name="phone"/><span class="error"><?php echo $error8?></span>
<input type="submit" value="SUBMIT"/>
</form>
<?php
$document = new DOMDocument("1.0", "utf-8");
if (is_file('form_data.xml')) {
$document->load("form_data.xml");
$users = $document->getElementsByTagName("user");
echo "<table>";
echo '<tr>';
foreach($users->item(0)->childNodes as $data) {
echo '<th>'.$data->nodeName."</th>";
}
echo '</tr>';
foreach($users as $user){
echo '<tr>';
foreach($user->childNodes as $data) {
echo '<td>'.$data->nodeValue."</td>";
}
echo '</tr>';
}
echo "</table>";
}
?>
</body>
</html>
All data from the HTML form is inserted into the table below the form.
php html validation form
php html validation form
edited 11 mins ago
Sᴀᴍ Onᴇᴌᴀ
9,80162165
9,80162165
asked Nov 11 '17 at 8:56
Tomas13TOTomas13TO
263
263
$begingroup$
I changed the title so that it describes what the code does per site goals: "State what your code does in your title, not your main concerns about it.". Feel free to edit and give it a different title if there is something more appropriate.
$endgroup$
– Sᴀᴍ Onᴇᴌᴀ
10 mins ago
add a comment |
$begingroup$
I changed the title so that it describes what the code does per site goals: "State what your code does in your title, not your main concerns about it.". Feel free to edit and give it a different title if there is something more appropriate.
$endgroup$
– Sᴀᴍ Onᴇᴌᴀ
10 mins ago
$begingroup$
I changed the title so that it describes what the code does per site goals: "State what your code does in your title, not your main concerns about it.". Feel free to edit and give it a different title if there is something more appropriate.
$endgroup$
– Sᴀᴍ Onᴇᴌᴀ
10 mins ago
$begingroup$
I changed the title so that it describes what the code does per site goals: "State what your code does in your title, not your main concerns about it.". Feel free to edit and give it a different title if there is something more appropriate.
$endgroup$
– Sᴀᴍ Onᴇᴌᴀ
10 mins ago
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
Instead of individual variables, you should use an array.
$errors = [];
foreach (['fname', 'lname', 'street'] as $field) {
if (empty($_POST[$field])) {
$errors[$field] = "$field must be filled in";
}
}
…
if (!empty($errors)) {
…
}
And then, in the HTML:
<?php echo $errors['fname'] ?>
$endgroup$
add a comment |
$begingroup$
@Roland Illig has a good point: the field names can be put into an array. Perhaps it would be best to use one array for the labels of the fields and then use that array to generate the field names.
$fieldLabels = array("FName","LName","Street","City","Postcode","Country","E-mail","Phone");
To get the field name (e.g. when iterating over each label), a function can be applied to the label. For the case of the labels above, the name can simply be derived by removing the hyphen (i.e. -
) and making the label lowercase. For those operations, str_replace() and strtolower() can be used. This logic could be abstracted into a function (or method if a class was defined) and called when necessary:
function GetFieldNameFromLabel($label) {
return str_replace('-', '', strtolower($label));
}
Then when checking if all field have been completed, that function can be called. The labels can be iterated over, to check if there is a non-empty value in the POST data (i.e. $_POST
) - if so, store such a value in an array (e.g. $validValues
).
$validValues = array();
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
if (!empty($_POST[$fieldName])) {
$validValues[$fieldName] = $_POST[$fieldName];
}
}
Then the condition for adding the entry in the XML can simply be whether the number of values in that array of valid values is the same as the number of labels:
if (count($validValues) == count($fieldLabels)) {
//store values from $validValues in XML
}
Then for generating the form, the fields can be iterated over, and the error message can be added conditionally. One could even conditionally add the error message container (i.e. <span class="error">
). Some may argue this logic should be separated from the HTML - that could be achieved using a template system (e.g. Smarty, Symfony Twig, etc.) - that could also be used for the display of existing data.
<form action="" method="post">
<?php
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
$error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && !array_key_exists($fieldName, $validValues)) {
$error = "Fill in ".$fieldName;
}
echo "<p>$fieldLabel:</p>";
echo '<input type="text" name="'.$fieldName.'"/><span class="error">'.$error.'</span>';
}
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f180151%2faddress-form-validation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Instead of individual variables, you should use an array.
$errors = [];
foreach (['fname', 'lname', 'street'] as $field) {
if (empty($_POST[$field])) {
$errors[$field] = "$field must be filled in";
}
}
…
if (!empty($errors)) {
…
}
And then, in the HTML:
<?php echo $errors['fname'] ?>
$endgroup$
add a comment |
$begingroup$
Instead of individual variables, you should use an array.
$errors = [];
foreach (['fname', 'lname', 'street'] as $field) {
if (empty($_POST[$field])) {
$errors[$field] = "$field must be filled in";
}
}
…
if (!empty($errors)) {
…
}
And then, in the HTML:
<?php echo $errors['fname'] ?>
$endgroup$
add a comment |
$begingroup$
Instead of individual variables, you should use an array.
$errors = [];
foreach (['fname', 'lname', 'street'] as $field) {
if (empty($_POST[$field])) {
$errors[$field] = "$field must be filled in";
}
}
…
if (!empty($errors)) {
…
}
And then, in the HTML:
<?php echo $errors['fname'] ?>
$endgroup$
Instead of individual variables, you should use an array.
$errors = [];
foreach (['fname', 'lname', 'street'] as $field) {
if (empty($_POST[$field])) {
$errors[$field] = "$field must be filled in";
}
}
…
if (!empty($errors)) {
…
}
And then, in the HTML:
<?php echo $errors['fname'] ?>
answered Nov 11 '17 at 10:21
Roland IlligRoland Illig
11.2k11844
11.2k11844
add a comment |
add a comment |
$begingroup$
@Roland Illig has a good point: the field names can be put into an array. Perhaps it would be best to use one array for the labels of the fields and then use that array to generate the field names.
$fieldLabels = array("FName","LName","Street","City","Postcode","Country","E-mail","Phone");
To get the field name (e.g. when iterating over each label), a function can be applied to the label. For the case of the labels above, the name can simply be derived by removing the hyphen (i.e. -
) and making the label lowercase. For those operations, str_replace() and strtolower() can be used. This logic could be abstracted into a function (or method if a class was defined) and called when necessary:
function GetFieldNameFromLabel($label) {
return str_replace('-', '', strtolower($label));
}
Then when checking if all field have been completed, that function can be called. The labels can be iterated over, to check if there is a non-empty value in the POST data (i.e. $_POST
) - if so, store such a value in an array (e.g. $validValues
).
$validValues = array();
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
if (!empty($_POST[$fieldName])) {
$validValues[$fieldName] = $_POST[$fieldName];
}
}
Then the condition for adding the entry in the XML can simply be whether the number of values in that array of valid values is the same as the number of labels:
if (count($validValues) == count($fieldLabels)) {
//store values from $validValues in XML
}
Then for generating the form, the fields can be iterated over, and the error message can be added conditionally. One could even conditionally add the error message container (i.e. <span class="error">
). Some may argue this logic should be separated from the HTML - that could be achieved using a template system (e.g. Smarty, Symfony Twig, etc.) - that could also be used for the display of existing data.
<form action="" method="post">
<?php
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
$error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && !array_key_exists($fieldName, $validValues)) {
$error = "Fill in ".$fieldName;
}
echo "<p>$fieldLabel:</p>";
echo '<input type="text" name="'.$fieldName.'"/><span class="error">'.$error.'</span>';
}
$endgroup$
add a comment |
$begingroup$
@Roland Illig has a good point: the field names can be put into an array. Perhaps it would be best to use one array for the labels of the fields and then use that array to generate the field names.
$fieldLabels = array("FName","LName","Street","City","Postcode","Country","E-mail","Phone");
To get the field name (e.g. when iterating over each label), a function can be applied to the label. For the case of the labels above, the name can simply be derived by removing the hyphen (i.e. -
) and making the label lowercase. For those operations, str_replace() and strtolower() can be used. This logic could be abstracted into a function (or method if a class was defined) and called when necessary:
function GetFieldNameFromLabel($label) {
return str_replace('-', '', strtolower($label));
}
Then when checking if all field have been completed, that function can be called. The labels can be iterated over, to check if there is a non-empty value in the POST data (i.e. $_POST
) - if so, store such a value in an array (e.g. $validValues
).
$validValues = array();
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
if (!empty($_POST[$fieldName])) {
$validValues[$fieldName] = $_POST[$fieldName];
}
}
Then the condition for adding the entry in the XML can simply be whether the number of values in that array of valid values is the same as the number of labels:
if (count($validValues) == count($fieldLabels)) {
//store values from $validValues in XML
}
Then for generating the form, the fields can be iterated over, and the error message can be added conditionally. One could even conditionally add the error message container (i.e. <span class="error">
). Some may argue this logic should be separated from the HTML - that could be achieved using a template system (e.g. Smarty, Symfony Twig, etc.) - that could also be used for the display of existing data.
<form action="" method="post">
<?php
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
$error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && !array_key_exists($fieldName, $validValues)) {
$error = "Fill in ".$fieldName;
}
echo "<p>$fieldLabel:</p>";
echo '<input type="text" name="'.$fieldName.'"/><span class="error">'.$error.'</span>';
}
$endgroup$
add a comment |
$begingroup$
@Roland Illig has a good point: the field names can be put into an array. Perhaps it would be best to use one array for the labels of the fields and then use that array to generate the field names.
$fieldLabels = array("FName","LName","Street","City","Postcode","Country","E-mail","Phone");
To get the field name (e.g. when iterating over each label), a function can be applied to the label. For the case of the labels above, the name can simply be derived by removing the hyphen (i.e. -
) and making the label lowercase. For those operations, str_replace() and strtolower() can be used. This logic could be abstracted into a function (or method if a class was defined) and called when necessary:
function GetFieldNameFromLabel($label) {
return str_replace('-', '', strtolower($label));
}
Then when checking if all field have been completed, that function can be called. The labels can be iterated over, to check if there is a non-empty value in the POST data (i.e. $_POST
) - if so, store such a value in an array (e.g. $validValues
).
$validValues = array();
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
if (!empty($_POST[$fieldName])) {
$validValues[$fieldName] = $_POST[$fieldName];
}
}
Then the condition for adding the entry in the XML can simply be whether the number of values in that array of valid values is the same as the number of labels:
if (count($validValues) == count($fieldLabels)) {
//store values from $validValues in XML
}
Then for generating the form, the fields can be iterated over, and the error message can be added conditionally. One could even conditionally add the error message container (i.e. <span class="error">
). Some may argue this logic should be separated from the HTML - that could be achieved using a template system (e.g. Smarty, Symfony Twig, etc.) - that could also be used for the display of existing data.
<form action="" method="post">
<?php
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
$error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && !array_key_exists($fieldName, $validValues)) {
$error = "Fill in ".$fieldName;
}
echo "<p>$fieldLabel:</p>";
echo '<input type="text" name="'.$fieldName.'"/><span class="error">'.$error.'</span>';
}
$endgroup$
@Roland Illig has a good point: the field names can be put into an array. Perhaps it would be best to use one array for the labels of the fields and then use that array to generate the field names.
$fieldLabels = array("FName","LName","Street","City","Postcode","Country","E-mail","Phone");
To get the field name (e.g. when iterating over each label), a function can be applied to the label. For the case of the labels above, the name can simply be derived by removing the hyphen (i.e. -
) and making the label lowercase. For those operations, str_replace() and strtolower() can be used. This logic could be abstracted into a function (or method if a class was defined) and called when necessary:
function GetFieldNameFromLabel($label) {
return str_replace('-', '', strtolower($label));
}
Then when checking if all field have been completed, that function can be called. The labels can be iterated over, to check if there is a non-empty value in the POST data (i.e. $_POST
) - if so, store such a value in an array (e.g. $validValues
).
$validValues = array();
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
if (!empty($_POST[$fieldName])) {
$validValues[$fieldName] = $_POST[$fieldName];
}
}
Then the condition for adding the entry in the XML can simply be whether the number of values in that array of valid values is the same as the number of labels:
if (count($validValues) == count($fieldLabels)) {
//store values from $validValues in XML
}
Then for generating the form, the fields can be iterated over, and the error message can be added conditionally. One could even conditionally add the error message container (i.e. <span class="error">
). Some may argue this logic should be separated from the HTML - that could be achieved using a template system (e.g. Smarty, Symfony Twig, etc.) - that could also be used for the display of existing data.
<form action="" method="post">
<?php
foreach($fieldLabels as $fieldLabel) {
$fieldName = GetFieldNameFromLabel($fieldLabel);
$error = '';
if ($_SERVER["REQUEST_METHOD"] == "POST" && !array_key_exists($fieldName, $validValues)) {
$error = "Fill in ".$fieldName;
}
echo "<p>$fieldLabel:</p>";
echo '<input type="text" name="'.$fieldName.'"/><span class="error">'.$error.'</span>';
}
edited 33 mins ago
answered Nov 11 '17 at 13:25
Sᴀᴍ OnᴇᴌᴀSᴀᴍ Onᴇᴌᴀ
9,80162165
9,80162165
add a comment |
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f180151%2faddress-form-validation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
I changed the title so that it describes what the code does per site goals: "State what your code does in your title, not your main concerns about it.". Feel free to edit and give it a different title if there is something more appropriate.
$endgroup$
– Sᴀᴍ Onᴇᴌᴀ
10 mins ago