Предупреждение: деление на ноль

Я использую следующий статический метод для отправки почтовых оповещений, но выдает ошибку: warning:division by zero...

Postman::MailAlert($_POST['email'],'Hello '.$_POST['name'].', Thanks for signing up.Your customer id is '.$_POST['city']/'/'.$product_id.'.');

Я решил эту проблему, поставив @, но почему эта проблема возникает, и что я делаю не так?

5 ответов

Решение

Просто проблемная часть:

$_POST['city']/'/'.$product_id.'.');

Нужно изменить как это.

$_POST['city'] . '/'.$product_id.'.');

В конце этой строки кода:

[...]$_POST['city']/'/'[...]

Добавьте несколько пробелов, чтобы было понятно:

[...] $_POST['city'] / '/' [...]

Вы пытаетесь разделить $_POST['city'] от '/', Если нечисловые строки ('/') интерпретируются PHP как имеющие числовое значение 0, тогда вы делитесь на 0.

Может быть, вы хотели объединить вместо разделения?

Ты должен использовать

Postman::MailAlert($_POST['email'],'Hello '.$_POST['name'].', Thanks for signing up.Your customer id is '.$_POST['city'].'/'.$product_id);

$_POST['city']/'/' должен стать $_POST['city'].'/', распространенная ошибка, когда вы печатаете быстро

$_POST['city']/ <--- что здесь делает этот слеш? Я считаю, что это избыточно.;)

И только примечание - вы дезинфицируете ввод пользователя? Я вижу, что вы напрямую используете переменные массива $ _POST - не делайте этого. Пользователи могут представить здесь что угодно, даже несколько неприятных строк, и вы несете ответственность за то, чтобы они не скомпрометировали ваше приложение.

PS: Добавление @ является плохой практикой, поскольку оно подавляет только сообщения об ошибках (устранение симптомов), но не устраняет причину. http://php.net/manual/en/language.operators.errorcontrol.php

Другие вопросы по тегам