Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблема с созданием корзины

Сообщения:  [1-10]    [11-20]   [21-30]  [31-33] 

 
 автор: sim5   (14.10.2007 в 20:55)   письмо автору
 
   для: Nadyusha   (14.10.2007 в 20:25)
 

Ну тогда дальнейших успехов!

В каждом скрипте работающем с сессией, надо прописывать session_start(), чтобы продливать открытую сессию, если ваши скрипты вызываются индивидуально. А если вызов страниц идет через индексный файл с параметрами, например: index.php/orders?p=12, то достаточно session_start() прописать один раз, в файле index.php. Вот о чем я говорил. А $session['summa'] - это неверная запись получения переменной из сессии.

Да это и есть цикл (FOR), в нем последовательно перебираются все элементы формы, и если элементом оказывается элемент типа checkbox и он будет отмечен (checked), то его значение суммируется к переменной 'с'. После цикла эта переменная суммируется со значением выбранного опшена элемента SELECT. Вот и все.

   
 
 автор: Nadyusha   (14.10.2007 в 20:25)   письмо автору
11.8 Кб
 
   для: sim5   (14.10.2007 в 08:18)
 

Да, я теперь многое поняла и запомню на долго! Хороший урок! Спасибо.
Вроде бы все сделала....

>когда прописываю этот же скрипт в форме, появляется сверху на странице скрипт в таком виде: $session['summa']
Писала потому, что Вы говорили,что надо прописывать в каждом скрипте. Но когда убрала написанное, ошибка пропала.
А функция подсчета суммы get_sum() в таком виде намного меньше места занимает и спокойнее работает! Это и есть цикл?

В файле Servers\usr\local\php\php.ini - register_globals = 0, ничего не меняла.

   
 
 автор: sim5   (14.10.2007 в 08:18)   письмо автору
 
   для: Nadyusha   (14.10.2007 в 07:09)
 

Это сообщение говорит: "Синтаксическая ошибка, неизвестная переменная в строке 10 файла delivery.php." Скорее это потому, что вы просто копируете себе в код то, что я вам пишу как пример.:) У вас ведь элементом в форме, который хранит сумму выбранных услуг, является:

<input type="hidden" name="result" value="">

Значит вы должны в скрипте, который принимает данные из формы записать:

<?php
session_start
(); //помните о недопустимом выводе в браузер
if (isset($_POST['result'])) $_SESSION["summa"] = $_POST['result'];
?>

А мой пример $_POST['summa'] удалите. Теперь у вас в сессии будет находится сумма за выбранные услуги - $_SESSION["summa"], и вы можете вывести это значение на любой странице. Но перед выводом проверяйте, существует ли эта переменная:

<?php
session_start
();
if (isset(
$_SESSION["summa"])) //ваши действия
?>

Теперь о $session["summa"] - найдите в файле Servers\usr\local\php5\php.ini строчку register_globals, проверьте, если она равна on или 1, то поставьте ей значение off или 0. Сохраните файл и если у вас был запущен сервер, то перезапустите его (чтобы изменения вступили в силу).
После этого всегда обращайтесь к сессии, как к элементу суперглобального массива:
$_SESSION["summa"] - как отмечено жирным.
Обратите внимание, у вас еще ошибка в записи - $POST_['summa'], вы должны писать так:
$_POST['summa'] - это тоже элемент суперглобального массива.

>когда прописываю этот же скрипт в форме, появляется сверху на странице скрипт в таком виде: $session['summa']

Про $session['summa'] я уже сказал, а вот что значит прописываю в форме, не понял, зачем? Прикрепите код вашей страницы полностью, чтобы посмотреть.

Функцию подсчета суммы get_sum() перепешите так:

<script>
function get_sum(f) {
var c = 0;
var s = eval(f.service.options[f.service.selectedIndex].value);
for (i=0; i<f.length; i++) {
  if (f.elements[i].type == 'checkbox' && f.elements[i].checked)
     c = c + eval(f.elements[i].value);
   }
  f.result.value = c + s;

</script>

Ну и добавить в каждый чекбокс вызов этой функции onclick="get_sum(this.form)", ну это у вас видимо наверняка сделано. Теперь вы можете в форму еще добавить (при необходимости) чекбоксов, при этом саму функцию редактировать не надо будет.

   
 
 автор: Nadyusha   (14.10.2007 в 07:09)   письмо автору
 
   для: sim5   (13.10.2007 в 19:26)
 

Спасибо.
Такой вопрос: что может означать ошибка

Parse error: syntax error, unexpected T_VARIABLE in /home2/e4914306/public_html/delivery.php on line 10

в 10 строке:

$session["summa"] = $POST_['summa'];

Чтобы я не делала, не меняла, ошибка не исправляется...

И еще один вопрос: когда прописываю этот же скрипт в форме, появляется сверху на странице скрипт в таком виде: '.$session['summa'].''; ?>, почему, тоже не могу понять где искать ошибку....

PS. Я еще не научилась работать с CSS, и не умею пока создавать циклы, к сожалению, хотя знаю, что намного облегчает работу.... научусь обязательно, не все сразу.

   
 
 автор: sim5   (13.10.2007 в 19:26)   письмо автору
 
   для: Nadyusha   (13.10.2007 в 19:00)
 

Да нет, причина не в сессии, где то до этой строки вы допустили ошибку. Проверьте все внимательно. А эту строку в чистом виде РНР выведет без проблем.

PS. У вас в этой строке не закрыт тег FONT. Да и вообще, ну их к ляху на страницах, лучше тегу P указать необходимый стиль в CSS.

   
 
 автор: Nadyusha   (13.10.2007 в 19:00)   письмо автору
 
   для: sim5   (13.10.2007 в 11:29)
 

Спасибо за четкие советы!

Голова уже кругом идет... сейчас ругается :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home2/e4914306/public_html/delivery.php on line 18
где в строке 18 стоит

print "<P ALIGN=CENTER><font color=#9900CC size=3 face=Tahoma> Hello! </P><BR>";

получается, когда я стартую сессию, я не могу ничего писать?

   
 
 автор: sim5   (13.10.2007 в 12:22)   письмо автору
 
   для: bronenos   (13.10.2007 в 12:17)
 

Почему, просто ляпсусов с передачей заголовков гораздо больше, и связаны они скорее не с тем, что первой строкой не прописаны.)

   
 
 автор: bronenos   (13.10.2007 в 12:17)   письмо автору
 
   для: sim5   (13.10.2007 в 11:29)
 

я сидел с телефона и просто вот так высказал
а что, скажете, неправильно? )

   
 
 автор: sim5   (13.10.2007 в 11:29)   письмо автору
 
   для: Nadyusha   (13.10.2007 в 07:06)
 

bronenos - ну че так скупо?))

Nadyusha - session_start() не обязательно первой строкой в скрипте должно быть прописано, главное чтобы до этой записи не было никакого вывода, например, echo, print, лементов HTML и прочее. И кроме того, даже пустых строк в коде, а так же пустых строк, пробелов перед <?php.

$_SESSION['summa'] выводится на старнице потому, что у вас сессия не рабоатет (вы ее стартуете не правильно, см. выше), нет такой переменной $_SESSION['summa'], вот вы и получаете это на странице. При правильном старте сессии, вы сможете увидеть ее запись в папке установленного Денвера. Они хранятся в папке tmp под такими именами, например, sess_1baff5e9f299f318eac761ca84ea8390. Это обычный текст и вы можете посмотреть его Блокнотом, возможно это вам потребуется когда либо.

Вы, как я вижу, добавили еще в форму чекбоксов. Можно конечно и так, как вы пишите, добавлять к общей сумме их значения, но если вы еще будете добавлять элементы, то лучше проверять отмеченные чекбоксы в цикле, суммировать значения выбранных, добавив затем их к общей сумме.

   
 
 автор: bronenos   (13.10.2007 в 10:15)   письмо автору
 
   для: Nadyusha   (13.10.2007 в 07:06)
 

session start первой строчкой

   

Сообщения:  [1-10]    [11-20]   [21-30]  [31-33] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования