Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Галочка остаётся помеченной. 
:(
    Опции темы
bogdach
Дата 15.10.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Помогите сделать так чтоб если галочка помечена, то она остаётся помеченной сколько бы раз пользователь на нажимал "FIRE".
Код

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >
<table>
<?php
$fire =  $_POST["fire"];
$hit =  $_POST["hit"];
 for ($i = 0; $i < 10; $i++){
       for ($j = 0; $j < 10; $j++){
         if ($fire == $i . $j || $hit == $i . $j) {
            echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='$i$j' name='hit'></td>";
         } else {
            echo "<td><input type='radio' value='$i$j' name='fire'></td>";
         }
       } // end for loop
     echo "</tr>";
    } // end for loop
?>
</table>
<input type="submit" value="FIRE">
</form>

PM MAIL   Вверх
PARROT
Дата 15.10.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Код

"<td><input type='checkbox'  value='$i$j' name='hit' checked  disabled></td>";


Добавлено через 1 минуту и 37 секунд
Только причем тут РНР?



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
bogdach
Дата 15.10.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(PARROT @  15.10.2007,  12:04 Найти цитируемый пост)
Без подсветки
1:

"<td><input type='checkbox'  value='$i$j' name='hit' checked  disabled></td>";






Добавлено через 1 минуту и 37 секунд
Только причем тут РНР?

Нет вы посмотрите на код, а лучше протестируй его чтоб было понятнее.
В общем там помечаешь кружек нажимаешь "FIRE" и он становится помеченным квадратиком.
А когда ещё раз помечаешь кружек нажимаешь "FIRE" тот первый квадратик опять становится непомеченным кружком, а мне нужно чтоб он оставался  помеченным квадратиком.

Это сообщение отредактировал(а) bogdach - 15.10.2007, 12:48
PM MAIL   Вверх
flashaa
Дата 15.10.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Кривоватый вывод.. Я вижу что строка таблицы закрывается - </tr>, но не вижу, чтобы она открывалась.
Полагаю, надо сделать так:
Код

<?php
$fire =  $_POST["fire"];
$hit =  $_POST["hit"];
 for ($i = 0; $i < 10; $i++){
    echo '<tr>';
       for ($j = 0; $j < 10; $j++){
         if ($fire == $i . $j || $hit == $i . $j) {
            echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='$i$j' name='hit'></td>";
         } else {
            echo "<td><input type='radio' value='$i$j' name='fire'></td>";
         }
       } // end for loop
     echo "</tr>";
    } // end for loop
?>


У тебя есть таблица 10х10, внутри ячеек которой либо чекбокс, либо радио... Что-то ты не договариваешь, поэтому остальное понять не могу.


Добавлено @ 12:24
Цитата(bogdach @  15.10.2007,  12:16 Найти цитируемый пост)
А когда ещё раз помечаешь кружек нажимаешь "FIRE" тот первый квадратик опять становится непомеченным кружком, а мне нужно чтоб он оставался  помеченным квадратиком. 

Теперь понятно. 
А с чего у тебя должны сохраняться предыдущие пометки?

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


Код

<?php session_start(); ?> // это должно быть первой строкой

<?php
$fire =  $_POST["fire"];
$hit =  $_POST["hit"];
 for ($i = 0; $i < 10; $i++){
    echo '<tr>';
       for ($j = 0; $j < 10; $j++){
         if ($fire == $i . $j || $hit == $i . $j || !empty($_SESSION[$i.$j])) {
            $_SESSION[$i.$j] = 1;
            echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='$i$j' name='hit'></td>";
         } else {
            echo "<td><input type='radio' value='$i$j' name='fire'></td>";
         }
       } // end for loop
     echo "</tr>";
    } // end for loop
?>


Это сообщение отредактировал(а) flashaa - 15.10.2007, 12:26
PM MAIL   Вверх
bogdach
Дата 15.10.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(flashaa @  15.10.2007,  12:19 Найти цитируемый пост)
Кривоватый вывод.. 

Код кривоватый а вывод нормальный.
Цитата(flashaa @  15.10.2007,  12:19 Найти цитируемый пост)
Что-то ты не договариваешь, поэтому остальное понять не могу.

Там ещё есть кнопка которую вы упустили, попробуйте пометить кружок и нажать эту кнопку. не бойтесь ничего страшного не произойдет.  smile smile 

Это сообщение отредактировал(а) bogdach - 15.10.2007, 12:37
PM MAIL   Вверх
flashaa
Дата 15.10.2007, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Где же вывод нормальный, если  в нем откровенное нарушение древовидной структуры причем в элементе второй вложенности - таблице. Да, браузер отрисовал, потому что умный, и потому что код простой.
Я отредактировал пост, в нем решение.
PM MAIL   Вверх
bogdach
Дата 15.10.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(flashaa @  15.10.2007,  12:19 Найти цитируемый пост)
Чтобы он помечал все, тебе нужно каждый раз сохранять,
например в сессию.

А кроме сессий куда ещё можно сохранят? А то у меня сессии почемуто не работают.
PM MAIL   Вверх
MoLeX
Дата 15.10.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



bogdach, в куки, файлы, БД.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
bogdach
Дата 15.10.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(MoLeX @  15.10.2007,  12:59 Найти цитируемый пост)
bogdach, в куки, файлы, БД.

Ну в общем то понятно. Я просто в сессиях не разбираюсь.
Цитата(flashaa @  15.10.2007,  12:19 Найти цитируемый пост)
<?php session_start(); ?> // это должно быть первой строкой

<?php
$fire =  $_POST["fire"];
$hit =  $_POST["hit"];
 for ($i = 0; $i < 10; $i++){
    echo '<tr>';
       for ($j = 0; $j < 10; $j++){
         if ($fire == $i . $j || $hit == $i . $j || !empty($_SESSION[$i.$j])) {
            $_SESSION[$i.$j] = 1;
            echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='$i$j' name='hit'></td>";
         } else {
            echo "<td><input type='radio' value='$i$j' name='fire'></td>";
         }
       } // end for loop
     echo "</tr>";
    } // end for loop
?>

Этот код не работает, вернее работает не так как я хотел.
Он оставляет помеченые квадратики только если их помечать попорядку а если вразброс то не оставляет. А мне надо чтобы вразброс работало
PM MAIL   Вверх
flashaa
Дата 15.10.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Код работает так - перебирает все элементы таблицы, если координаты элемента соотвествуют $hit или  $fire или есть запись в сессии с координатами этого элемента (из 3х уловий достаточно выполнение хотя бы 1), то: 
1) добавляем в сессию информацию об элементе
2) отрисовываем помеченный элемент
Поскольку каждый элемент имеет свои собственные координаты и  мы проходимся по КАЖДОМУ элементу, проверяя отдельно условия для КАЖДОГО элемента - не вижу никакой зависимости от порядка нажатия... Скорее всего в браузере вы видите устарешвший вариант страницы. Чтобы этого избежать, вставьте перед первым выводом в браузер заголовки запрета кеширования. Собственно, session_start()  должно быть ДО вывода в браузер.

Код

/** Запрещаем кеширование */
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); //Дата в прошлом 
header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1 
header('Pragma: no-cache'); // HTTP/1.1 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');





Это сообщение отредактировал(а) flashaa - 15.10.2007, 14:12
PM MAIL   Вверх
bogdach
Дата 15.10.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(flashaa @  15.10.2007,  14:00 Найти цитируемый пост)
Код работает так - перебирает все элементы таблицы...

Я просто удивляюсь как вы так можете посмотрели на код и знаете как он работает. По теории он может и работает а на практике нет. Вставил заголовки запрета кеширования, протестиравал, всё равно не работает, не знаю уже что и делать. :(
PM MAIL   Вверх
flashaa
Дата 15.10.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Проверил код на своей машине - все работает.

Добавлено через 2 минуты и 37 секунд
Вот полный текст скрипта:

Код

<?php session_start(); ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >
<table> 

<?php
$fire =  $_POST["fire"];
$hit =  $_POST["hit"];
 for ($i = 0; $i < 10; $i++){
    echo '<tr>';
       for ($j = 0; $j < 10; $j++){
         if ($fire == $i . $j || $hit == $i . $j || !empty($_SESSION[$i.$j])) {
            $_SESSION[$i.$j] = 1;
            echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='$i$j' name='hit'></td>";
         } else {
            echo "<td><input type='radio' value='$i$j' name='fire'></td>";
         }
       } // end for loop
     echo "</tr>";
    } // end for loop
?>
</table>
<input type="submit" value="FIRE">
</form>

PM MAIL   Вверх
bogdach
Дата 15.10.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(flashaa @  15.10.2007,  14:30 Найти цитируемый пост)
Проверил код на своей машине - все работает.

Значит это у меня машина не правильная. У меня Апач, наверное он сессии не поддерживает. Может есть какой другой способ, например сохранять это в спрятанные элементы формы?
PM MAIL   Вверх
flashaa
Дата 15.10.2007, 15:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Чтобы что-то отладить, надо понять что не работает. У вас выдаются какие-либо ошибки? Апач какой версии, как устанавливали?
По поводу вашей задачи - расскажите по-подробнее, для чего вы это делаете, возможно, удасться оптимизировать.

Другой вариант работы: с сохранением в файл(в папке со скриптом создайте файл selected.txt) - у себя проверял, работает

Код

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >
<table> 
<?php
$selected_array = explode('.', file_get_contents('selected.txt'));

$fire =  $_POST["fire"];
$hit =  $_POST["hit"];
 for ($i = 0; $i < 10; $i++){
    echo '<tr>';
       for ($j = 0; $j < 10; $j++){
         if ($fire == $i . $j || $hit == $i . $j || in_array($i . $j, $selected_array)) {
            array_push($selected_array, $i . $j);
            echo "<td><input type='checkbox' checked='checked' disabled='disabled' value='$i$j' name='hit'></td>";
         } else {
            echo "<td><input type='radio' value='$i$j' name='fire'></td>";
         }
       } // end for loop
     echo "</tr>";
    } // end for loop
$f = fopen('selected.txt', 'w');
fwrite($f, implode('.', $selected_array));
fclose($f);
?>
</table>
<input type="submit" value="FIRE">
</form>


Это сообщение отредактировал(а) flashaa - 15.10.2007, 15:02
PM MAIL   Вверх
bogdach
Дата 15.10.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 26.3.2007

Репутация: нет
Всего: нет



Цитата(flashaa @  15.10.2007,  15:01 Найти цитируемый пост)
Другой вариант работы: с сохранением в файл(в папке со скриптом создайте файл selected.txt) - у себя проверял, работает

А вот это работает, отлично. Спасибо, спасибо и еще раз спасибо! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.