Невозможно установить переменную из $ _POST - PullRequest
0 голосов
/ 15 октября 2011

Я не могу установить переменную из массива записей.

У меня есть простая форма со скрытым полем: <input name="sid" type="hidden" id="sid" value="<?=$sid?>">

Это скрытое поле отправляется во второй файл (exec.php), где у меня есть следующий код:

$sid = $_POST['sid'];

По какой-то причине при попытке установить $ sid он получает значение NULL.Для хаха я запустил следующее:

foreach($_POST as $var => $value)
{
echo $var . ' : ' . $value . "<br>";
}

Это дало правильное значение 1938 для sid.Я смотрел на это в течение 3 часов и не могу найти, что происходит.Я ожидаю чего-то чрезвычайно глупого ... какие-нибудь мысли?


Вот форма на enter.php

    <form name="form1" method="post" action="exec.php">
     <input name="sid" type="hidden" id="sid" value="<? echo($sid); ?>">
     <input name="ticket_totals" type="hidden" id="ticket_totals" value="<?=$ticket_totals?>">
     <input name="emp" type="hidden" id="emp" value="<?=$emp?>">
     <input name="submit" type="submit" id="submit" value="Submit">
     <input type="submit" name="submit" id="submit" value="Close">
    </form>

Вот вывод POST на exec.php: type: Other ticket_totals: 0 emp: 105 sid: 1939 submit:Отправить


Хорошо - это был плохой синтаксис с моей стороны, но теперь мне любопытно, почему.

Я пропустил кавычки - решение так просто: $sid = $ _POST ["sid"]

Теперь это работает как чемпион.

Кто-нибудь спрашивает, почему?Я предполагаю, что в php.ini есть настройка, которая требует кавычек.Как ни странно, у меня есть другие переменные, вызванные из массива POST, для которых я не использую кавычки, и они работают нормально ...

Ответы [ 4 ]

3 голосов
/ 15 октября 2011

Используйте Console в FireBug , чтобы проверить запрос POST, чтобы увидеть, что является отправляемым значением sid.

Если значение sid в запросе в порядке, используйтеvar_dump($_POST["sid"]); чтобы увидеть результаты на сервере.

EDIT : считается хорошим стилем PHP использовать кавычки при доступе к ассоциативному массиву, поскольку ключи без кавычек неотличимы от констант:

define('myVar',3);
echo $array[myVar]; // retrieves $array[3], not $array['myVar'];
1 голос
/ 15 октября 2011

Попробуйте повторить $sid вместо <?=:

// Change that
<input name="sid" type="hidden" id="sid" value="<?=$sid?>">

// With that
<input name="sid" type="hidden" id="sid" value="<?php echo $sid; ?>">

также во время теста попробуйте изменить тип ввода со скрытого на текстовый, чтобы на 100% быть уверенным, что $sid содержит значение.

0 голосов
/ 20 мая 2015

У меня была такая же проблема, когда я пытался использовать $ _POST [sid] в качестве переменной.Я думаю, что «sid» является зарезервированным или ограниченным именем переменной, потому что я изменил свою переменную на $ _POST [snid], и она работала просто отлично.Это был мой код

$sid = $_POST[sid];
$recipient = "($sid) ($_POST[sid])";
if ($_POST[sid] > 0)
{
    $recipient = "It Worked";
}
print $recipient;

Когда я отправил "& sid = 15", результат был:

() (15)

Невероятно.Невозможно, верно?Все, что я сделал, перешел от использования «sid» в качестве индекса к «snid», и это не сработало.

Итак, никогда не используйте $ _POST [sid].

0 голосов
/ 15 октября 2011

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

...