Мой скрипт PhP не записывается в мою базу данных MySql

0

Я начал изучать PHP, и мне нужна ваша помощь, потому что я пытаюсь написать в моей базе данных MySQL. Сценарий кажется прекрасным (для меня: D), и он не дает мне ошибок. Но когда я отправляю запрос, данные не отображаются в моей базе данных MySQL. Не могли бы вы мне помочь, пожалуйста?

Это мой код HTML/PHP:

<?php
session_start();
$_SESSION['message'] = '';

//connection variables

$host = '127.0.0.1';
$user = 'root';
$password = 'MyPassword';
$database= 'test';
$port= '3306';

//create mysql connection
$mysqli = new mysqli($host, $user, $password,$database,$port);
if ($mysqli->connect_errno) {
    printf("Connection failed: %s\n", $mysqli->connect_error);
    die();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $mysqli->real_escape_string($_POST['name']);
    $email = $mysqli->real_escape_string($_POST['email']);
    if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ('$name','$email')") == true) {
        $_SESSION['message'] = "registration succesfull! Added $name to the database";
    } else {
        $_SESSION['message'] = "User can't be added to the database";
    }
}
?>


    <!DOCTYPE html>
    <html>
        <center>
        <h1>Inputs</h1>
        <form class="form" action="welcome.php" method="post" autocomplete="off">
            <div class="alert alert-error"><?= $_SESSION['message'] ?></div>
     <input type="text" name="name" placeholder="Insert your name" /> <br>
     <input type="email" name="email" placeholder="Insert your email"/><br>
     <input type="submit" name="submit" placeholder="Submit"/>
        </form>
        </center>
    </html>

Это база данных: [Структура таблицы] [ Изображение 174551] 1 [Информация о базе данных] Изображение 174551

  • 0
    Вы не передали имя своей базы данных, вы можете передать его следующим образом: $ mysqli = new mysqli ($ host, $ user, $ password, $ db); после определения имени вашей базы данных в переменной $ db
  • 0
    Не могли бы вы включить всю соответствующую информацию в сам вопрос, а не ссылки на изображения на другом сайте?
Показать ещё 5 комментариев
Теги:

3 ответа

-1
Лучший ответ

У вас есть синтаксическая ошибка в вашем запросе, попробуйте изменить запрос INSERT в условии if здесь:

 if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ('$name','$email')") == true) {
        $_SESSION['message'] = "registration succesfull! Added $name to the database";
    } else {
        $_SESSION['message'] = "User can't be added to the database";
    }

Чтобы это было так:

  if ($mysqli->query("INSERT INTO contatti (name, email) 
             VALUES('$name', '$email')") == true) {
        $_SESSION['message'] = "registration succesfull! Added $name to the database";
    } else {
        $_SESSION['message'] = "User can't be added to the database";
    }
  • 0
    @AndreaFerrario вы можете сказать мне, что ошибка показывает?
  • 0
    Спасибо! Теперь он работает, я написал с самого начала скрипт с правильным синтаксисом, и теперь он работает!
Показать ещё 3 комментария
0

Вы должны использовать подготовленные инструкции для MYSQL и PHP, если это возможно, по крайней мере, чтобы защитить себя от SQL-инъекции (SO Ref).

Тем не менее, когда вы читаете эту строку:

if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ($name,$email)") == true)

Вы объединяете строки в свой SQL-запрос без кавычек, и строка запроса выглядит так: ($ name = 'test', $ email = 'test @test':

INSERT INTO 'contatti' ('name', 'email') VALUES (test,test@test): неправильный синтаксис

Вы должны избегать строк на SQL:

if ($mysqli->query("INSERT INTO 'contatti' ('name', 'email') VALUES ('$name', '$email' )") == true)

Результирующий запрос должен выглядеть так: INSERT INTO 'contatti' ('name', 'email') VALUES ('test','test@test')

Изменить: обратите внимание, что таблица (contatti) и имя поля (имя, адрес электронной почты) должны быть окружены обратными окнами, а не одинарные кавычки (я не могу избежать обратных ссылок в цитате), а переменные $ name и $ email по одинарным кавычкам

  • 0
    Я изменил запрос, и он все еще не работает. Я обновил скрипт
  • 0
    Кроме того, убедитесь, что ваш первичный ключ в phpMyAdmin (поле «id») имеет атрибут по умолчанию, установленный на «Default», а не «None», в противном случае вы должны указать значение «id» самостоятельно ...
Показать ещё 1 комментарий
0

Вместо этого используйте предварительные инструкции и параметры привязки: http://php.net/manual/en/mysqli-stmt.bind-param.php

Вы также можете отладить ответ сервера mysql с помощью error_list:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $stmt = $mysqli->prepare("INSERT INTO 'contatti' ('name', 'email') VALUES (?,?)");
    $stmt->bind_param('ss', $name, $email);
    if ($stmt->execute()) {
        /* ... */
    }
    else {
        $errors = $stmt->error_list;
        /* ... */
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню