mod_fcgid: stderr: PHP Notice: Undefined variable: name

158
20 февраля 2018, 07:30

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

$ip = $_SERVER['REMOTE_ADDR'];
include('modules/whois/whois.php');
$SxGeo = new SxGeo('modules/whois/whoiscity.dat'); 
$info = $SxGeo->getCountry($ip); 
$country = $info;
$post = array(
    'fio' => $name,
    'phone' => $phone,
    'country' => $country,
    'ip' => $ip,
);
$name = $_POST['name'];
$phone = $_POST['phone'];
if ($_POST) {    $data = array (
        'name' => $name,
        'phone' => $phone
        );
if($curl = curl_init()){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "******");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
$answer = curl_exec($ch);
curl_close($ch);
header ('Location: success.php');}} 
$name = $_POST['name'];
$phone = $_POST['phone'];
  $file = "data.log.txt";
    $message = "Имя: $name \n Телефон: $phone \n Страна: $country \n IP: $ip \n Цена: $price $currency  \n \n";
    $save_order = fopen($file, 'a+');
    fwrite($save_order, $message);
    fclose($save_order);}

а вот результат Имя:
Телефон:
Страна: RU IP: ******* Цена: ***** руб. Есть данные где имя и телефон записаны а есть пустые как выше

Answer 1

Прежде чем использовать данные пришедшие со стороны, нужно убедиться, что они есть и содержат то, что вы ожидаете.

Например так:

// методом post пришло имя и в нем строка длинной хотя бы 1 байт
$name = isset($_POST['name']) && is_string($_POST['name']) && strlen($_POST['name']) > 0 ? $_POST['name'] : null; 
// методом post пришел телефон и в нем строка длинной хотя бы 1 байт
$phone = isset($_POST['phone']) && is_string($_POST['phone']) && strlen($_POST['phone']) > 0 ? $_POST['phone'] : null; 
if (null !== $name && null !== $phone) {
    // тут все ваши обработки имени и телефона (и запрос к api, и сохранение данных)
}
READ ALSO
Перемещение обьектов

Перемещение обьектов

В каких случаях компилятор неявно создает конструктор перемещения и соответствующий оператор присвоения?

143
Некорректная работа функции sizeof()

Некорректная работа функции sizeof()

В процессе разработки, заметил некорректную работу программы, вынес проблему в отдельный проект

270
С++ вместо 0.0 выводит -0.0

С++ вместо 0.0 выводит -0.0

Сначала вместо нуля выводил экспоненту, поставил в сout setprecision(1) выводит -00 как с этим бороться? И как вместо nan вывести "*"

185