Задание при приеме на работу

rash012

Новичок
Задание по PHP 1

Реализовать скрипт, выполняющий следующие действия:

Пользователь вводит число в форму на странице и нажимает кнопку «Ввод». После этого на страницу выводится таблица. В первом столбце – числа от 1 до 10, во втором – результат сложения числа из первого столбца с введенным, в третьем – результат умножения, в четвертом – результат деления.

Предусмотреть защиту от ввода некорректных данных (например, строк) выводить соответствующее предупреждение и предложение повторить ввод. Предусмотреть вывод в ячейках таблицы соответствующего сообщения «На 0 делить нельзя», если введен ноль.

файл form.html
Код:
<!DOCTYPE html>
<html>
<head>
  <meta charset="windows-1251">
  <title></title>
  <script>
    function validate(){
      if(isNaN(document.getElementById('number').value)){
        alert('Не число. Введите число.');
        return false;
      }
      return true;
    }
  </script>
</head>
<body>
  <form method="post" action="form.php" onsubmit="return validate()">
    <label>Число
    <input type="text" id="number" name="number">
    </label>
    <input type="submit" value="Ввод">
  </form>
</body>
</html>
файл form.php
Код:
<!DOCTYPE html>
<html>
<head>
  <meta charset="windows-1251">
  <title></title>
</head>
<body>
  <?php
    $number=$_POST['number'];
    function division($number1,$number2){
      if($number2==0){
        return 'На 0 делить нельзя';
      }
      return $number1/$number2;
    }

    echo '<table border="1">';
    for($i=1;$i<=10;$i++){
      echo '<tr><td>'.$i.'</td><td>'.($i+$number).'</td><td>'.$i*$number.'</td>';
      echo '<td>'.division($i,$number).'</td></tr>';
    }
    echo '</table>';
  ?>
</body>
</html>
Прислали замечания по коду

Недостатки:
1) Нет валидации на стороне сервера - есть только на стороне клиента
2) Два файла именно таким образом - неоправданно. Можно (и нужно!) разделить html и php. Но точка входа в приложение (обработки входящего запроса) должна быть одна.


Как сделать сделать валидацию на php с предложением повторить ввод?
и что имеется ввиду во втором пункте недостатков?
 

AnrDaemon

Продвинутый новичок
По п.2: Гуглить по ключевому слову "шаблонизация".
 

fixxxer

К.О.
Партнер клуба
rash012, почитай книжку по php, Котерова того же, там найдешь ответы на свои вопросы и на сотни других. Рано еще искать работу с таким уровнем знаний.
 

WMix

герр M:)ller
Партнер клуба
нормально решил )) по первому заданию не подипнешься)) как написали задание тек и получили!
 

Redjik

Джедай-мастер
rash012, почитай книжку по php, Котерова того же, там найдешь ответы на свои вопросы и на сотни других. Рано еще искать работу с таким уровнем знаний.
не согласен, основы синтаксиса парень знает, условия и циклы знает, на ноль даже проверку делает, судя по ТЗ там нужен ну соооовсем junior за 10к в месяц, пускай учат =))
 

Redjik

Джедай-мастер
нормально решил )) по первому заданию не подипнешься)) как написали задание тек и получили!
я бы вообще прикололся, все на js сделал =)))
правда есть одно НО
но можно же сделать тупо
PHP:
<?php
echo file_get_contents('digitizer_ftw.html');
rash012, все, что я написал в посте шутка, не делай так, от тебя другого ждут
 

rash012

Новичок
Исправил. Есть замечания?
PHP:
<html>
<body>
<form method="post" action="form.php">
    <input type="text" id="number" name="number">
  <input type="submit" value="Ввод">
</form>
<?php
$number = $_POST['number'];

function division($number1, $number2)
{
  if ($number2 == 0) {
    return 'На 0 делить нельзя';
  }
  return $number1 / $number2;
}

if (is_numeric($number)) {
  echo '<table border="1">';
  for ($i = 1; $i <= 10; $i++) {
    echo '<tr><td>' . $i . '</td><td>' . ($i + $number) . '</td><td>' . $i * $number . '</td>
    <td>' . division($i, $number) . '</td></tr>';
  }
  echo '</table>';
}
else if(empty($number)){
  echo 'Введите число';
}
else {
  echo 'Не число. Введите число.';

}
?>
</body>
</html>
 
Последнее редактирование модератором:

scorpion-ds

Новичок
Проверку на стороне сервера сделать надо было, про разделение никто не говорил, это уже как доработки. :cool:

В общем смотря какие им знания нужны, в том же WP о разделении трудно говорить ...
 

rash012

Новичок
Вроде что-то исправил.
Можно еще что-нибудь улучшить?
Есть ли косяки сейчас?

index.php
Код:
<?php
if (isset($_POST['submit']) && is_numeric($_POST['number'])) {
  $number = $_POST['number'];
  function division($number1, $number2)
  {
    if ($number2 == 0) {
      return 'На 0 делить нельзя';
    }
    return $number1 / $number2;
  }

  $array10 = array('sequence' => array(), 'addition' => array(), 'multiplication' => array(), 'division' => array());
  for ($i = 1; $i <= 10; $i++) {
    $array10['sequence'][$i] = $i;
    $array10['addition'][$i] = $i + $number;
    $array10['multiplication'][$i] = $i * $number;
    $array10['division'][$i] = division($i, $number);
  }
  include('table.php');
}elseif(isset($_POST['submit']) && !is_numeric($_POST['number'])){
  echo ('<p>Не число!</p>');
  include('form.html');
}
else {
  include('form.html');
}
table.php
Код:
<html>
<body>
<table border="1">
  <?php for ($i = 1; $i <= 10; $i++) { ?>
    <tr>
      <td><?= $array10['sequence'][$i] ?></td>
      <td><?= $array10['addition'][$i] ?></td>
      <td><?= $array10['multiplication'][$i] ?></td>
      <td><?= $array10['division'][$i] ?></td>
    </tr>
  <? } ?>
</table>
</body>
</html>
form.html
Код:
<html>
<body>
<form method="post" action="index.php">
  <label>Введите число
  <input type="text" name="number">
  </label>
  <input type="submit" value="Ввод" name="submit">
</form>
</body>
</html>
 

fixxxer

К.О.
Партнер клуба
избавиться вот от этого в коде
PHP:
'На 0 делить нельзя'
PHP:
echo ('<p>Не число!</p>');
и норм
 

WMix

герр M:)ller
Партнер клуба
выкинуть из кода html и кирилицу, не более, те код выкидывает нечто абстрактное типа $message = 'division by zero', возможно даже лучше константу или exception а во view уже нормальная ошибка, содержащая также html теги <p>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
AnrDaemon, думаю тут не курево, тут что-то потяжелее.
 
Сверху