Перенаправление страниц с PHP вызывает проблемы - PullRequest
1 голос
/ 21 февраля 2011

У меня есть страница, на которой есть ссылка на страницу php, которая берет данные из $ _GET и обновляет базу данных. После этого он возвращает пользователя на домашнюю страницу с:

header("Location: http://localhost/");

Дело в том, что это, похоже, "прерывает" часть кода mysql. Если я удаляю это перенаправление, все в базе данных обновляется, но когда я возвращаю его обратно, ничего не обновляется ...

Это код обновления базы данных, я использую мой класс в качестве оболочки MySQL:

$conn->where('hash',$data1['hash']);
$conn->update(TABLE_ITEMS,$newData1);

$conn->where('hash',$data2['hash']);
$conn->update(TABLE_ITEMS,$newData2);

Примечания:

- На странице нет текста или эха () и пробела до тега <code><?php

Порядок кодов:

  1. Данные получены от $_SESSION и $_GET
  2. Данные обработаны и помещены в массивы
  3. Данные помещены в базу данных mysql
  4. header(); используется для перенаправления страницы

код

<?php
require_once('config.php');
import();

if ( isset ( $_GET['g'] ) && isset ( $_SESSION['itemA'] ) && isset ( $_SESSION['itemB'] ) ) {
$itemA = $_SESSION['gameA'];
$itemB = $_SESSION['gameB'];

$newData1 = processData($itemA);
$newData2 = processData($itemB);

$conn->update(TABLE_ITEMS,$newData1);

$conn->update(TABLE_ITEMS,$newData2);

header('Location: http://localhost/');

} else {
    header('Location: http://localhost/');
}

Ответы [ 4 ]

1 голос
/ 21 февраля 2011

Если вы отправите заголовок при выводе ранее содержимого, вы получите ошибку, которая может привести к остановке выполнения вашего скрипта.Таким образом, если заголовок находится выше обновления, обновление может вообще не выполняться.От ваших настроек зависит, видите ли вы эту ошибку или нет.

<?
echo 'yo';
header('Location: ....'); // <-- error

Update(); // Never gets executed

Выходные данные не обязательно должны быть echo.Это может быть даже один пробел перед открытием <?.

0 голосов
/ 21 февраля 2011

Понятия не имею, почему это сработало, но оказалось, что если я изменю это:

header("Location: http://localhost/");

к этому:

header('Location: http://localhost/');

все работает. Weird !!

0 голосов
/ 21 февраля 2011

Попробуйте поставить ob_start () в верхней части файла.Это иногда помогает.Вы не можете выводить перед вызовом header ().Показать больше кода.Меньше думать о том, что не так.

0 голосов
/ 21 февраля 2011

Не видя большую часть кода, трудно быть уверенным, но я предполагаю, что страница PHP продолжает работать именно так, как это было раньше. Я мог бы предположить, что это может произойти из-за того, что перенаправленная страница (то есть ваша домашняя страница) сама выполняет некоторую работу с базой данных, которая перезаписывает изменения, которые были сделаны исходной страницей.

Как я уже сказал, это довольно дикое предположение в отсутствие какого-либо кода (или даже каких-либо подробностей о рассматриваемых данных или о том, что делает сайт), но я бы сказал, что стоит изучить эту возможность.

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