PHP Form $_POST['button'] always false [closed] - php

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 5 months ago.
Improve this question
I'm trying to get submit form event to update a field. I found a test code on internet and that's worked. But when I change the button name for my button nothing happens, and the if always returns false to my button and I have no idea what i'm doing wrong.
Example code works:
<form action="" method="POST">
<input type="submit" name="add" Value="Call Add fun">
<input type="submit" name="sub" Value="Call Sub funn">
<?php echo #$a; ?>
<?php
if(#$_POST['add'])
{
function add()
{
$a="You clicked on add fun";
echo $a;
}
add();
} else if (#$_POST['sub']) {
function sub()
{
$a="You clicked on sub funn";
echo $a;
}
sub();
}
?>
I've tried some variations with if (isset($_POST["course_submit_btn"])) but again nothin happens.
I don't know if it has any interface, but the page url is "panel/create-course/?course_ID=3493/"
My page https://www.file.io/c0pn/download/C1kmP2TblfcU

<form action="" method="POST">
<input type="submit" name="add" Value="Call Add fun">
<input type="submit" name="sub" Value="Call Sub fun">
<?php
if(isset($_POST['add'])) {
add();
} else if (isset($_POST['sub'])) {
sub();
}
function add() {
echo "You clicked on add fun";
// todo: more meaningful functionality
}
function sub() {
echo "You clicked on sub fun";
// todo: more meaningful functionality
}
?>
Your code should work, however there are some tips, you should stick to:
Use consistent code styling (spaces, brackets etc),
Use more meaningful names, in a few days you won't know what variable $a is for
Don't put functions within if sections

Related

HTML Form with PHP: $_POST is not setting on submit [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 2 years ago.
Improve this question
Background:
I have looked through the variations on this question and solutions, but I have not found one that applies to my situation. I know I'm most likely overlooking something incredibly obvious, but it's been hours and I can't for the life of me pinpoint what it is. I'm following along with this tutorial but making it my own: https://www.taniarascia.com/create-a-simple-database-app-connecting-to-mysql-with-php/.
What happens: When I click the submit button, nothing happens. I see "not set" displayed on the screen when the page loads and after clicking submit, so I know I'm in my else block, which means $_POST is not being set.
What I expect to happen: I expect to see "not set" on page load, but then once I have filled out the form and clicked submit, I expect to see "set" in my echo statement to indicate that I'm in my if statement and isset($_POST['submit']) is true/successful, followed by "Success" indicating that the try code block was successful, plus the values I entered in the form fields appearing in the database. For now, though, I'd just be happy if I got that first "set" to display.
I have tried: I've tried breaking out the php into a separate file and linking it up to the form via action="thatfile.php", but I get the same result. I've also tried using "get" instead of "post" for the method and $_REQUEST instead of $_POST, but again, same outcome - "not set" displayed, no data in the db.
Here is my code:
<?php
if (isset($_POST['submit'])) {
require "../config.php";
echo "set";
try {
$connection = new PDO($dsn, $username, $password, $options);
$new_item = array(
"luggage" => $_POST['luggage'],
"category" => $_POST['category'],
"item" => $_POST['item'],
"description" => $_POST['description']
);
$sql = sprintf(
"INSERT INTO %s (%s) values (%s)",
"stuff",
implode(", ", array_keys($new_item)),
":" . implode(", :", array_keys($new_item))
);
$statement = $connection->prepare($sql);
$statement->execute($new_item);
echo "Success";
} catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
}
} else {
echo "not set";
}
?>
<?php include "header.php"; ?>
<h1>Add An Item</h1>
<form method="post">
<label for="item">Luggage</label>
<input type="text" name="luggage" id="luggage"></form>
<label for="item">Category</label>
<input type="text" name="category" id="category"></form>
<label for="item">Item</label>
<input type="text" name="item" id="item"></form>
<label for="description">Description</label>
<input type="text" name="description" id="description">
<input type="submit" name="submit" value="submit">
</form>
Back to home
<?php include "footer.php"; ?>
You are closing the form </form> multiple times before the final end of the form </form> so the submit is not in the form. Remove these:
<label for="item">Luggage</label>
<input type="text" name="luggage" id="luggage"></form> ***HERE***
<label for="item">Category</label>
<input type="text" name="category" id="category"></form> ***HERE***
<label for="item">Item</label>
<input type="text" name="item" id="item"></form> ***HERE***

$_post variable foreach loop logic problem [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 2 years ago.
Improve this question
This code should check the input if it's found in the array, but it does not. It just works for the first index [0]
<?php
$array = array(
"joe",
"sarah",
"jaison",
"klai",
"hanna"
);
if ($_POST){
foreach($array as $value){
echo $value;
if($_POST["name"] == $value){
echo "yeb,i know him !";
break;
} else {
echo "i dont know him";
break;
}
}
}
?>
<p>please enter a name</p>
<form method="post">
<input name="name" type="text">
<input type="submit" value="go!">
1.Use in_array() instead of foreach()
2.Directly check posted name is empty or not.
3.Remove break;
<?php
$array=array("joe","sarah","jaison","klai","hanna");
if(!empty($_POST['name'])){
// add true as 3rd parameter to in_array if you want to check types as well
if(in_array($_POST['name'] ,$array)){
echo "yeb,i know him !";
}else{
echo "i dont know him";
}
}
?>
<p>please enter a name</p>
<form method="post">
<input name="name" type="text">
<input type="submit" value="go!">
Sample output:- https://3v4l.org/VObsX AND https://3v4l.org/HWkU1
You dont have to use a foreach loop here. There is a function in_array that checks if an value is present in an array. Look at this example:
$array = array("joe", "sarah", "jaison", "klai", "hanna");
if (isset($_POST['name'])) {
if( in_array ($_POST["name"], $array) ) {
echo "yeb,i know him !";
} else {
echo "i dont know him";
}
}
?>
<p>please enter a name</p>
<form method="post">
<input name="name" type="text">
<input type="submit" value="go!">
</form>
You can use in_array() function for it. Like this way:
$array=array("joe",
"sarah",
"jaison",
"klai",
"hanna");
if ($_POST){
if(in_array( $_POST["name"], $array )){
echo "yeb,i know him !";
}
else{
echo "i dont know him";
}
}

php if else not working in this scenario [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 5 years ago.
Improve this question
I wrote a code such that if I fill all fields of form and I submit then I should get "Ok"
and if I left the form blank then I should get "Please fill all fields".
I am not getting any errors so I am confused how to proceed .
<?php
if(isset($_POST['submit_text']) && isset($_POST['find_word']) && isset($_POST['replaced_word'])){
$sub_text = $_POST['submit_text'];
$fin_text = $_POST['find_word'];
$rep_text = $_POST['replace_word'];
if(!empty($sub_text )&& !empty($fin_text) && !empty($rep_text)){
echo "Ok.";
}else{
echo "Please fill all fields.";
}
}
?>
<html>
<head>
</head>
<body>
<form id="myForm" name="myForm" action="index.php" method="post" >
<p>
Submit Text<br/>
<textarea rows="5" cols="40" type="text" id="submit_text" name="submit_text" ></textarea>
</p>
<p>
Find<br/>
<input id="find_word" name="find_word" type="text" />
</p>
<p>
Replace<br/>
<input id="replace_word" name="replace_word" type="text" />
</p>
<input id="submit" name="submit" type="submit" value="Submit" />
</form>
</body>
</html>
For any query please comment below.
you have missed few characters here
isset($_POST['replaced_word'])
you have to use same name you use in input field.like this
isset($_POST['replace_word'])
Your first "if" needs an "else", I think it would trigger that in your scenario.
I generally try separating these, and do not put them into one large IF..
for example, I would do an if isset and else on each one separately, converting to a different variable accordingly before doing the rest of the logic.
In the first if, you wrote "replaced_word", but the name of the input tag is "replace_word" without the "d". So $_POST['replaced_word'] is never set so that's why it's not working.

Simple PHP quiz using a text box input

I'm looking to implement a very simple quiz using PHP which I'm struggling to find any other examples of to copy. I'm open to various solutions but the requirements are as follows:
Quiz takes place on a single page;
One questions appears at a time, and the user can only see the next question when they correctly answered the current one;
All question types are 'short answer', with users needing to input the correct answer in a text box.
I have been attempting to find a solution using PHP conditional statements (if/else) based on a users answers and my current code looks like this:
<form method="POST" action="">
<label for="question01">1. How many sides does a triangle have?</label>
<input type="text" name="guess01" value="">
<input type="submit">
</form>
<?php
// Process Question 1 Form
$guess01 = $_POST['guess01'];
$guess01 = strtolower($guess01);
$answer01 = "three";
if ($guess01 == $answer01)
{
?>
<p>Correct answer given for question 1!</p>
<form method="POST" action="">
<label for="question02">2. How many sides does a square have?</label>
<input type="text" name="question02" value="" placeholder="Answer here...">
<input type="submit">
</form>
<?php
// Process Question 2 Form
$guess02 = $_POST['guess02'];
$guess02 = strtolower($guess02);
$answer02 = "four";
if ($guess02 == $answer02)
{
?>
<p>Correct answer given for question 2!</p>
<form>
<label for="question02">3. How many sides does a pentagon have?</label>
<input type="text" name="question02" value="" placeholder="Answer here...">
<input type="submit">
</form>
<?php
// Process Question 2 Form
$guess03 = $_POST['guess02'];
$guess03 = strtolower($guess02);
$answer03 = "five";
if ($guess03 == $answer03)
{
?>
<p>Correct answer given for question 3!</p>
<p>Quiz completed!</p>
<?php
}
elseif (empty($guess03))
{
echo "<!-- No Answer Given -->";
}
else
{
echo "<p>Try Again!</p>";
}
?>
<?php
}
elseif (empty($guess02))
{
echo "<!-- No Answer Given -->";
}
else
{
echo "<p>Try Again!</p>";
}
?>
<?php
}
elseif (empty($guess01))
{
echo "<!-- No Answer Given -->";
}
else
{
echo "<p>Try Again!</p>";
}
?>
I'm sure this is very inefficient coding and I'm open to other ways of tackling this. Any help would be very gratefully received. Thank you.
As the form and the validation of your questions are always same only the data changes, you do not need to copy the code. Just put questions and answers in an array and put the number of the current questions in your form.
// Declare all your questions and answers as multi dimensional array
$questionsAndAnwsers = array(array("question" => "1. How many sides does a triangle have?", "answer" => "three"),
array("question" => "2. How many sides does a square have?", "answer" => "four"));
// current question
$currentQuestion = 0;
if(isset($_POST["currentQuestion"])){
$currentQuestion = $_POST["currentQuestion"];
if($_POST["guess"] == $questionsAndAnwsers[$currentQuestion]["answer"]){
// answer was correct, increment your question-counter for the next question
$currentQuestion++;
// print success message
} else {
// question was wrong, counter stays as it is, so same question will be printed
// print failure message
}
}
?>
<form method="POST" action="">
<label for="question"><?php echo ($currentQuestion+1).". ". $questionsAndAnwsers[$currentQuestion]["question"];?></label>
<input type="hidden" name="currentQuestion" value="<?php echo $currentQuestion;?>">
<input type="text" name="guess" value="">
<input type="submit">
</form>
<?php
You have to add a additional if-clause, for the case all questions has been answered.
EDIT:
This is a simple Implementation and it is easy to cheat. As the question number is passed to the browser, the user can alter it (setting it to 9). To close this whole, you have to use session and save the number of the last correct answer in the session on the server.

php isset($_post) is not working? [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 8 years ago.
Improve this question
I am working with this issue since last few hours and also searched the related questions on stack overflow. I have a simple html form
<form name="user_verification" action="action.php" method="POST">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" name="submit" value="submit">
</form>
and here is the php script in action.php file
if(isset($_POST['submit']))
{
echo 'yes';
}else{
echo 'no';
}
It always display "no". I tested my php script using this
if(1==1)
{
echo 'yes';
}else{
echo 'no';
}
In this case, it displays "yes". This means that problem is with isset($_POST['submit']) function but I can't find out the solution. please help in this regard. thanks
For robustness its best to check the method against the request.
This is a simple example of a form processor validating a post request.
if ('POST' === $_SERVER['REQUEST_METHOD']) {
if (!isset($_POST['required_data'])) {
http_send_status(400);
exit;
}
echo 'OK';
}
You will still need to check with isset against the fields you require.
Maybe somewhere $_POST values are emptied/unseted. This may be due to php configuration or as security measure (i.e. http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading). You may check $_REQUEST and also check if you can get $_GET values (method of form is get).
Your code is correct, it's working for me. See this for more info.
In index.php
<form name="user_verification" action="action.php" method="POST">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" name="submit" value="submit">
</form>
in action.php
<?php if(isset($_POST['submit']))
{
echo 'yes';
}else{
echo 'no';
} ?>
The above code will only display the submitted values if the submit button was clicked.
isset( ). This is an inbuilt function that checks if a variable has been set or not. In between the round brackets, you type what you want isset( ) to check. For us, this is $_POST['Submit']. If the user just refreshed the page, then no value will be set for the Submit button. If the user did click the Submit button, then PHP will automatically return a value
$var = '';
// This will evaluate to TRUE so the text will be printed.
if (isset($var)) {
echo "This var is set so I will print.";
}
You may also use the var_dump(isset()); // TRUE
to output the return value of isset().
Your code is correct.
It works only when you submit the form.
So, unless you submit the form, it will always print no.

Categories