Здравствуйте! Столкнулся с такой проблемой! На локальном сервере, таких ошибок не было. Они выявились когда я залил сайт на хост. Сначала было это... потом, с добавление этой строчки, ошибки ушли но не совсем... Дело в том, что в самой форме, они остались Помогите пожалуйста решить. Поддержка на хостинге не может. Уже обращался! На форуме подсказали следующее... PHP: <?=$_POST['name'] ?? '';?> Но я не знаю куда его вставлять! Привожу свой код ниже: PHP: error_reporting(0); if(!empty($_POST['name'])){ $to = 'a.kovalkovsky@gmail.com'; $tema = 'Новое сообщение'; $name = strip_tags(trim($_POST['name'])); $email = strip_tags(trim($_POST['email'])); $skype = strip_tags(trim($_POST['skype'])); $sms = strip_tags(trim($_POST['sms'])); $message = "Имя пользователя: ".$name."\r\n"; $message .= "Почта: ".$email."\r\n"; $message .= "Skype: ".$skype."\r\n"; $message .= "Сообщение: ".$sms."\r\n"; $error = false; $err = array('email' => '', 'name' => '', 'sms' => ''); if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)){ $err['email'] = 'Вы ввели не корректный email'; $error = true; } if (empty($name)){ $err['name'] = 'Вы не ввели имя'; $error = true; } // if(!$error){ $tema = "=?utf-8?B?".base64_encode($subject)."?="; $headers = "From: $from\r\nReply-to: $from\r\nContent-type:text/plain; charset=utf-8\r\n"; mail($to, $tema, $message, $headers); // if(mail($to, $subject, $sms, $headers)){ // header('Location: /otzivi.php'); // } // } } HTML: <div class="popupcontact"> <div class="wrapper"> <div class="popupcontacttitle" id="about">Оставьте заявку сейчас и получите бесплатную консультацию!</div> <form id="form" method="post" action="form.php" class="popupform"> <input type="text" placeholder="Ваше имя" id="name" name="name" value="<?=$_POST['name']?>" /> <input type="e-mail" placeholder="Ваша почта" id="email" name="email" value="<?=$_POST['email']?>" /> <input type="text" placeholder="Ваш Skype" name="skype" value="<?=$_POST['skype']?>" /> <textarea name="sms" cols="5" rows="10" placeholder="Ваше сообщение" value="<?=$_POST['sms']?>"></textarea> <div> <button type="submit" id="sbm">Оставьте заявку</button> </div> </form> </div> </div>
Я ввёл вас в небольшое заблуждение, прошу ещё раз посмотреть на код. Я убрал всё лишнее... Касаемо, валидации и проверок поле, мне это не нужно. Мне нужно, чтобы не было этих ошибок: Код: PHP: $to = 'a.kovalkovsky@gmail.com'; $tema = 'Новое сообщение'; if(!empty($_POST['name'])){$name = strip_tags(trim($_POST['name']));} if(!empty($_POST['email'])){$email = strip_tags(trim($_POST['email']));} if(!empty($_POST['skype'])){$skype = strip_tags(trim($_POST['skype']));} if(!empty($_POST['sms'])){$sms = strip_tags(trim($_POST['sms']));} $message = "Имя пользователя: ".$name."\r\n"; $message .= "Почта: ".$email."\r\n"; $message .= "Skype: ".$skype."\r\n"; $message .= "Сообщение: ".$sms."\r\n"; $tema = "=?utf-8?B?".base64_encode($subject)."?="; $headers = "From: $from\r\nReply-to: $from\r\nContent-type:text/plain; charset=utf-8\r\n"; mail($to, $tema, $message, $headers);
Вы вообще меня не поняли! Я хочу решить проблему с ошибками, которые отображаются в браузере при загрузке страницы! Всё остальное потом!!! Вы можете помочь решить мне эти ошибки??? --- Добавлено --- Пробовал по разному, всё равно ошибка... PHP: if(isset($_POST['name'])){ $name = strip_tags(trim($_POST['name'])); } if(!empty($_POST['email'])){ $email = strip_tags(trim($_POST['email'])); }
Код (Text): error_reporting(0); $_POST['name']; В данном случае ошибка не будет выводиться, но так делать не нужно. Код (Text): @$_POST['name']; Так ошибка тоже не будет выводиться, и опять же, так делать не нужно. Код (Text): if ( !empty( $_POST['name'] ) ) { ... } И так ошибка не выведется, но такой вариант самый приемлемый. Можно еще так: Код (Text): if ( isset( $_POST['name'] ) ) { ... } О чем собственно говорили на пару комментов выше. Это что касается $_POST, а теперь о самих переменных внутри условий. Если переменную объявить внутри условия Код (Text): if ( !empty( $_POST['name'] ) ) { $name = 'тра-ля-ля'; } То она будет доступ только после того, как условие будет истиной. Если же будет ложь, тогда переменная в памяти не будет создана и вызывая ее за пределами условия, интерпретатору php нечего будет вам вернуть, переменной ведь нет. Как с этим бороться? Можно объявить переменную в самом начале. Код (Text): $name = ''; if ( isset( $_POST['name'] ) ) { $name = $_POST['name']; } echo $name;
на хостинг. любой компьютер можно назвать "хост", это практически синонимы. на самом деле ситуация должна быть обратная: на локальном хосте надо включить вывод всех предупреждений, а на публичном хостинге выключить. рулится это настройкой http://php.net/manual/ru/errorfunc.configuration#ini.error-reporting на локалке надо бороться с причинами предупреждений, не подавляя сообщения. в публичном пользовании такие сообщения конечно лишние. они демонстрируют твой истинный уровень разработчика и кричат "ломай меня полностью".
Эх, заранее извиняюсь за оффтоп, но после таких тредов появляется желание выговориться. Как же мне жаль, как же мне с*ка жаль что даже в седьмой версии ванильный PHP позволяет ляпать такое, и оно даже будет выполняться, хоть и с вагоном нотисов. Вот не понимаю я почему разработчики до сих пор оставили такую возможность а не порезали ее к фигам собачьим? Вот в laravel как сделано, вот это я понимаю! Используешь неинициализированную переменную? Лови фаталочку! Не обработал исключение от неудачного запроса к MySQL? Нафиг с пляжа! Пытаешься обратиться к полю не-объекта? Давайгуляй! И это правильно и круто! Хотя бы по тому что такой подход дисциплинирует программиста, заставляет его лучше анализировать поведение своего кода, что в конечном счете положительно сказывается на качестве конечного продукта. Ну и с точки зрения саморазвития, человеку будет легче изучить какой нибудь новый язык, уже зная что переменные НУЖНО объявлять, а исключения НУЖНО ловить. По моему мнению так должно быть по дефолту, а не с помощью огорода из кастомных обработчиков ошибок фреймворков, не понимаю почему ребята из Zend (или кто сейчас рулит разработкой PHP) так боятся зарубить на корню старую парадигму, порождающую безалаберность в написании кода и сделать реализовать в PHP "взрослую" обработку ошибок (а нотис таки да, ошибка), а может даже и (опциональную) статическую типизацию везде, а не только в аргументах методов и функций, а для любителей, которые "знают толк" сделать директиву на подобии Код (Text): 'use lame'; , чтобы они дальше могли писать свои собачки и обращаться к $undefined. PS: извините если кто-то принял мои слова на свой счет, уверяю вас, мои мысли абстрактны и не относятся к конкретным людям. Последнее время порой приходится разбирать и вносить правки в быдлокод, написанный на коленке в режиме "шобработало" и у меня горит так, что отдел снабжения задолбался уже стулья менять.
@Алексей87К Проверяй переменную функцией empty(); с твоими ошибками легко бороться они самые примитивные у начинающих php кодеров, я тоже как бы начинающий так что слушай ребят которые тебе советуют выше. --- Добавлено --- @alexpride1993 Правильно иногда нужно выговорится, чтобы опустило.
В целом согласен: беспощадность это благо в процессе разработки. Сам вывод ошибок опять же зависит от настроек, на локалке ошибки должны выводиться подробно, на публичном хостинге максимум "Упс, что-то пошло не так".
Тру вэй PHP: <?php $name = filter_input(INPUT_POST, 'name'); if ($name !== null) { /* обработка формы */ } ?> <form method="POST"> <input type="text" name="name" value="<?=$name?>"> функция filter_input создана для правильного получения переменных запроса.
Согласен, кривыми настройками можно испортить все что угодно, я говорил скорее о поведении системы по умолчанию, без самовольного вмешательства в папку vendor. У меня к ваниле претензии в плане стратегии обработки ошибок. Если лара обнаружив косяк немедленно остановит исполнение скрипта и вывалит в ответ код 500, то ванила сглотнет и пойдет бежать дальше, используя в дальнейших расчетах непредсказуемый, ошибочный результат, и если в ларе нужно ковыряться в настройках чтобы переопределить поведение немедленного останова скрипта, то в ванильном PHP наоборот, нужно прилагать усилия чтобы реализовать его. Это обстоятельство, особенно в умах начинающих программистов, которые только постигают язык и не готово лезть в глубины конфигов и фреймворков, и используют настройки по умолчанию для своих первых скриптов, порождает неправильное отношение к ошибкам в принципе, они начинают считать что notice это что-то не серьезное, в то время как это наигрубейшая ошибка, ведущая к неправильному исполнению скрипта. Если это форма обратной связи, в которой половину полей можно просто не заполнять, да и хрен с ней, но вот давайте представим что чувак, укрепленный тем что его детище работает берется писать что нибудь серьезное, например инструмент для интеграции с платежным сервисом, и в один прекрасный момент может настать ситуация, когда сервис запросит баланс, скрипт его не получит из-за сбоя MySQL и вместо вылета вернет NULL, который пойдет в ответ сервису, а тот спишет все деньги с клиента. Именно по этому, чтобы душить такой стиль кодинга в зародыше и не допускать подобных ситуаций как в моем примере я и хотел бы чтобы изначально, на самых самых дефолтных настройках пых бил скрипт в ответ на любой пук и чих не давая исполняться говнокоду. PHP замечательный язык и мне он очень нравится, но у него есть огромная проблема - на нем слишком легко писать очень плохой код, и было бы круто если бы такую возможность убрали, для всеобщего блага.
Здравствуйте! Мне посоветовали объявлять переменные в самом начале и это сработало... Но в полях формы, они по прежнему выводятся
PHP: <?php include_once('functions.php'); /* ФИЛТРАЦИЯ ! ! ! */ $to = 'a.kovalkovsky@gmail.com'; $tema = 'Новое сообщение'; $name = ''; $email = ''; $skype = ''; $sms = ''; $subject = ''; $from = ''; if(!empty($_POST['name'])){$name = strip_tags(trim($_POST['name']));} if(!empty($_POST['email'])){$email = strip_tags(trim($_POST['email']));} if(!empty($_POST['skype'])){$skype = strip_tags(trim($_POST['skype']));} if(!empty($_POST['sms'])){$sms = strip_tags(trim($_POST['sms']));} $message = "Имя пользователя: ".$name."\r\n"; $message .= "Почта: ".$email."\r\n"; $message .= "Skype: ".$skype."\r\n"; $message .= "Сообщение: ".$sms."\r\n"; $tema = "=?utf-8?B?".base64_encode($subject)."?="; $headers = "From: $from\r\nReply-to: $from\r\nContent-type:text/plain; charset=utf-8\r\n"; mail($to, $tema, $message, $headers); HTML: <div class="popupcontact"> <div class="wrapper"> <div class="popupcontacttitle" id="about">Оставьте заявку сейчас и получите бесплатную консультацию!</div> <form id="form" method="post" action="form.php" class="popupform"> <input type="text" placeholder="Ваше имя" id="name" name="name" value="<?=$_POST['name']?>" /> <input type="e-mail" placeholder="Ваша почта" id="email" name="email" value="<?=$_POST['email']?>" /> <input type="text" placeholder="Ваш Skype" name="skype" value="<?=$_POST['skype']?>" /> <textarea name="sms" cols="5" rows="10" placeholder="Ваше сообщение" value="<?=$_POST['sms']?>"></textarea> <div> <button type="submit" id="sbm">Оставьте заявку</button> </div> </form> </div> </div>
Я вас понял, и исправил, но всё равно не помогло... HTML: <div class="popupcontact"> <div class="wrapper"> <div class="popupcontacttitle" id="about">Оставьте заявку сейчас и получите бесплатную консультацию!</div> <form id="form" method="post" action="form.php" class="popupform"> <input type="text" placeholder="Ваше имя" id="name" name="name" value="<?=$name?>" /> <input type="e-mail" placeholder="Ваша почта" id="email" name="email" value="<?=$email?>" /> <input type="text" placeholder="Ваш Skype" name="skype" value="<?=$skype?>" /> <textarea name="sms" cols="5" rows="10" placeholder="Ваше сообщение" value="<?=$sms?>"></textarea> <div> <button type="submit" id="sbm">Оставьте заявку</button> </div> </form> </div> </div> --- Добавлено --- Извините, но кажется помогло!!!