HTML-форма не отправляет данные в MySQL с помощью PHP

у меня есть форма в HTML, но она не настроена, как обычно, я думаю. Я отправлю код из файла HTML (PHP) и php, чтобы отправить его в БД.

<form action="upload.php" method="POST">
    <!-- Name input-->
    <div class="form-group">
      <label class="control-label" for="name">Name</label>
      <div class="">
        <input id="name" name="name" placeholder="First and Last Name" class="form-control input-md" type="text" required>
      </div>
    </div>
    <div class="form-group">
        <label class=" control-label" for="supportingDoc">Upload Supporting Documentation</label>
        <div class="">
            <input id="supportingDoc" name="supportingDoc" class="input-file" type="file" style="margin-top: .5em; margin-left: 4em;">
        </div>
    </div>
    <hr>
      <!-- Submit -->
      <div class="form-group">
        <label class="control-label" for="submit"></label>
        <div class="">
          <button value="Submit" type="submit" id="submit" name="submit" class="btn btn-danger" style="border-radius: 25px;">Submit</button>
        </div>
      </div>
</form>

вот мой SQL / PHP

<?php
    $servername = "localhost";
    $username = "xxx";
    $password = "xxx";
    $dbname = "xxx";
    // Create connection
    $con = mysqli_connect("localhost","xxx","xxx","xxx");
    // Check connection
    if (mysqli_connect_errno()){
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    if (isset($_REQUEST['name'])){
        // set variables

        $name = mysql_real_escape_string($_POST['name']);
        $supportingDoc = mysql_real_escape_string($_POST['supportingDoc']);

        $sql = "INSERT INTO `tablew` (name,  supportingDoc) VALUES ('$name', '$supportingDoc')";
        $result = mysqli_query($con,$sql);

        if ($con->query($sql) === TRUE) {
            echo "New record created successfully";
            printf("New record created successfully");
        } else {
            echo "Error: " . $sql . "<br>" . $con->error;
            printf("Error: " . $sql . "<br>" . $con->error);
        }

        $con->close();
    }
?>

Я пробовал все виды вариаций, и ничего не показывает в phpmyadmin. Я даже реплицировал с предыдущего сайта, который я создал, и он все еще не работал lol.

Я вижу, что есть переменные для информации о входе в систему и все еще помещаю ее в mysqli, но я был на это одна вещь около 8 часов сейчас и из сока, поэтому, надеюсь, кто-то видит, что я испортил.

заранее спасибо за любую помощь всем.

=========================================================================== ОБНОВЛЕНИЕ: Я сделал все изменения, упомянутые выше, и теперь получаю это:

предупреждение: mysqli_connect(): (HY000/1049): неизвестная база данных

Я вижу базу данных в phpmyadmin и Sequel Pro. Я также сделал обязательно установите пароль и логин в "root". Мой код для входа в систему выглядит следующим образом:

    $con = mysqli_connect("localhost","root","root","epboarding");
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

и это мой пост:

if (isset($_REQUEST['submit'])){
// set variables
$name = mysqli_real_escape_string($con, $_POST['name']);
$sql = "INSERT INTO `wos` (name) VALUES ('$name')";
$result = mysqli_query($con,$sql);

phpmyadmin

mysql error

9 ответов


какие проблемы могут быть:

  1. ошибка загрузки. Используйте enctype= "multipart / form-data" в теге формы.
  2. исправьте детали Mysql_connect, т. е. имя пользователя, пароль, Dbname.
  3. mysql_real_escape_string является depricated. Использовать в mysqli.
  4. перепроверьте имена столбцов, т. е. имя, supportingDoc.

ваш html-код неверен. Всякий раз, когда вы хотите использовать файл типа ввода, вам нужно поставить <form> tag to <form enctype="multipart/form-data">. Если вы не объявляете enctype, тогда PHP не может прочитать файл.


вы должны поставить

<form enctype="multipart/form-data"> 

при загрузке файла . исправьте html.


Попробуй Такое

проблема заключается в том, что после нажатия кнопки "Отправить" он не нажимает (isset($_REQUEST['name']))

изменить

if (isset($_REQUEST['submit'])){ //code here}

потому что вы имя кнопки Отправить.

используйте SQL-инъекцию, как

$con->real_escape_string($_POST['name']);

неизвестная ошибка базы данных. Я просто пошел на операции в phpmyadmin и изменил имя базы данных, и это сработало. попробуйте,если вы еще не исправили проблему.


в дополнение к @tbi ответ

  • проверить php.ini для максимального размера сообщения это приводит к сбою запроса POST, если размер превышает размер, установленный в php.ini

post_max_size=20M upload_max_filesize=20M

  • проверьте подключение SQL и ваши разрешения на DB
  • используйте enctype= "multipart / form-data" в вашей форме только тогда, когда вам нужно загрузить файлы (по соображениям безопасности)

  • наконец, не забудьте связать свой пост параметры для предотвращения SQL-инъекции Параметры Привязки


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

     <?php $con = mysqli_connect('localhost','root','');
                  mysqli_select_db('epboarding', $con); ?>
    
  2. используйте enctype= "multipart / form-data" в теге формы при использовании типа файла.

      <form  name="" method="POST" action="" enctype="multipart/form-data"> 
    

3.измените следующую строку

    if (isset($_REQUEST['name'])){

to

       if (isset($_REQUEST['submit'])){
  1. исправьте синтаксис при публикации данных, таких как mysql в mysqli.

на скриншоте PhpMyAdmin похоже, что база данных работает на порту 8889, что означает, что вам понадобится:

$con = mysqli_connect ("localhost","xxx","xxx", "xxx", 8889);


в дополнение к тому, что другие сказали, я думал, что я предоставлю очищенный скрипт и некоторый (надеюсь) полезный ресурс для вас другие вопросы.

http://php.net/manual/en/mysqli.construct.php

что не так с использованием $_REQUEST[]?

https://www.w3schools.com/sql/sql_injection.asp

Что касается вашей неизвестной ошибки базы данных, это либо ваша база данных не существует, неправильно названа в вашем PHP скрипте или недоступен через localhost.

$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";

// Create connection
$conn = new mysqli ( $servername, $username, $password, $dbname );

// Check connection
if ( $conn->connect_error ) {
    echo "Failed to connect to MySQL: " . $conn->connect_error;
}

// Check if values are set with post rather than request, as this is deprecated and can output unexpected results
if ( isset( $_POST['name'] ) ) {
    // Set variables
    $name = $_POST['name'];
    $supportingDoc = $_POST['supportingDoc'];

    // Prepare a statement and bind parameters to prevent sql injection
    $stmt = $conn->prepare( "INSERT INTO `tablew` (name,  supportingDoc) VALUES (?, ?)" );
    $stmt->bind_param( 'sb', $name, $supportingDoc );

    if ( $stmt->execute() ) {
        echo "New record created successfully";
        printf( "New record created successfully" );
    } else {
        echo "Error: " . $stmt->error;
        printf( "Error: " . $stmt->error );
    }
    $stmt->close();
    $conn->close();
}