Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Одностраничная Форма PHP
Форумы портала PHP.SU » » Вопросы новичков » Одностраничная Форма PHP

Страниц (1): [1]
 

1. asd123 - 17 Апреля, 2021 - 12:31:41 - перейти к сообщению
Привет всем! Очень нужна ваша помощь.

Задание:
Должен быть составлен список гостей.

1) Введите следующие данные в первую форму:
- повод (например, день рождения, свадьба и т. д.)
- Дата
- место
- количество гостей

2) Информация с первой страницы формы отображается в виде текста на второй странице формы. В зависимости от количества гостей отображаются текстовые поля, в которых имена гостей могут быть введены.

3) третья страница содержит информацию из первой страницы в виде текста. Ниже имена гостей пронумерованы в алфавитном порядке.

Помимо вывода, данные должны быть сохранены в формате JSON.

Сложность: все должно быть доступно в одном файле index.php (т.е. не в трех файлах для разных страницы форм, а в одном файле, который запрашивает с помощью операторов if, какая страница должна быть вызвана.


Вот мой код. Никак не могу понять, какие именно условия if должны быть, чтобы программа работала. У меня нет перехода на else....
+ не знаю, как сохранить гостей (понимаю только что это должен быть array) и показать их на следующей странице.

Буду очень признательна, если мне поможете. Спасибо )

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. echo "<h1>гостевая книга</h1>";
  5. echo '<form action="" method="POST">';
  6.  
  7. $place = isset($_POST['place']) ? trim($_POST['place']) : "";
  8. $number = isset($_POST['number']) ? trim($_POST['number']) : "";
  9. $occasion = isset($_POST['occasion']) ? trim($_POST['occasion']) : "";
  10. $date = isset($_POST['date']) ? trim($_POST['date']) : "";
  11. $subject = isset($_POST['subject']) ? trim($_POST['subject']) : "";
  12.  
  13. function error()
  14. {
  15.     echo "<br>";
  16.     foreach ($_POST as $field => $content) {
  17.         if (empty($content)) {
  18.             echo "Поле $field не заполнено!<br />";
  19.             $error = true;
  20.         }
  21.     }
  22. }
  23.  
  24.  
  25. /////   1
  26.  
  27. if (empty($place) || empty($number) || empty($occasion)) {
  28.  
  29.     // occasion
  30.     echo '<p>occasion: ';
  31.     $select=array('','occasion1','occasion2','occasion3');
  32.     echo '<select name="occasion">';
  33.  
  34.     foreach ($select as $var){
  35.         echo '<option value="'.$var.'">'.$var.'</option>';
  36.     }
  37.     echo '</select>';
  38.     echo "<br><br>";
  39.  
  40.     // date
  41.     echo 'date: ';
  42.     echo '<input type="date" name="date" value="';
  43.     echo $place;
  44.     echo '" size="35" maxlength="60">';
  45.     echo "<br><br>";
  46.  
  47.     // place
  48.     echo 'place: ';
  49.     echo '<input type="text" name="place" value="';
  50.     echo htmlspecialchars($place);
  51.     echo '" size="20" maxlength="60">';
  52.     echo "<br><br>";
  53.  
  54.     // number
  55.     echo 'number of guests: ';
  56.     echo '<input type="number" name="number" value="';
  57.     echo $number;
  58.     echo '" size="4" maxlength="4">';
  59.     echo "<br><br>";
  60.  
  61.     echo '<br>';
  62.     echo '<input type="Submit" name="" value="weiter">';
  63.     error();
  64.  
  65. }
  66. ////// 2
  67. elseif (isset($_POST['occasion']) || isset($_POST['date']) || isset($_POST['place']) || $_POST['subject'] == "") {
  68.  
  69.  
  70.  
  71.     echo "occasion: " . $occasion . "<br>";
  72.     echo "date: " . $date . "<br>";
  73.     echo "place: " . $place . "<br>";
  74.     echo "number of guests: " . $number . "<br>";
  75.  
  76.  
  77.         if (($_POST['subject'] == "" ) && ( $_POST['already_shipped_twice'] == "yes" ))
  78.         {
  79.             echo "<p>Пожалуйста, заполните поле Гость </p>";
  80.         }
  81.  
  82.         $start = 1;
  83.         $stop = $_POST["number"];
  84.         for ($count = $start; $count <= $stop; $count++) {
  85.             echo "<p>  $count  Гость: ";
  86.             ?><input type="text" name="subject"> <br><?PHP
  87.         }
  88.  
  89.         echo '<input type="hidden" name="already_shipped_twice" value="yes">';
  90.  
  91.         echo '<br>';
  92.         echo '<input type="submit" name="preview" value="Go to the preview">';
  93.  
  94.          $occasion = $_REQUEST['occasion'];
  95.          echo $occasion , "<br>";
  96.  
  97.         $place = $_REQUEST['place'];
  98.         echo $place;
  99.  
  100.     }
  101. ////////////////////////// 3
  102.     else {
  103.         $text = $_POST['subject'];
  104.         $text = explode(" ", $text);
  105.         natCaseSplace($text);
  106.         foreach ($text as $element) {
  107.             echo $element . "<br>";
  108.         }
  109.  
  110.  
  111.         $error = false;
  112.  
  113.  
  114.         if (!$error) {
  115.             echo "Данные:";
  116.             echo "occasion: " . $occasion . "<br>";
  117.             echo "date: " . $date . "<br>";
  118.             echo "place: " . $place . "<br>";
  119.             echo "number der Gдste: " . $number . "<br>";
  120.  
  121.  
  122.             file_put_contents("myfile.json", "");
  123.  
  124.             foreach ($_POST as $field => $content) {
  125.                 if (!empty($content)) {
  126.                     $json = json_encode($content);
  127.                     file_put_contents("file.json", $json, FILE_APPEND);
  128.                 }
  129.             }
  130.             echo '</form>';
  131.             exit;
  132.         }
  133.     }
  134. ?>
  135.  
  136.  
2. Vladimir Kheifets - 17 Апреля, 2021 - 15:31:27 - перейти к сообщению
asd123 пишет:
Привет всем! Очень нужна ваша помощь.

Добрый день!
По Вашему коду:

1. Язык? Вы используете русский, немецкий, английский и непонятный,
например, "number der Gдste", что видимо на немецком выглядело бы как "Anzahl der Gäste".
В формуляре на английском кнопка на немецком, <input type="Submit" name="" value="weiter"> и.т.п

2. В <input type="number" потерян атрибут min=1. Можно случайно выбрать -1, и валидация пройдёт.

3. На втором шаге можно вернуться назад, но не видно кнопки "weiter".

4. На последнем шаге
Спойлер (Отобразить)

Удачи!
3. asd123 - 17 Апреля, 2021 - 17:48:43 - перейти к сообщению
как сделать, чтобы на следующей странице были имена гостей со второй страницы + пронумерованы в алфавитном порядке.

Вот функция для создания полей в зависимости от введенного числа:
PHP:
скопировать код в буфер обмена
  1.  
  2. function field () {
  3.     $stop = $_SESSION['number'];
  4.     for ($count = 1; $count <= $stop; $count++) {
  5.         echo "<p>  $count  Gast: ";
  6.         ?><input type="text" name="subject"> <br><?PHP
  7.     }
  8. }
  9.  


Но на следующей странице показан только гость внесенный в последнюю строку.
PHP:
скопировать код в буфер обмена
  1.  
  2.            <?= htmlspecialchars($_SESSION['subject'], ENT_COMPAT, 'UTF-8') ?>
  3.  


Я понимаю что это должен быть массив, но как это сделать, к сожалению, нет.
4. Vladimir Kheifets - 17 Апреля, 2021 - 18:40:05 - перейти к сообщению
asd123 пишет:
как сделать, чтобы на следующей странице были имена гостей со второй страницы + пронумерованы в алфавитном порядке.

Вот функция для создания полей в зависимости от введенного числа:
PHP:
скопировать код в буфер обмена
  1.  
  2. function field () {
  3.     $stop = $_SESSION['number'];
  4.     for ($count = 1; $count <= $stop; $count++) {
  5.         echo "<p>  $count  Gast: ";
  6.         ?><input type="text" name="subject"> <br><?PHP
  7.     }
  8. }
  9.  


Но на следующей странице показан только гость внесенный в последнюю строку.
PHP:
скопировать код в буфер обмена
  1.  
  2.            <?= htmlspecialchars($_SESSION['subject'], ENT_COMPAT, 'UTF-8') ?>
  3.  


Я понимаю что это должен быть массив, но как это сделать, к сожалению, нет.


Зачем $_SESSION не понятно.
У Вас значения в $stop = $_POST['number'];

Чтобы передать все введённые значения вместо:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="subject">

Напишите:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="subject[]">


Тогда, на следующем шаге в $text = $_POST['subject'];
получите массив всех введенных имен
Массив можете отсортировать.
PHP:
скопировать код в буфер обмена
  1. foreach( $text as $value )
  2. {
  3.    //здесь в $value получите каждое введённое имя
  4. }
5. asd123 - 17 Апреля, 2021 - 18:56:35 - перейти к сообщению
Vladimir Kheifets пишет:
asd123 пишет:
как сделать, чтобы на следующей странице были имена гостей со второй страницы + пронумерованы в алфавитном порядке.

Вот функция для создания полей в зависимости от введенного числа:
PHP:
скопировать код в буфер обмена
  1.  
  2. function field () {
  3.     $stop = $_SESSION['number'];
  4.     for ($count = 1; $count <= $stop; $count++) {
  5.         echo "<p>  $count  Gast: ";
  6.         ?><input type="text" name="subject"> <br><?PHP
  7.     }
  8. }
  9.  


Но на следующей странице показан только гость внесенный в последнюю строку.
PHP:
скопировать код в буфер обмена
  1.  
  2.            <?= htmlspecialchars($_SESSION['subject'], ENT_COMPAT, 'UTF-8') ?>
  3.  


Я понимаю что это должен быть массив, но как это сделать, к сожалению, нет.


Зачем $_SESSION не понятно.
У Вас значения в $stop = $_POST['number'];

Чтобы передать все введённые значения вместо:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="subject">

Напишите:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="subject[]">


Тогда, на следующем шаге в $text = $_POST['subject'];
получите массив всех введенных имен
Массив можете отсортировать.
PHP:
скопировать код в буфер обмена
  1. foreach( $text as $value )
  2. {
  3.    //здесь в $value получите каждое введённое имя
  4. }


Все равно не получается.... Слёзы в глазах
PHP:
скопировать код в буфер обмена
  1.  
  2.             <dd><?PHP
  3.                 $text = $_POST['subject'];
  4.                 $text = explode(" ", $text);
  5.                 natCaseSort($text);
  6.                 foreach ($text as $element) {
  7.                     echo $element . "<br>";
  8.                 }
  9.                 ?></dd>
  10.  

(Добавление)
asd123 пишет:
Vladimir Kheifets пишет:
asd123 пишет:
как сделать, чтобы на следующей странице были имена гостей со второй страницы + пронумерованы в алфавитном порядке.

Вот функция для создания полей в зависимости от введенного числа:
PHP:
скопировать код в буфер обмена
  1.  
  2. function field () {
  3.     $stop = $_SESSION['number'];
  4.     for ($count = 1; $count <= $stop; $count++) {
  5.         echo "<p>  $count  Gast: ";
  6.         ?><input type="text" name="subject"> <br><?PHP
  7.     }
  8. }
  9.  


Но на следующей странице показан только гость внесенный в последнюю строку.
PHP:
скопировать код в буфер обмена
  1.  
  2.            <?= htmlspecialchars($_SESSION['subject'], ENT_COMPAT, 'UTF-8') ?>
  3.  


Я понимаю что это должен быть массив, но как это сделать, к сожалению, нет.


Зачем $_SESSION не понятно.
У Вас значения в $stop = $_POST['number'];

Чтобы передать все введённые значения вместо:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="subject">

Напишите:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="subject[]">


Тогда, на следующем шаге в $text = $_POST['subject'];
получите массив всех введенных имен
Массив можете отсортировать.
PHP:
скопировать код в буфер обмена
  1. foreach( $text as $value )
  2. {
  3.    //здесь в $value получите каждое введённое имя
  4. }


Все равно не получается.... Слёзы в глазах
PHP:
скопировать код в буфер обмена
  1.  
  2.             <dd><?PHP
  3.                 $text = $_POST['subject'];
  4.                 $text = explode(" ", $text);
  5.                 natCaseSort($text);
  6.                 foreach ($text as $element) {
  7.                     echo $element . "<br>";
  8.                 }
  9.                 ?></dd>
  10.  



РАБОТАЕТ!!!!!!!!!!! СПАСИБО!!!!!!!!!!!!! Укатываюсь Как вывести имена в алфавитном порятке? asort() но куда и что?


PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.             <dd><?PHP
  4.                 $text = $_POST['subject'];
  5.                 foreach ($text as $element) {
  6.                     echo $element . "<br>";
  7.                 }
  8.                 ?></dd>
  9.  
6. Vladimir Kheifets - 17 Апреля, 2021 - 19:42:27 - перейти к сообщению
asd123 пишет:

РАБОТАЕТ!!!!!!!!!!! СПАСИБО!!!!!!!!!!!!! Укатываюсь Как вывести имена в алфавитном порятке? asort() но куда и что?

PHP:
скопировать код в буфер обмена
  1. $text = $_POST['subject'];
  2. //$text = explode(" ", $text); нужно убрать. 2-пар в explode д.б. string
  3. natcasesort($text); //нечувствительный к регистру  или natsort($text);
7. asd123 - 17 Апреля, 2021 - 21:31:24 - перейти к сообщению
Vladimir, огромное Вам спасибо. Вы мне очень помогли. Поклон

 

Powered by ExBB FM 1.0 RC1