Здравствуйте! Только начинаю осваивать php, попалась такая задача, никак не могу понять алгоритм решения (задача предлагается как "Работа с формой"): "Cоздать 3 кнопки с названиями 1, 2, 3, расположенные друг над другом. При нажатии на любую кнопку порядок меняется на 2, 1, 3. Затем при нажатии на любую кнопку порядок меняется на 3, 2, 1. Затем при нажатии на любую кнопку порядок меняется на 1, 2, 3. И так далее." Во-первых не совсем ясно, что именно должно меняться - надпись на button или само расположение блоков html. Я подумал, что все-таки только надпись, т е форма будет такая: <form action="index.php" method="get"> <p> <button name="button" value=""><?php echo $a ?></button> </p> <p> <button name="button" value=""><?php echo $b ?></button> </p> <p> <button name="button" value=""><?php echo $c ?></button> </p> </form> Формально решил через сессии: <?php error_reporting(-1); session_start(); $a = 1; $b = 2; $c = 3; if (isset($_GET['button'])) { $_SESSION['count']++; -------- Notice if ($_SESSION['count'] == 1) { $a = 2; $b = 1; $c = 3; } if ($_SESSION['count'] == 2) { $a = 3; $b = 2; $c = 1; } if ($_SESSION['count'] > 2) { session_unset(); }} var_dump($_SESSION); ?> Но, при $_SESSION['count'] = 1 выдает "Notice: Undefined index: count in ..... " в строке с итерацией. И кроме того решение какое-то кривое, как мне кажется, может возможно какой-то другой алгоритм использовать?
Ну так в сессии изначально же ничего нету, поэтому и Notice. А так, решение нормальное, если надо именно на PHP.
Да, надо на php. А без Notice никак нельзя, или ничего страшного, просто хочется чисто, без ошибок и уведомлений?
Да, надо на php. А без Notice никак нельзя, или ничего страшного, просто хочется чисто, без ошибок и уведомлений?
@Alexandrinho, ничего хорошего в этом решении нет. 1) Сессий быть не должно. 2) Не надо отталкиваться от того, что количество кнопок три. Решай задачу так будто кнопок может быть произвольное количество.
Для начала объяви переменную в которой будешь хранить количество кнопок. Потом на основе этой переменной сформируй массив, количество элементов которого равно созданной переменной.
В условии-то про это нету. Как и нету, что это должно меняться у всех посетителей сайта Можно. Я же указал почему Notice - надо заранее инициализировать сессию. Ну или проверять перед увеличением, есть ли там уже этот элемент (isset, ??)
Кто круче, @Valick давай как ты там сделаешь без сессии или куков. PHP: <?php $count = 3; if( isset($_COOKIE['button_count'])) { if( $_COOKIE['button_count'] < $count ) { $n = $_COOKIE['button_count']; $n++; setcookie("button_count", $n); } else { $n = 1; setcookie("button_count", $n); } } else { $n = 1; setcookie("button_count", $n); } $button = ''; $s = 0; $r = 1; $check = false; for ($i = 1; $i <= $count; $i++) { if($i == 1) { $s = $n; } else { if($n === 1){ $r++; $s = $r; } else { if($r !== $n) { if( $check === false ) { $s = $r; $r++; } else { $r++; $s = $r; } } else { $r++; $s = $r; $check = true; } } } $button .= "<button>{$s}</button>"; } ?> <form action="" method="POST"> <?=$button;?> </form>
Спойлер: например вот так PHP: <?php // меняем количество кнопок $button_num = 3; $get = $_GET['button']??0; if($get >= $button_num) { $get = 0; } $get = $get%$button_num; for($i=$get; $i<$get+$button_num; $i++) { $html[] = '<p><button name="button" value="' . ($get + 1) . '">Кнопка ' . ($i%$button_num + 1) . '</button></p>' . PHP_EOL; } echo '<form>' . implode('', $html) . '</form>';
@Artur_hopf, вот тебе ещё вариант Спойлер: ещё вариант PHP: <?php $barduck = ['1,2,3', '2,1,3', '3,2,1']; $button_num = count($barduck); $get = $_GET['button'] ?? 0; $get = (0 > $get || $get >= $button_num) ? 0 : $get; $bst = PHP_EOL . '<p><button name="button" value="' . ($get + 1) . '">Кнопка '; $bed = '</button></p>'; $row = $barduck[$get%$button_num]; $arrow = explode(',', $row); $html = '<form>' . $bst . implode($bed . $bst, $arrow) . $bed . PHP_EOL . '</form>'; echo $html;