Почему я не могу получить переменные переключателей? - PullRequest
1 голос
/ 08 июня 2011

Не уверен, в чем проблема ... он возвращается со значением "1" для переменных формы вместо значения, введенного в форму пользователем. Откуда он получает "1" и как мне это исправить?

<html>

<head>
<title>Feedback Form</title>
<!-- Modified by: Student Name -->
<!-- The page should accept user input in form values, then, after the form
 is submitted, hide the form and reveal a confirmation message using
 the data entered into the form elements. -->


</head>

<body>
<h1 align="center">We Need You!</h1>
<h2 align="center">Please provide us with your valuable feedback!</h2>
<hr>

<?php
if (!(isset($myName) || isset($myAge) || isset($myFav) || isset($myComments)))
    {
$myName = "anonymous";
$myAge = "unspecified";
$myFav = "unspecified";
$myQuestion = "unspecified";
}

$mySubmit = isset($_POST['btnSubmit']);
?>

<form name="frmFeedback" id="frmFeedback" action="sendFeedback.php" method="post" 
<?php if ($mySubmit == "Send Feedback!") { echo ' style="display: none"'; } ?>>
Name: <input type="text" name="txtName">
<br>
<br>
Age: <select name="mnuAge">
    <option value="youth">Youth</option>
    <option value="teen">Teen</option>
    <option value="adult">Adult</option>
    <option value="senior">Senior</option>
 </select>
<br>
<br>
What was your favorite page?
<br>
<input type="radio" name="radFav" value="ASP tutorial">ASP Tutorial
<br>
<input type="radio" name="radFav" value="JavaScript tutorial">JavaScript Tutorial
<br>
<input type="radio" name="radFav" value="PHP tutorial"> PHP Tutorial
<br>
<br>
Which pages did you visit?
<br>
<input type="checkbox" name="chkView[]" value="ASP tutorial">ASP Tutorial
<br>
<input type="checkbox" name="chkView[]" value="JavaScript tutorial">JavaScript Tutorial
<br>
<input type="checkbox" name="chkView[]" value="PHP tutorial"> PHP Tutorial
<br>
<br>
Do you have any additional scripting questions?
<br>
<textarea name="txaQuestions" wrap="soft" cols="50" rows="10">
</textarea>
<br>
<br>
<input type="submit" name="btnSubmit" value="Send Feedback!">
</form>
<?php

//Once the form elements have been filled in, extract data from form and store in 
//variables
$myName = $_POST['txtName'];
$myAge = $_POST['mnuAge'];
$myFav = $_POST['rdFav'];
$myQuestion = $_POST['txaQuestions'];     

if ($mySubmit == "Send Feedback!")
{
//hide form
//$myFormDisp = "none";

//display message
print("<h3 align='center'>Thank you!!</h3>");
print("Hello, ".$myName."!");
print("Thank you very much for your feedback on our tutorial site.");
print("The ".$myAge." age group is one of our most critical market segments,")
    print("so we really appreciate the time you took to fill out our form. ");
print("Active web visitors like yourself are what make these pages possible. ");
print("We are very glad you enjoyed the ".$myFav." page.");

if (isset($_POST['chkView'])) 
  {
    print(", and hope that you found the other pages you viewed (");
    foreach($_POST['chkView'] as $myView)
     {
        print("".$myView.", ");
     }
    print("etc.) to be just as helpful.");
  }
else
  {
print(". The next time you visit we hope you have a chance to view");
print("our other tutorials also.</p>");
  }

print("<p>We will respond to your question: \"".$myQuestion."\" ");
    print("just as soon as we can</p>");

print("<h3 align='center' Thanks for stopping by!</h3>");
  }
else
{
//set form to display
//$myFormDisp = "block";
}

?>

</body>
</html>

Ответы [ 6 ]

2 голосов
/ 08 июня 2011

isset возвращает логическое значение (представленное как 1 или 0 в строке), 1 (true), если переменная установлена, 0 (false), если это не так.

Таким образом, когда вы делаете это:

//Once the form elements have been filled in, extract data from form and store in 
//variables
$myName = isset($_POST['txtName']);
$myAge = isset($_POST['mnuAge']);
$myFav = isset($_POST['rdFav']);
$myQuestion = isset($_POST['txaQuestions']);

Вы устанавливаете все переменные на 1, если они установлены, или на 0, если нет.

Вы можете исправить код следующим образом:

//Once the form elements have been filled in, extract data from form and store in 
//variables
if(isset($_POST['txtName']) {
   $myName = $_POST['txtName'];
};
// etc
1 голос
/ 08 июня 2011

Не должны ли эти переменные:

$myName = isset($_POST['txtName']);
$myAge = isset($_POST['mnuAge']);
$myFav = isset($_POST['rdFav']);
$myQuestion = isset($_POST['txaQuestions'])

Будь этим:

$myName = $_POST['txtName'];
$myAge = $_POST['mnuAge'];
$myFav = ['rdFav'];
$myQuestion = $_POST['txaQuestions'];

В противном случае вы просто сохраняете, были ли они установлены, а не их значения.

0 голосов
/ 08 июня 2011

Вместо

while (!(isset($myName) || isset($myAge) || isset($myFav) || isset($myComments)))
    {
$myName = "anonymous";
$myAge = "unspecified";
$myFav = "unspecified";
$myQuestion = "unspecified";
}

Что не так, поскольку зацикливание не происходит, и почему вы проверяете, установлено ли сейчас, а затем делаете это позже?

Вы можете простоuse:

$myName = isset($_POST['txtName']) ? $_POST['txtName'] : 'anonymous';
$myAge = isset($_POST['mnuAge']) ? $_POST['mnuAge'] : 'unspecified';
$myFav = isset($_POST['radFav']) ? $_POST['radFav'] : 'unspecified';
$myQuestion = isset($_POST['txaQuestions']) ? $_POST['txaQuestions'] : 'unspecified';

Как заявили другие пользователи, isset возвращает логическое значение (true / false, но также 1/0), и это 1, которую вы получаете вместо фактической переменной $ _POST.

0 голосов
/ 08 июня 2011

Вы делаете две вещи неправильно (while и isset), которые, вероятно, можно исправить и упростить с помощью этого подхода:

// Prepare defaults for unset fields:
$defaults = array(
  "myName" => "anonymous",
  "myAge" => "unspecified",
  "myFav" => "unspecified",
  "myQuestion" => "unspecified"
);

// make local variables
extract(array_merge($defaults, array_intersect_key(array_filter($_POST), $defaults)));
# $myName, $myAge, ...

Это позволяет избежать теста isset, на который вы наткнулись,и извлекает только четыре переменные из POST, которые вас действительно интересуют (и также применяются значения по умолчанию).

0 голосов
/ 08 июня 2011
$myName = isset($_POST['txtName']);

Возвращает 1, потому что isset() возвращает логическое значение; 1, если значение установлено, и 0 (TRUE или FALSE в виде строки), если значение не установлено, как указано в руководстве:

Возвращает TRUE, если var существует и имеет значение, отличное от NULL, иначе FALSE.

Попробуйте использовать:

if (isset($_POST['txtName'])) {
    $myName = $_POST['txtName'];
}
0 голосов
/ 08 июня 2011

isset() проверяет, существует ли значение. Чтобы получить реальное значение, вам просто нужно сделать такие операторы, как $var = $_GET['var'];.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...