2013-02-11 6 views
1

Вот мой код (прошу прощения за длиной):переменных PHP Session возвращающихся пустой

$companyid = $_SESSION["companyid"]; 

$_SESSION["youtubeurl"] = mysql_real_escape_string($_POST["youtubeurl"]); 
$_SESSION["logourl"] = mysql_real_escape_string($_POST["logourl"]); 

$_SESSION["plan1head"] = mysql_real_escape_string($_POST["plan1head"]); 
$_SESSION["plan1description"] = mysql_real_escape_string($_POST["plan1description"]); 
$_SESSION["plan1headline1"] = mysql_real_escape_string($_POST["plan1headline1"]); 
$_SESSION["plan1price1"] = mysql_real_escape_string($_POST["plan1price1"]); 
$_SESSION["plan1headline2"] = mysql_real_escape_string($_POST["plan1headline2"]); 
$_SESSION["plan1price2"] = mysql_real_escape_string($_POST["plan1price2"]); 

$_SESSION["plan2head"] = mysql_real_escape_string($_POST["plan2head"]); 
$_SESSION["plan2description"] = mysql_real_escape_string($_POST["plan2description"]); 
$_SESSION["plan2headline1"] = mysql_real_escape_string($_POST["plan2headline1"]); 
$_SESSION["plan2price1"] = mysql_real_escape_string($_POST["plan2price1"]); 
$_SESSION["plan2headline2"] = mysql_real_escape_string($_POST["plan2headline2"]); 
$_SESSION["plan2price2"] = mysql_real_escape_string($_POST["plan2price2"]); 

$_SESSION["plan3head"] = mysql_real_escape_string($_POST["plan3head"]); 
$_SESSION["plan3description"] = mysql_real_escape_string($_POST["plan3description"]); 
$_SESSION["plan3headline1"] = mysql_real_escape_string($_POST["plan3headline1"]); 
$_SESSION["plan3price1"] = mysql_real_escape_string($_POST["plan3price1"]); 
$_SESSION["plan3headline2"] = mysql_real_escape_string($_POST["plan3headline2"]); 
$_SESSION["plan3price2"] = mysql_real_escape_string($_POST["plan3price2"]); 

$_SESSION["plan1price1type"] = $_POST["plan1price1type"]; 
$_SESSION["plan1price2type"] = $_POST["plan1price2type"]; 
$_SESSION["plan2price1type"] = $_POST["plan2price1type"]; 
$_SESSION["plan2price2type"] = $_POST["plan2price2type"]; 
$_SESSION["plan3price1type"] = $_POST["plan3price1type"]; 
$_SESSION["plan3price2type"] = $_POST["plan3price2type"]; 

mysql_connect("localhost", "name", "password") or die(mysql_error()); 
mysql_select_db("database") or die(mysql_error()); 

$getstats = mysql_query("SELECT * FROM company WHERE companyid = 
'$companyid'"); 

$stats = mysql_fetch_array($getstats); 

$calculaterating = $stats["ratingscore"]/$stats["ratingcount"]; 

if (!$calculaterating) { 

$rating = "None"; 

} else { 

$rating = $calculaterating; 

} 

$usage = $stats["usage"]; 

if(isset($_POST["submitpreview"])) { 

$companyid = $_SESSION["companyid"]; 

$youtubeurl = $_SESSION["youtubeurl"]; 
$logourl = $_SESSION["logourl"]; 

$plan1head = $_SESSION["plan1head"]; 
$plan1description = $_SESSION["plan1description"]; 
$plan1headline1 = $_SESSION["plan1headline1"]; 
$plan1price1 = $_SESSION["plan1price1"]; 
$plan1headline2 = $_SESSION["plan1headline2"]; 
$plan1price2 = $_SESSION["plan1price2"]; 

$plan2head = $_SESSION["plan2head"]; 
$plan2description = $_SESSION["plan2description"]; 
$plan2headline1 = $_SESSION["plan2headline1"]; 
$plan2price1 = $_SESSION["plan2price1"]; 
$plan2headline2 = $_SESSION["plan2headline2"]; 
$plan2price2 = $_SESSION["plan2price2"]; 

$plan3head = $_SESSION["plan3head"]; 
$plan3description = $_SESSION["plan3description"]; 
$plan3headline1 = $_SESSION["plan3headline1"]; 
$plan3price1 = $_SESSION["plan3price1"]; 
$plan3headline2 = $_SESSION["plan3headline2"]; 
$plan3price2 = $_SESSION["plan3price2"]; 

$headlines = $_SESSION["headlines"]; 

$plan1price1type = $_SESSION["plan1price1type"]; 
$plan1price2type = $_SESSION["plan1price2type"]; 
$plan2price1type = $_SESSION["plan2price1type"]; 
$plan2price2type = $_SESSION["plan2price2type"]; 
$plan3price1type = $_SESSION["plan3price1type"]; 
$plan3price2type = $_SESSION["plan3price2type"]; 

mysql_connect("localhost", "name", "password") or die(mysql_error()); 
mysql_select_db("database") or die(mysql_error()); 

$islisted = mysql_query("SELECT * FROM companypage WHERE companyid = '$companyid'"); 

if ($islisted) { 
mysql_query("UPDATE companypage SET 
plan1head = '$plan1head', 
plan1description = '$plan1description', 
plan1price1type = '$plan1price1type', 
plan1headline1 = '$plan1headline1', 
plan1price1 = '$plan1price1', 
plan1price2type = '$plan1price2type', 
plan1headline2 = '$plan1headline2', 
plan1price2 = '$plan1price2', 
plan2head = '$plan2head', 
plan2description = '$plan2description', 
plan2price1type = '$plan2price1type', 
plan2headline1 = '$plan2headline1', 
plan2price1 = '$plan2price1', 
plan2price2type = '$plan2price2type', 
plan2headline2 = '$plan2headline2', 
plan2price2 = '$plan2price2', 
plan3head = '$plan3head', 
plan3description = '$plan3description', 
plan3price1type = '$plan3price1type', 
plan3headline1 = '$plan3headline1', 
plan3price1 = '$plan3price1', 
plan3price2type = '$plan3price2type', 
plan3headline2 = '$plan3headline2', 
plan3price2 = '$plan3price2', 
logourl = '$logourl', 
youtubeurl = '$youtubeurl', 
headlines = '$headlines' 
WHERE companyid='$companyid'") or die(mysql_error()); 

} else { 

mysql_query("INSERT INTO companypage (
companyid, 
    plan1head, 
plan1description, 
plan1price1type, 
plan1headline1, 
plan1price1, 
plan1price2type, 
plan1headline2, 
plan1price2, 
plan2head, 
plan2description, 
plan2price1type, 
plan2headline1, 
plan2price1, 
plan2price2type, 
plan2headline2, 
plan2price2, 
plan3head, 
plan3description, 
plan3price1type, 
plan3headline1, 
plan3price1, 
plan3price2type, 
plan3headline2, 
plan3price2, 
logourl, 
youtubeurl, 
headlines) 

VALUES(
    '$companyid', 
'$plan1head', 
'$plan1description', 
'$plan1price1type', 
'$plan1headline1', 
'$plan1price1', 
'$plan1price2type', 
'$plan1headline2', 
'$plan1price2', 
'$plan2head', 
'$plan2description', 
'$plan2price1type', 
'$plan2headline1', 
'$plan2price1', 
'$plan2price2type', 
'$plan2headline2', 
'$plan2price2', 
'$plan3head', 
'$plan3description', 
'$plan3price1type', 
'$plan3headline1', 
'$plan3price1', 
'$plan3price2type', 
'$plan3headline2', 
'$plan3price2', 
'$logourl', 
'$youtubeurl', 
'$headlines') 
") or die(mysql_error()); 

} 

echo "<script>window.close();</script"; 

} 

По сути, то, что здесь происходит, пользователь имеет страницу, которая есть собственная, который может быть изменен с помощью серии форм, раскрывающихся меню и т. д. Чтобы создать или обновить свою страницу, они заполняют формы и нажимают кнопку предварительного просмотра, которая является target_blank, и появляется новая вкладка для предварительного просмотра того, как будет выглядеть их страница. Все переменные с предыдущей страницы сначала застревают в сеансах для последующего использования. На странице «Предварительный просмотр» находится кнопка обновления. Если им нравится то, что они видят, они нажимают кнопку обновления (таким образом, выполнение «Представление предварительного просмотра» в PHP-коде). Затем PHP-код проверяет, создали ли они страницу или нет, и либо добавляет их в таблицу, либо обновляет свою текущую таблицу на основе переменных.

Вот моя проблема. Все переменные, сеанс или POST отображаются правильно, когда страница предварительного просмотра загружается в первый раз. Однако, когда выполняется предварительный просмотр заявки, и информация хранится в базе данных, сохраняется следующее: companyid хранится как 0, а все остальное хранится как пустое в таблице (хотя оно не должно принимать значения NULL?). , Это справедливо как для вставки, так и для обновления. Поэтому мне кажется, что я делаю что-то не так с моими переменными сеанса (которые загружаются на первой странице из переменных $ _POST, которые, как я знаю, являются правильными, потому что они отображаются прямо на странице предварительного просмотра) неправильно, когда я передаю их обратно нормальным переменным при выполнении submitpreview. Но то, что действительно претит меня, заключается в том, что companyid также не хранится правильно (сохраняется как 0 вместо правильного идентификатора), хотя, когда я повторяю его в других местах, он отображается правильно. Я уверен, что то, что я делаю, - простая глупая ошибка, но я не могу понять.

Спасибо за помощь и извините за длину кода и вопрос.

+1

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. – Kermit

+1

Кажется, очень повторяющаяся установка. Что делать, если вам нужно «plan4», «plan5» и т. Д.?? Почему бы не немного нормализовать ситуацию? –

ответ

2

Если это ваш реальный скрипт, вы еще не подключились к MySQL в то время, когда выполняете все эти вызовы mysql_real_escape_string(). Для работы этой функции необходимо подключить MUST. Прямо сейчас он будет просто возвращать длинную серию логических значений FALSE для обозначения ошибки.

Переведите код подключения к DB в начало сценария, и он должен начать работать лучше. Но, конечно, вы должны перейти на mysqli или PDO, поскольку mysql _ *() устарел.

И, конечно же, НИКОГДА предположить, что операция DB преуспела. Всегда проверяют возвращаемые значения для отказа, например:

$var = mysql_real_escape_string($_POST['var']) or die(mysql_error()); 
               ^^^^^^^^^^^^^^^^^^^^^^ 

должен был показать вам, в чем проблема.

+0

Я считаю, что пользователь подключен, потому что новая строка вводится в базу данных, но все поля пусты. – bowlerae

+0

@bowlerae: да, поскольку соединение БД установлено ПОСЛЕ вызовов m_r_e_s(). –

+0

Спасибо, это был действительно ответ. Поскольку мне не нужно переписывать весь этот длинный код, у меня возникает другой вопрос. Теперь страница не загружается и дает мне эту ошибку: ошибка PHP Parse: синтаксическая ошибка, неожиданный T_IF. В нем говорится, что проблема заключается в этом коде: «if ($ islisted)», который определяет, нужно ли вставлять или обновлять страницу компании. Это дает мне эту ошибку, если я создам ее как «if (mysql_fetch_array ($ islisted)) {« или как это у меня сейчас. –

2

Вы отсутствуете

session_start(); 

Это должно быть первой строкой любого файла, в котором вы собираетесь использовать переменные сессии.

См. php.net documentation по вопросу.

+0

Не совсем правильно. Вам просто нужно вызвать начало сеанса перед отправкой любого вывода в браузер - и с соответствующей буферизацией вывода, даже если многие из них не будут проблемой. Важное различие. –

+0

У меня есть session_start() в начале страницы, извините за исключение этого. Нужно ли обновлять его на странице обновления? Значение после выполнения функции submit_preview? –

+0

Вам понадобится инструкция 'session_start()', прежде чем вы сможете получить любые переменные сеанса. Если у вас его есть, то, возможно, ваша проблема - это что-то еще. – Kami

Смежные вопросы