Как правильно вставить данные в MySQL c помощью php?

Создаю простенькую форму для регистрации. Post запрос выполняется, но не происходит вставка данных в базу данных. Ошибок никаких не выводит тоже.
Подскажите, что я делаю не так.

if (isset($_POST['name']) && isset($_POST['email'])){
            $userName = $_POST['name'];
            $email = $_POST['email'];
            $company = $_POST['company'];

            include '../template/sql-connect.php';

            $db_server = mysql_connect($db_hostname, $db_username, $db_password);

            if(!$db_server) { die("Query error"); }

          $query = "INSERT INTO users (name, email, company) VALUES" .
                 "('$userName', '$email', '$company')";

           if (!mysql_query($query, $db_server))
                 echo "INSERT failed: $query<br>" .
                 mysql_error() . "<br><br>";

            mysql_close($db_server);
        }
  • Вопрос задан
  • 2814 просмотров
Решения вопроса 1
san4ooo
@san4ooo Автор вопроса
Спасибо всем за советы (полезные и не очень). Разобрался с MySQLi, и реализовал это дело так:

header("Content-Type: text/html; charset=utf-8");

        $userName = $_POST['name'];
        $email = $_POST['email'];
        $company = $_POST['company'];

        include_once '../template/sql-connect.php';

        $connection = new mysqli($db_hostname, $db_username, $db_password, $db_database);

        $query = "INSERT INTO `users` (`name`, `company`, `email`) VALUES ('$userName', '$company', '$email')";

        $result = $connection->query($query);

        $connection->close();


На данном этапе (я первый день учу пыху), мне такой реализации достаточно, не смотря на недостатки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
1. Добавить в код две переменные, $db_db с именем базы данных и $db_charset с кодировкой своего сайта (скорее всего utf8)
2. исправить запрос. Либо вставлять все поля, какие есть в таблице, либо перечислить вставляемые поля явно.
3. Прочитать про PDO
4. в ../template/sql-connect.php поместить код
$dsn = "mysql:host=$db_host;dbname=$db_db;charset=$db_charset";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO($dsn, $db_user, $db_pass, $opt);

5. В обработчике формы написать
$query = "INSERT INTO users (username, email,company)VALUES (?,?,?)";
$db->prepare($sql)->execute([$userName, $email, $company]);
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
if (isset($_POST['name']) && isset($_POST['email'])){

// ГДЕ ВАЛИДАЦИЯ ВХОДЯЩИХ ДАННЫХ???

            $userName = $_POST['name'];
            $email = $_POST['email'];
            $company = $_POST['company'];

// 2015-ый на дворе, PSR-4!!!

            include '../template/sql-connect.php';

// mysql_conneсt - устарел, го ОЧЕНЬ не рекомендуется использовать

            $db_server = mysql_connect($db_hostname, $db_username, $db_password);

// Use PSR-2 Luke!
// die - используй только в случае крайней необходимости во время дебага, в остальных ситуациях - это как правило хрень постная.
// Если уже пишешь ошибку - пиши конкретно, что не так "Query error" это примерно тоже самое, что и "oops.."

            if(!$db_server) { die("Query error"); }

// Возьму ка я и отправлю в $POST['company'] = "'); DROP TABLE users;"
// И баляля будет
// Входящие данные обязательно должны быть И провалидированы И экранированы.

          $query = "INSERT INTO users (name, email, company) VALUES" .
                 "('$userName', '$email', '$company')";

           if (!mysql_query($query, $db_server))
                 echo "INSERT failed: $query<br>" .
                 mysql_error() . "<br><br>";

            mysql_close($db_server);
        }


Ну и общее: следует разделять вывод данных и бизнес логику приложения, почитайте про MVC
Ответ написан
Вы в одно поле users вставляете 3 значения сразу.

$link = mysqli_connect('localhost','user','pass','basa') or die("Error " . mysqli_error($link));
if(mysqli_connect_errno())
    die('Ошибка соединения: '.mysqli_connect_error());
mysqli_set_charset($link, "utf8");

mysqli_query($link, "INSERT INTO `table` SET `username`='".$userName."', `email`='".$email."', `company`='".$company."' ") or die("Ошибка запроса: " . mysql_error());
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы