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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Помогите с условием
 
 автор: Чайчайвыручай   (09.06.2011 в 22:15)   письмо автору
 
 

Подскажите, пожалуйста, что надо сделать для вывода, который представлен ниже? Т.е. что бы новый день ($namber_day) начинался не только после нажатия кнопки с value="новый день", но и после нажатия кнопки value="2 этапа" или value="4 этапа”.

Пример вывода:


Номер этапа Отк

Номер дня $namber_day (Значит здесь “1” на месте "$namber_day", т.к. была нажата кнопка value=" новый день " или кнопка value="2 этапа")
1 2 этапа
2 4 этапа

Пропустить

Номер дня $namber_day (Значит здесь “2” на месте "$namber_day", т.к. была нажата кнопка value=" новый день " или кнопка value="2 этапа")
1 2 этапа
2 4 этапа

Номер дня $namber_day (Значит здесь “3” на месте "$namber_day", т.к. была нажата кнопка value=" новый день ")
1 2 этапа
2 4 этапа


Код:

<form action="otk.php" method="post">
<input name="a85” type="submit" value="Пропустить"><br>
<input name="a2" type="submit" value="2 этапа"><br>
<input name="a4" type="submit" value="4 этапа "><br>
<input name="a84" type="submit" value="новый день"><br>

<?php
echo "<table class='tableu'>
<tr width='750 px'>
<td >Номер этапа</td>
<td >Отк</td>
</tr>";
$namber_day=1;
$buttons = array();
if (isset($_COOKIE['buts'])) {
$buts = $_COOKIE['buts'];
$buttons = explode("#", $buts);
}
foreach ($buttons as $id)
{
if($id)
{
$name = substr($id, 1);
if($name == "85")
{$namber_upr=1;
echo "<tr>
<td ></td>
<td > Без отк</td>
</tr>";
}elseif ($name == "84")
{ $namber_upr=1;
echo "<tr>
<td ></td>
<td > Номер дня $namber_day</td>
</tr>"; $namber_day++;
}else{
$query = "SELECT title FROM otk WHERE id = $name LIMIT 1";
$result = mysql_query($query, $db);
if (!$result) {exit("Ошибка выполнения запроса - ".mysql_error());}
do {
if ($namber_upr) {
printf (
"<td>%s</td>
<td class='tdu'>%s</td>
</tr>", $namber_upr, mysql_result($result, 0);} $n++;
} while ($result<=$buts);
}}}
echo "</table>";
?>

  Ответить  
 
 автор: cheops   (10.06.2011 в 11:52)   письмо автору
 
   для: Чайчайвыручай   (09.06.2011 в 22:15)
 

Довольно тяжело ориентироваться на результат, когда невозможно воспроизвести работу скрипта (у нас нет таблицы otk). Скорее всего это приведет к тому, что ответа на вопрос вы не получите - нужно как-то менять постановку вопроса. Давайте упростим скрипт до схемы
<?php
  
...
  if(
$name == "85")
  {
     
// Это обработчик "Пропустить"
  
}
  elseif (
$name == "84")
  {
     
// Это обработчик "Новый день"
  
}
  else
  {
     
// Это обработчик всех остальных кнопок - тут нужно что-то сделать с $namber_day
  
}
?>
За "новый день" я так понимаю несет ответственность переменная $namber_day=1;, которая у вас инициализируется перед всеми обработчиками. Что это? Какое значение она должна принимать? Особенно когда нужен "новый день"? Это значение 1 или она должна увеличить значение на 1, чтобы начался новый день?

  Ответить  
 
 автор: Чайчайвыручай   (10.06.2011 в 15:34)   письмо автору
 
   для: cheops   (10.06.2011 в 11:52)
 

Спасибо cheops, что обратили внимание! Я уже думал, это тема так и останется вопросом.

В скрипте есть две переменные, отвечающие за счет $namber_day и $namber_upr, последняя считает “остальные” кнопки, назовем их этапами. Счет этапов обнуляется (начинается с единицы), после срабатывания "Пропустить" или "Новый день", с ним все прекрасно.

"Новый день" считается с помощью переменной $namber_day. Все работает если срабатывает обработчик "Новый день". Я хочу, что бы он срабатывал (выводился на экран «новый день» и номер его увеличивался на единицу) не только при нажатии на соответствующую кнопку (“новый день”), но при срабатывании "else (обработчик всех остальных кнопок)" в двух случаях:

1. Если "else (обработчик всех остальных кнопок)" это первое нажатие кнопки.
Т.е. нажали на кнопку «этап», но забыли нажать на “новый день”, а мы все равно выводим : «День №1».

2. Если "else (обработчик всех остальных кнопок)" это нажатие кнопки после if($name == "85") { обработчик "Пропустить"} .
Т.е. нажали на кнопку «пропустить», но после этого забыли нажать “новый день” и сразу нажали на «этап». Мы все равно выводим: «День № такойто».

  Ответить  
 
 автор: cheops   (10.06.2011 в 15:45)   письмо автору
 
   для: Чайчайвыручай   (10.06.2011 в 15:34)
 

А что происходит, если в обработчике "всех кнопок", сразу после else прописать инициализацию дня $namber_day = 1. Это нарушает логику работы других режимов? Если нарушает то каких?
<?php 
  
... 
  if(
$name == "85"
  { 
     
// Это обработчик "Пропустить" 
  

  elseif (
$name == "84"
  { 
     
// Это обработчик "Новый день" 
  

  else 
  { 
     
$namber_day=1;
     
// Это обработчик всех остальных кнопок - тут нужно что-то сделать с $namber_day 
  

?>

PS Если не сложно опишите вкратце что разрабатываете - откуда столько кнопок и почему важно отслеживать порядок их нажатия?

  Ответить  
 
 автор: Чайчайвыручай   (10.06.2011 в 16:07)   письмо автору
 
   для: cheops   (10.06.2011 в 15:45)
 

Если сразу после else прописать инициализацию дня $namber_day = 1, то эта переменная везде будет равна единице, больше ничего не нарушается.

PS Если не сложно опишите вкратце что разрабатываете - откуда столько кнопок и почему важно отслеживать порядок их нажатия?
Это программа-план предположим на неделю. Есть рабочие дни ("новый день"), есть пропущенные ("Пропустить"). Рабочие дни делятся пронумерованными этапами.
Во время заполнения плана человек может не нажать "новый день" в самом начале составления, а вместо этого сразу нажать на какой-либо этап и тут наша программа выдаст ему "День №1" и этап соответственно.
Так же он после нажатия "Пропустить" опять сразу же нажимает на какой-либо этап и тут наша программа выдаст ему "День № такой-то" и этап соответственно.

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

  Ответить  
Rambler's Top100
вверх

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