Учусь PHP. Условие задачи - сделать калькулятор: https://cloud.mail.ru/public/D6tj/Wd4Q3xSPU Получилось так: Код (PHP): // Функция отображения формы ввода. function show_form1() { echo '<html>'; echo '<head>'; echo "<title>Калькулятор</title>"; echo '</head>'; echo '<body>'; echo '<form action="calc.php" method="post" >'; echo '<input type="text" name="a" />'; echo ' + '; echo '<input type="text" name="b" />'; echo ' <input type="submit" value="=" />'; echo '</p>'; echo '<p>'; echo '<input type="text" name="c" />' . ' '; echo ' - '; echo '<input type="text" name="d" />'; echo ' <input type="submit" value="=" />'; echo '</p>'; echo '<p>'; echo '<input type="text" name="e" />'; echo ' x '; echo '<input type="text" name="f" />'; echo ' <input type="submit" value="=" />'; echo '</p>'; echo '<p>'; echo '<input type="text" name="a" />' . ' '; echo ' : '; echo '<input type="text" name="b" />'; echo ' <input type="submit" value="=" />'; echo '</form>'; echo '</p>'; echo '</body>'; echo '</html>'; } // Функция вывода результата. function show_result($a, $b, $c, $d, $e, $f, $q, $g) { $resultz = $a + $b; $result_ = $c - $d; $resultx = $e * $f; if ($g != 0) { $result_division = $q / $g; } else ($result_division = 'Делить на 0 нельзя!'); echo '<html>'; echo '<head>'; echo "<title>Калькулятор</title>"; echo '</head>'; echo '<body>'; echo '<form action="calc.php" method="post" >'; echo '<p>'; echo '<input type="text" name="a" />'; echo ' + '; echo '<input type="text" name="b" />'; echo ' <input type="submit" value="=" />'; echo " <b>$resultz</b>"; echo '</p>'; echo '<p>'; echo '<input type="text" name="c" />' . ' '; echo ' - '; echo '<input type="text" name="d" />'; echo ' <input type="submit" value="=" />'; echo " <b>$result_</b>"; echo '</p>'; echo '<p>'; echo '<input type="text" name="e" />'; echo ' x '; echo '<input type="text" name="f" />'; echo ' <input type="submit" value="=" />'; echo " <b>$resultx</b>"; echo '</p>'; echo '<p>'; echo '<input type="text" name="q" />' . ' '; echo ' : '; echo '<input type="text" name="g" />'; echo ' <input type="submit" value="=" />'; echo " <b>$result_division</b>"; echo '</p>'; echo '</form>'; echo '</body>'; echo '</html>'; } // Точка входа. // Показываем результат операции или форму ввода. if (isset($_POST['a']) && isset($_POST['b'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } elseif (isset($_POST['c']) && isset($_POST['d'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } elseif (isset($_POST['e']) && isset($_POST['f'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } elseif (isset($_POST['q']) && isset($_POST['g'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } else { show_form1(); } На экран выводится корявый результат: https://cloud.mail.ru/public/3Nz5/69vqFRbFg Во-первых, при выводе результата во всех полях input по умолчанию стоят нули и при выполнении одной операции выводятся результаты и остальных операций с нулями. Во-вторых, самое главное неудобство: при выводе результата операции в полях input исчезают введенные числа и поэтому не видно с какими числами производилось вычисление. После отправки формы не сохраняются на экране введенные данные, а выводится только результат вычислений. Можно-ли устранить и как эти недостатки? При условии, что урок по кукам и сессиям еще не пройден.
да, можно, выше сказали как. Все полученные данные от пользователя пропускай через https://secure.php.net/manual/ru/function.htmlentities.php чтобы избежать XSS. http://phpfaq.ru/tech/safety
в коде в комментариях описал свои мысли Код (PHP): // Функция вывода результата. function show_result($a, $b, $c, $d, $e, $f, $q, $g) { // это вывод всего, что пришло по POST запросу в похожем на объявление массива виде // так удобно отлаживать работу. Вы ему переменную, он Вам - тип и содержимое. // Присмотритесь к ниму по внимательнее :-) var_dump($_POST); $resultz = $a + $b; $result_ = $c - $d; $resultx = $e * $f; if ($g != 0) { $result_division = $q / $g; } else ($result_division = 'Делить на 0 нельзя!'); echo '<html>'; echo '<head>'; echo "<title>Калькулятор</title>"; echo '</head>'; echo '<body>'; echo '<form action="calc.php" method="post" >'; echo '<p>'; // я сделал подстановку для двух полей, дальше можно развить по аналогии // в input есть поле value - оно задаёт стартовое значение для элемента управления // теги html терпят использование как ' ', так и " ". Только желательно что-то одно echo "<input type='text' name='a' value='$a'/>"; // !!!!!!!!!!!! echo ' + '; echo "<input type='text' name='b' value='$b'/>"; // !!!!!!!!!!!! echo ' <input type="submit" value="=" />'; echo " <b>$resultz</b>"; echo '</p>'; echo '<p>'; echo '<input type="text" name="c" />' . ' '; echo ' - '; echo '<input type="text" name="d" />'; echo ' <input type="submit" value="=" />'; echo " <b>$result_</b>"; echo '</p>'; echo '<p>'; echo '<input type="text" name="e" />'; echo ' x '; echo '<input type="text" name="f" />'; echo ' <input type="submit" value="=" />'; echo " <b>$resultx</b>"; echo '</p>'; echo '<p>'; echo '<input type="text" name="q" />' . ' '; echo ' : '; echo '<input type="text" name="g" />'; echo ' <input type="submit" value="=" />'; echo " <b>$result_division</b>"; echo '</p>'; echo '</form>'; echo '</body>'; echo '</html>'; } // Точка входа. // это расскажет о том, что переменная, в данном случае, есть всегда, но в ней ничего нет. // стоит подумать использовать empty вместо isset if (isset($_POST['a'])) { echo "EEEEEE MMMM AAAAA EEEE !!!!"; }; // Показываем результат операции или форму ввода. if (isset($_POST['a']) && isset($_POST['b'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } elseif (isset($_POST['c']) && isset($_POST['d'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } elseif (isset($_POST['e']) && isset($_POST['f'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } elseif (isset($_POST['q']) && isset($_POST['g'])) { echo show_result($_POST['a'], $_POST['b'], $_POST['c'], $_POST['d'], $_POST['e'], $_POST['f'], $_POST['q'], $_POST['g']); } else { show_form1(); }
joshadow, большое спасибо за помощь! Все конкретно и понятно. Я ведь сам пробовал в теги input устанавливать в качестве атрибута значения переменные. Но у меня это не работало из-за неправильного использования кавычек. Оказывается формировать новую форму и не требуется, а достаточно и этих двух форм, если внести изменения в существующую форму! Мне кажется функция isset здесь уместна. if (isset($_POST['a']) означает: если системная переменная $_POST содержит параметр a. Попробовал использовать вместо isset и empty и !empty. Тогда некорректно выводится при первой загрузке калькулятора show_form1(): эта форма ввода загружается с предыдущими данными и результатами вычислений.