HTML表单未使用PHP将数据发送到MySQL

5

我有一个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中没有任何内容显示。我甚至复制了一个之前创建的网站,但它仍然不起作用,哈哈。
我看到登录信息有变量,仍然将其放在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();
}

这是我的POST请求:

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


1
  1. 混合使用 mysql_*mysqli_* 是不正确的。
  2. 由于您正在使用 input type="file",因此在 PHP 端通过 $_FILES 进行检查。
- Alive to die - Anant
这里有很多问题。使用了 $_REQUEST,存在 SQL 注入漏洞,使用了过时的 API,HTML 缺失部分,连接对象奇怪等等。而且这里发布的所有答案都不完整或错误。 - tereško
请尝试此链接:https://www.eduonix.com/blog/web-programming-tutorials/learn-submit-html-data-mysql-database-using-php/ - AmalJo
9个回答

9

以下问题可能存在:

  1. 上传错误。在表单标签中使用enctype="multipart/form-data"。
  2. 正确填写Mysql_connect详细信息,即用户名、密码、Dbname。
  3. mysql_real_escape_string已过时。请使用mysqli。
  4. 重新检查你的列名,即name、supportingDoc。

3

你的html代码有误。每当你想使用input type file时,你需要将<form>标签放在<form enctype="multipart/form-data">中。如果你没有声明enctype,那么PHP无法读取文件。


2
你需要放置 <\p> 标签。
<form enctype="multipart/form-data"> 

上传文件时,请检查您的HTML代码是否正确。


1
根据PhpMyAdmin的截图显示,数据库运行在端口8889上,这意味着您需要以下代码: $con = mysqli_connect("localhost","xxx","xxx","xxx", 8889);

他没有使用mysqli...这被某些人认为是问题的一部分。 - tereško

1

除了 @tbi 的回答之外

  • 检查php.ini的最大post大小,如果大小超过php.ini中设置的大小,则会导致POST请求失败。

post_max_size=20M upload_max_filesize=20M

  • 检查您的SQL连接和数据库上的权限
  • 仅在需要上传文件时(出于安全原因)在表单中使用enctype="multipart/form-data"

  • 最后,请不要忘记绑定您的帖子参数以防止SQL注入Params Binding


1

对于未知的数据库错误,我只需在phpmyadmin中进入操作并更改数据库名称,问题就解决了。如果你还没有解决问题,请尝试一下。


仍然出现错误,指示数据库不存在。我也尝试了随机名称。我正在使用Scotchbox,所以不确定是否存在问题,但是其他人发布了他们的vagrant文件,但我不明白为什么这会成为一个问题。 - TomG103

1
  1. If you are using a default account on a local installation, then your connection code will probably look like this:

     <?php $con = mysqli_connect('localhost','root','');
                  mysqli_select_db('epboarding', $con); ?>
    
  2. use enctype="multipart/form-data" in form tag when you use file type.

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

3.更改以下行

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

to

       if (isset($_REQUEST['submit'])){
  1. 当像mysql一样提交数据时,纠正语法为mysqli。

1

除了其他人说的话,我认为我可以提供一个整洁的脚本和一些(希望)对您其他问题有用的资源。

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

使用 $_REQUEST[] 有什么问题?

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

对于你遇到的未知数据库错误,可能是由于你的数据库不存在、在PHP脚本中命名不正确或在本地主机上无法访问。
$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();
}

1

试一试

问题是点击提交按钮后,它没有触发 (isset($_REQUEST['name']))

更改它

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

因为你的按钮名称是“提交”。 使用SQL注入,例如:
$con->real_escape_string($_POST['name']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接