Что не так с проверкой формы PHP / JavaScript? - PullRequest
0 голосов
/ 13 апреля 2011

Я не уверен, что у меня проблема с JavaScript или с PHP.

Моя цель: проверить простую форму «да нет» с помощью JavaScript, затем обработать ее с помощью PHP и отобразить сообщение.

Моя проблема: когда JavaScript включен, и я нажимаю переключатель и отправляю его, PHP не выводит «ДА, статус проверен». Вместо этого он обновляет страницу (т. Е. Я думаю, что он просто отправляет форму в user_agreement4.php и больше ничего не делает). Когда JavaScript отключен, я нажимаю переключатель «YES» и отправляю его, появляется сообщение «Статус YES проверен». Обратите внимание, что приведенный ниже код предназначен для user_agreement4.php. Форма будет отправлена ​​сама себе.

Что я делаю не так?

Обратите внимание, что это незаконченный код - я еще не добавил такие вещи, как куки, перенаправление и т. Д.

Также у меня есть вопрос о выборе ответов. Могу ли я выбрать более одного ответа в качестве ответа?

<?php
// Set variables
$selected_radio = 'test';
session_start(); // start up your PHP session!

// The below code ensures that $dest should always have a value.
if(isset($_SESSION['dest'])){
    $dest = $_SESSION['dest'];
}

// Get the user's ultimate destination
if(isset($_GET['dest'])){
    $_SESSION['dest'] = $_GET['dest'];   // original code was $dest = $_GET['dest'];
    $dest = $_SESSION['dest'];          // new code
}
else {
echo "Nothing to see here Gringo."; //Notification that $dest was not set at this time (although it may retain it's previous set value)
}

// Show the terms and conditions page
//check for cookie

if(isset($_COOKIE['lastVisit'])){
        /*    
        Add redirect >>>> header("Location: http://www.mywebsite.com/".$dest);      <<This comment code will redirect page
         */
        echo "aloha amigo the cookie is seto!";
        }
else {
    echo "No cookies for you";
    }
//Checks to see if the form was sent

if (isset($_POST['submitit'])) {
//Checks that a radio button has been selected
    if (isset($_POST['myradiobutton'])) {
        $selected_radio = $_POST['myradiobutton'];
    //If No has been selected the user is redirected to the front page. Add code later
            if ($selected_radio == 'NO') {
                echo "NO status checked"; 
            }
    //If Yes has been selected a cookie is set and then the user is redirected to the downloads page. Add cookie code later
            else if ($selected_radio == 'YES') {
                echo "YES status checked";
                // header("Location: http://www.mywebsite.com/".$dest);
            }
    }
}

?>

<HTML>
  <HEAD>
    <TITLE>User Agreement</TITLE>
    <script language="javascript">
function valbutton(thisform) {
// validate myradiobuttons
myOption = -1;
for (i=thisform.myradiobutton.length-1; i > -1; i--) {
if (thisform.myradiobutton[i].checked) {
myOption = i;
}
}
if (myOption == -1) {
alert("You must choose either YES or NO");
return false;
}
if (myOption == 0) {
alert("You must agree to the agreement to download");
return false;
}
thisform.submit(); // this line submits the form after validation
}
</script>

  </HEAD>
  <BODY>
    <H1> User Agreement </H1>
    <P>Before downloading you must agree to be bound by the following terms and conditions;</P>
<form name="myform" METHOD ="POST" ACTION ="user_agreement4.php"> 
<input type="radio" value="NO"  name="myradiobutton" />NO<br />
<input type="radio" value="YES" name="myradiobutton" />YES<br />
<input type="submit" name="submitit" onclick="valbutton(myform);return false;" value="ANSWER" />
</form>




  </BODY>
</HTML>

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

См. Эту строку:

if (isset($_POST['submitit'])) {

Если пользователь нажимает кнопку submitit и javascript отключен, все работает должным образом - кнопка вставляет свою пару имя / значение в опубликованные данные непосредственно передформа публикуется, поэтому устанавливается $_POST['submitit'].

Если, однако, javascript включен, кнопка сама не запускает обратную передачу, вместо этого она вызывает функцию javascript, которая отправляет форму.К сожалению, хотя, когда вы вызываете form.submit(), он не будет искать кнопки и добавлять их пары имя / значение в опубликованные данные (по разным причинам).Таким образом, вам нужно найти другой способ сказать, обрабатываете ли вы постбэк;Самый простой способ - просто вставить в форму скрытое поле и проверить это, например:

(в части HTML, где-то внутри <form></form>):

<input type="hidden" name="is_postback" value="1" />

...и затем измените вашу проверку PHP на:

if ($_POST['is_postback'] == '1')
1 голос
/ 13 апреля 2011

Измените свой javascript на:

function valbutton(thisform) {
// validate myradiobuttons
myOption = -1;
for (i=thisform.myradiobutton.length-1; i > -1; i--) {
if (thisform.myradiobutton[i].checked) {
myOption = i;
}
}
if (myOption == -1) {
alert("You must choose either YES or NO");
return false;
}
if (myOption == 0) {
alert("You must agree to the agreement to download");
return false;
}
return true; // this line enables the form to submit as normal and is not actually required
}

И удалите «return false;»от события нажатия кнопки.Наличие функции проверки, возвращающей false при сбое проверки, достаточно, чтобы остановить проверку от.

Это должно позволить вашему php работать как есть.

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