PHP: регистр $ _SESSION - PullRequest
       0

PHP: регистр $ _SESSION

2 голосов
/ 22 декабря 2011

У меня проблема с этим кодом, и я не могу понять, где проблема.Поэтому, когда я запускаю этот код: if $row["count"] > 0 запускается блок else и устанавливается $_SESSION["error"].

Когда выполняется запрос $row["count"] == 0 и новая строка вставляется в базу данных, но установлены и $_SESSION["save"], и $_SESSION["error"]!Означает ли это, что выполняются операторы if и else?Это не имеет никакого смысла для меня ...

$stmt = $pdo->prepare("SELECT COUNT(*) AS count ... QUERY");
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if( $row["count"] == 0 ){
        $stmt = $pdo->prepare("INSERT...QUERY");
    $stmt->execute();
    $_SESSION["save"] = "Saved";
    header("Location:index.php");
    exit();
}else{
    $_SESSION["error"] = "Error";
    header("Location:index.php");
    exit();
}

Я использую этот код в index.php

$save = (isset($_SESSION["save"]))? $_SESSION["save"] : false;
$error = (isset($_SESSION["error"]))? $_SESSION["error"] : false;
unset($_SESSION["error"]);
unset($_SESSION["save"]);

Как я уже сказал, когда $row["count"] == 0 у меня есть$save и $error set ..

решено
Кажется, я обнаружил проблему.Я изменил способ доступа к сценарию с:

<a href='script.php?id=10'><input type="button" value='Go to script' /></a>

на:

<a href='script.php?id=10'>Go to script</a>

И сценарий работает.С тегом кнопки ввода внутри тега скрипт вел себя непредсказуемо, выполняя оператор if и else в одно и то же время. Я все еще не понимаю, почему и как тег ввода вызвал это, но, по крайней мере, скрипт работаетсейчас ...

Ответы [ 4 ]

2 голосов
/ 22 декабря 2011

Вы очищаете $_SESSION["error"] и $_SESSION["save"] после того, как они были прочитаны в index.php?Для меня это звучит так, как будто вы однажды столкнулись с обоими случаями и в массиве $_SESSION остались значения.

Я предлагаю использовать одно и то же имя переменной для обоих случаев, например, $_SESSION['save'], и назначить либо success или error к нему.Таким образом, вам не нужно проверять, существует ли одна из двух переменных, а только то, каково ее содержимое.

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

1 голос
/ 22 декабря 2011

Например, при попытке этого, если на этапе $row["count"] > 0 сеанс будет записывать $_SESSION["error"]. Он будет сохранен, если вы не удалите его. Из-за этого $_SESSION["error"] установлено.

0 голосов
/ 22 декабря 2011

Согласно вашей логике, невозможно одновременно выполнить оба условия. Тем не менее, я уверен, что вы запускали этот скрипт несколько раз. Иногда с IF, иногда с ELSE. Не похоже, что вы когда-либо очищали переменные $ _SESSION.

Решение: Сразу после того, как вы используете переменные $ _SESSION ['save'] или $ _SESSION ['error'], удалите их.

unset($_SESSION['save']);

или

unset($_SESSION['error]');
0 голосов
/ 22 декабря 2011

Возможно, вы выполнили свой код дважды, и ["error"] все еще было установлено. Вы не очищаете это на успехе.

...