Странное поведение JavaScript, PHP и Google Maps - PullRequest
0 голосов
/ 31 марта 2011

Я ломаю свой мозг в этой ситуации:)

У меня есть форма:

<form method="post" action="">
   <input type="hidden" name="entered_markers"
   value="<script type='text/javascript'> document.getElementById('rout_markers').value; </script>" />
 <input type="submit" value="Enter the trees you saw!" />
</p>
</form>

Как вы можете видеть, enter_markers пытается передать некоторые переменные JavaScript.

Когда я обрабатываю запрос, я делаю это

$chosen_markers = $_POST['entered_markers'];

Тогда странная часть:)

if ( empty ($chosen_markers) || !isset($chosen_markers) )  {
      $errors[] = 'Please click on the map to select spots where you spotted these tree. Markers: '.$chosen_markers;
} else {
   // Set something to signify that things are ok
}

И всегда у меня получалось, что валидация считала, что ввод не пустой, но когда я пытался использовать эту переменную $ rout_markers, в ней просто ничего не было.

Где я здесь не так? Разве это не странная вещь, которая происходит? :)

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

Заменить $rout_markers на $chosen_markers

1 голос
/ 31 марта 2011

Попробуйте, создав функцию JavaScript в своей голове и передайте форму в качестве параметра для анализа ее полей ввода. Я продолжил и создал фиктивное текстовое поле с именем «rout_markers» и присвоил ему значение 300. Поэтому на вашей стороне PHP, если вы ищете $_POST['entered_markers'], это будет равно 300, если вы будете использовать пример ниже:

<html>
<head>
<script type='text/javascript'>
    function submitCoor(form){
        form['entered_markers'].value = document.getElementById('rout_markers').value;
    }
    </script>
</head>
<body>
<input type='text' value='300' id='rout_markers' />
<form method="post" action="test.php" onsubmit="submitCoor(this)">
    <input type="hidden" name="entered_markers"
    value="" />
    <input type="submit" value="Enter the trees you saw!" />
</form>
</body>
</html>
1 голос
/ 31 марта 2011

Код ниже, вероятно, объяснит, что вы могли делать неправильно.

$errors = array();

if (
    isset($_POST['entered_markers']) // make sure the variable is available
) {

    if (
        is_string($_POST['entered_markers']) // make sure the data type is string (could be array when form is manipulated)
    ) {

        $markers = trim($_POST['entered_markers']); // trim whitespace and store it in a var

        if ($markers !== "") { // if the string is NOT empty

            echo "Input given!";
            // At this point you could add some more validation to check whether the given input is also what you expect it to be.
            // Preform a regexp for lat/lng for example.
            echo $markers;

        } else {
            $errors[] = "Parameter 'entered_markers' is empty.";
        }

    } else {
        $errors[] = "Parameter 'entered_markers' is not a string.";     
    }

} else {
    $errors[] = "Parameter 'entered_markers' is not found.";
}

print_r($errors);
1 голос
/ 31 марта 2011

Попробуйте это:

<form method="post" action="" onsubmit="document.getElementById('entered_markers').value = document.getElementById('rout_markers').value;">
    <p>
        <input type="hidden" name="entered_markers" id="entered_markers" value="" />
        <input type="submit" value="Enter the trees you saw!" />
    </p>
</form>

Изменить: и заменить $rout_markers на $chosen_markers, как предложено webarto.

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