@fanus

По какой причине при переходе на страницу форма сама отправляет пустые данные на сервер?

Открываю форму и тут же появляется пустая строка в таблице базы данных.
<?php

  if (isset($_POST['btn'])) {
    $names = htmlspecialchars(trim($_POST['userName']));
    $email = htmlspecialchars(trim($_POST['userEmail']));
    $message = htmlspecialchars(trim($_POST['userMessage']));
  }

  $regArr = [
    'fb_name' => $names,
    'fb_email' => $email,
    'fb_message' => $message,
  ];

  // Вызываем функцию записи в базу данных из файла connect.php
  connect('feedback', $regArr);

  ?>


Функция Connect
function connect($table, $params) //Заносим данные в БД
{
  $host = 'localhost';
  $user = 'root';
  $password = '';
  $database = 'mysite';
  $connects = mysqli_connect($host, $user, $password, $database);

  $count = 0;
  $keys = '';
  $values = '';
  foreach ($params as $key => $value) {
    if ($count === 0) {
      $keys = $keys . $key;
      $values = $values . "'" . $value . "'";
    } else {
      $keys = $keys . ", " . $key;
      $values = $values . ", " . "'" . $value . "'";
    }
    $count++;

    $ins = "INSERT INTO $table($keys) VALUES($values)";
    mysqli_query($connects, $ins);
  }
}
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
irishmann
@irishmann
Научись пользоваться дебаггером
connect('feedback', $regArr); Засунь в блок if (isset($_POST['btn'])) {
Эта функция у тебя вызывается без условия в любой момент, отсюда и пустые записи в бд

upd: короче как-то так должно выглядить
<?php
if (isset($_POST['btn'])) {
    $names = htmlspecialchars(trim($_POST['userName']));
    $email = htmlspecialchars(trim($_POST['userEmail']));
    $message = htmlspecialchars(trim($_POST['userMessage']));

    $regArr = [
        'fb_name' => $names,
        'fb_email' => $email,
        'fb_message' => $message,
    ];

    // Вызываем функцию записи в базу данных из файла connect.php
    connect('feedback', $regArr);
}
?>


Ну и совет использовать подготовленные запросы, а то sql-injection так можно поймать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы