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

Форум PHP

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

 

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

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

тема: Почему результат функции array_splice исчезает?
 
 автор: Чайчайвыручай   (29.06.2011 в 13:42)   письмо автору
 
 

Здравствуйте!
Кому под силу такая задача?

// Здесь просто задаются куки
<?php
$mypost = $_POST;
$buts = "";
$pbuts = "";
if (isset($_COOKIE['buts'])) {
$buts = $_COOKIE['buts'];
$pbuts = $buts;
}
foreach ($mypost as $key => $val) {
$buts .= $key."#";

}

if ($pbuts != $buts) {
setcookie("buts", "$buts");
header("Location:/index.php");
}
?>
// Форма
<form action="index.php" method="post">
<input name="a" class="knopka" type="submit" value="Кнопка"><br>
<input name="a2" class="knopka" type="submit" value="Кнопка2"><br>
<input name="a3" class="knopka" type="submit" value="Кнопка3"><br>
</form>

<?php
$buttons = array();
if (isset($_COOKIE['buts'])) {
$buts = $_COOKIE['buts'];
$buttons = explode("#", $buts);
}
foreach ($buttons as $id)
{
$x = count($buttons);
$y = $x - 3;
$z = $x - 2;

// $z - нынешнее значение, $y - предыдущее значение

if ($buttons[$y]=="a" and $buttons[$z]!="a" and $buttons[$z]!="a3")
{
// array_splice вставляет значение "a2" в массив $buttons, перед нынешним значением
array_splice($buttons, $z, 0, "a2");
}
if ($id == "a2"){
echo "Кнопка2"
}elseif($id == "a3"){
echo "Кнопка3"
}}

print_r ($buttons);
?>


print_r ($buttons) выводит желаемый результат с помощью функции array_splice только в момент срабатывания первого if. После того как нажата еще одна кнопка результат функции array_splice исчезает. Почему и как это исправить?

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 13:54)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 13:42)
 

Кто решит эту задачу первый. Может скинуть мне номер телефона на voroshilov555@mail.ru и сто рублей на Вашем счету

  Ответить  
 
 автор: Valick   (29.06.2011 в 14:31)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 13:54)
 

опишите пожалуйста функцию которую должен выполнять Ваш скрипт

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 14:37)   письмо автору
 
   для: Valick   (29.06.2011 в 14:31)
 

Скрипт должен выводить значения кнопок. А что именно не ясно?

  Ответить  
 
 автор: Valick   (29.06.2011 в 14:41)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 14:37)
 

честно сказать ничего не ясно
просто значения кнопок и все? тогда зачем там всего так много наворочано?
array_splice - обязательно к применению?

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 15:18)   письмо автору
 
   для: Valick   (29.06.2011 в 14:41)
 

array_splice - обязательно к применению?
Нет.
тогда зачем там всего так много наворочано?

print_r ($buttons) выводит
например: Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>)

Если ключ =>элемент, [5] =>не равен "а" и [5] =>не равен "а3", равен например "а5", т.е. [5] =>"а5".
Тогда print_r ($buttons) выводит:
Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>а2 [6] =>а5 [7] =>). Все как задуманно.

Но после того как нажата еще одна кнопка, например "а6"
print_r ($buttons) выводит:
Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>а5 [6] =>а6 7] =>), а надо что бы выводилось: Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>а2 [6] =>а5 [7] =>а6)

  Ответить  
 
 автор: Valick   (29.06.2011 в 15:42)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 15:18)
 

кнопок а5 и а6 я у Вас в коде вообще не видел... как прикажите понимать?
невозможно написать рабочий код там где нет логики
я вас просил обьяснить логику вот этого:
$x = count($buttons);
$y = $x - 3;
$z = $x - 2;

я так понимаю изменения в массиве не нужно сохранять в кукисы?

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 17:20)   письмо автору
 
   для: Valick   (29.06.2011 в 15:42)
 

кнопок а5 и а6 я у Вас в коде вообще не видел... как прикажите понимать?
У меня на самом деле у меня таких страниц 7 и на каждой по 10 кнопок. Я добавил а5 и а6, что бы объяснить то что должен делать скрипт.

я вас просил обьяснить логику вот этого:
$x = count($buttons);
$y = $x - 3;
$z = $x - 2;
Логика здесь простая: считаю колличество элементов. $z - это ключ нынешнего элемента, а $y - это ключ предыдущего элемента. Они необходимы для того что бы возможно было при определенном сценарии (который я описывал выше) в массив вставлялось дополнительное значение, это я реализовывал с помощью функции array_splice.

я так понимаю изменения в массиве не нужно сохранять в кукисы?
Как раз это и нужно. Это у меня и не получается

  Ответить  
 
 автор: Valick   (29.06.2011 в 17:41)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 17:20)
 

Как раз это и нужно. Это у меня и не получаетсятак а в куку измененный массив кто будет переписывать? Пушкин? :)
да и лучше в куку записывать массив предварительно обработав его функцией serialize()
и наконец главный вопрос почему именно кука используется для хранения данной информации?
У меня на самом деле у меня таких страниц 7 и на каждой по 10 кнопок.
ну не томите признайтесь честно что это за страницы, что это за кнопки, как это в целом называется? игра? аукцион? лотерея? лохотрон? или что?

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 17:45)   письмо автору
 
   для: Valick   (29.06.2011 в 17:41)
 

Как это самое изменение записать?

  Ответить  
 
 автор: Valick   (29.06.2011 в 17:48)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 17:45)
 

Вы абсолютно не хотите отвечать на мои наводящие вопросы, а зря :(
записать очень просто - установить куку с новым значением...

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 17:51)   письмо автору
 
   для: Valick   (29.06.2011 в 17:48)
 

Как это сделать я не знаю. Поэтому и код такой "навороченный":
<?php
$mypost = $_POST;
$buts = "";
$pbuts = "";
if (isset($_COOKIE['buts'])) {
$buts = $_COOKIE['buts'];
$pbuts = $buts;
}
foreach ($mypost as $key => $val) {
$buts .= $key."#";

}

if ($pbuts != $buts) {
setcookie("buts", "$buts");
header("Location:/index.php");
}
?>

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 17:49)   письмо автору
 
   для: Valick   (29.06.2011 в 17:41)
 

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

  Ответить  
 
 автор: Valick   (29.06.2011 в 18:01)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 17:49)
 

ну наконец-то :)
это нужно было написать в самом первом посте
теперь все понятно, но Вы движетесь немного не в том направлении

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 18:04)   письмо автору
 
   для: Valick   (29.06.2011 в 18:01)
 

Я рад, что Вам понятно. Еще больше меня обрадует решение.
А что не так с направлением

  Ответить  
 
 автор: Valick   (29.06.2011 в 18:18)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 18:04)
 

готовое решение - это дорогое удовольствие ;)
а вот информационную поддержку я готов оказать всегда.
надо немного подумать....

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 18:29)   письмо автору
 
   для: Valick   (29.06.2011 в 18:18)
 

У меня все работает нормально, направление менять не надо, только подскажите как записать это в куки, этого будет более чем достаточно

  Ответить  
 
 автор: cheops   (29.06.2011 в 19:12)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 13:42)
 

Не понятно. Есть три кнопки, что должно быть на выходе? Я гляжу первая кнопка обрабатывается отдельно от других. Чем они отличаются друг от друга?

>print_r ($buttons) выводит желаемый результат с помощью функции array_splice только в момент
>срабатывания первого if.
Под "первым" if имеется в виду вот этот?
if ($buttons[$y]=="a" and $buttons[$z]!="a" and $buttons[$z]!="a3") 
 {
 // array_splice вставляет значение "a2" в массив $buttons, перед нынешним значением
 array_splice($buttons, $z, 0, "a2");
 }


>После того как нажата еще одна кнопка результат функции array_splice исчезает.
В чем это выражается? не выводится содержимое массива $buttons или в нем что-то лишнее? Нельзя ли добавить вызов array_splice($buttons, $z, 0, "a2"); в оставшиеся if-блоки?

  Ответить  
 
 автор: Valick   (29.06.2011 в 19:30)   письмо автору
 
   для: cheops   (29.06.2011 в 19:12)
 

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

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 19:33)   письмо автору
 
   для: Valick   (29.06.2011 в 19:30)
 

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

Да да да. Так и есть.
Как мне сохранить новое значение $buttons в кукисы?

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 19:32)   письмо автору
 
   для: cheops   (29.06.2011 в 19:12)
 

Первый if именно тот на который Вы указали.
Необходимый результат описывал выше, повторюсь:
print_r ($buttons) выводит
например: Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>)

Если ключ =>элемент, [5] =>не равен "а" и [5] =>не равен "а3", равен например "а5", т.е. [5] =>"а5".
Тогда print_r ($buttons) выводит:
Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>а2 [6] =>а5 [7] =>). Все как задуманно.

Но после того как нажата еще одна кнопка, например "а6"
print_r ($buttons) выводит:
Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>а5 [6] =>а6 7] =>), а надо что бы выводилось: Array ( [0] => a2 [1] => a3 [2] => a2 [3] => a3 [4] => a [5] =>а2 [6] =>а5 [7] =>а6)

Нельзя ли добавить вызов array_splice($buttons, $z, 0, "a2"); в оставшиеся if-блоки?
Нет он нужен только в первом if

  Ответить  
 
 автор: Valick   (29.06.2011 в 19:44)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 19:32)
 

setcookie("buts",implode("#",$buttons));
print_r ($buttons);

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 20:44)   письмо автору
 
   для: Valick   (29.06.2011 в 19:44)
 

Спасибо за ответ!
Но у меня выводит ошибку:
Warning: Cannot modify header information - headers already sent by (output started at X:\home......

Перевод:
Предупреждение: Не удается изменить информацию заголовка - заголовки уже прислал (выход начался в X: \ домой

  Ответить  
 
 автор: Valick   (29.06.2011 в 19:45)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 19:32)
 

-

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 20:49)   письмо автору
 
   для: Valick   (29.06.2011 в 19:45)
 

Warning: Cannot modify header information - headers already sent by (output started at X:\home.

  Ответить  
 
 автор: Valick   (29.06.2011 в 21:08)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 20:49)
 

кукисы должны устанавливаться до любого вывода в браузер, будь то символ, будь то спец символ или даже пробел (хотя это тоже символ)

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 21:16)   письмо автору
 
   для: Valick   (29.06.2011 в 21:08)
 

Пробую, но почему то мой adobe dreamweaver ругается на </table>. Пока не понимаю почему

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 21:21)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 21:16)
 

Или ругается не на </table>
Ошибка следующая: Parse error: syntax error, unexpected $end in X:\home
Перевод: Синтаксическая ошибка: синтаксическая ошибка, неожиданный конец $ в X: \ домой

  Ответить  
 
 автор: Чайчайвыручай   (29.06.2011 в 22:34)   письмо автору
 
   для: Valick   (29.06.2011 в 21:08)
 

Устанавливаю кукисы до любого вывода в браузер, но все равно выдает ошибку типа: кукисы уже были установленны. Можно ли повторно их устанавливать?

  Ответить  
 
 автор: Valick   (30.06.2011 в 01:28)   письмо автору
 
   для: Чайчайвыручай   (29.06.2011 в 22:34)
 

вроде да, код нужно сохранять в utf-8 без bom
про пробелы до <?php и после ?> тоже не забывайте
вывод это не только echo , но и любой html код

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

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