MySQL / PHP 数据库连接以从 Web 表单输入文本

Posted

技术标签:

【中文标题】MySQL / PHP 数据库连接以从 Web 表单输入文本【英文标题】:MySQL / PHP database connection to input text from a web form 【发布时间】:2015-03-20 11:33:53 【问题描述】:

我有一个简单的 Web 表单,我希望用户填写它,当他们单击提交按钮时,表单中的信息应插入到 mysql 数据库中的正确表中以供以后使用。我有一个名为 foundation_fitness 的数据库和一个名为 Client 的表。

我面临的问题是单击提交时出现此错误消息:

注意:未定义索引:C:\xampp\htdocs\ffitness\dist\new_client.php 第 19 行中的 exampleInputEmail1

注意:未定义索引:第 20 行 C:\xampp\htdocs\ffitness\dist\new_client.php 中的 forname1

注意:未定义索引:C:\xampp\htdocs\ffitness\dist\new_client.php 第 21 行中的 surname1

注意:第 22 行 C:\xampp\htdocs\ffitness\dist\new_client.php 中未定义的索引:height1

注意:未定义的索引:C:\xampp\htdocs\ffitness\dist\new_client.php 第 23 行中的 weight1

注意:未定义索引:C:\xampp\htdocs\ffitness\dist\new_client.php 第 24 行中的 bodyfat1

下面是我的 new_client.php 代码。 编辑:INSERT INTO 的 Foundation_fitness 更改为 Client

<?php

define('DB_NAME', 'foundation_fitness');
define('DB_USER', 'root');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER);

if (!$link) 
     die('Could not connect: ' . mysql_error());
     

     $db_selected = mysql_select_db(DB_NAME, $link);

     if (!$db_selected) 
     die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
     

     $value2 = $_POST['exampleInputEmail1'];
     $value3 = $_POST['forname1'];
     $value4 = $_POST['surname1'];
     $value5 = $_POST['height1'];
     $value6 = $_POST['weight1'];
     $value7 = $_POST['bodyfat1'];

     $sql = "INSERT INTO client (Client_email, Client_forename, Client_surname, Height, Weight, Body_fat) VALUES ('$value2', 
     '$value3', '$value4', '$value5', '$value6')";
    
    $result = mysql_query($sql);

     mysql_close();

我的html表单的代码如下:EDIT - 将method错误和id更改为name

<form action="new_client.php" method="POST">
        <div class="form-group">
          <label for="exampleInputEmail1">Email address</label>
          <input type="email" class="form-control" name="exampleInputEmail1" placeholder="Enter email">
        </div>
        <div class="form-group">
          <label for="forename1">Forename</label>
          <input type="text" class="form-control" name="forname1" placeholder="Enter First Name">
        </div>
        <div class="form-group">
          <label for="surname1">Surname</label>
          <input type="text" class="form-control" name="surname1" placeholder="Enter Surname">
        </div>
        <div class="form-group">
          <label for="height1">Height (cm)</label>
          <input type="text" class="form-control" name="height1" placeholder="Enter Height">
        </div>
        <div class="form-group">
          <label for="weight1">Weight (kgs)</label>
          <input type="text" class="form-control" name="weight1" placeholder="Enter Weight">
        </div>
        <div class="form-group">
          <label for="bodyfat1">Body Fat %</label>
          <input type="text" class="form-control" name="bodyfat1" placeholder="Enter Body Fat Percentage">
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
      </form>

任何有关错误和使 php 脚本正常工作的帮助将不胜感激!

编辑:我现在没有收到错误消息,因为我将方法错误和 id 更改为 HTML 表单中的名称。即使对应该是客户端的表名进行了额外更改,我仍然无法将信息获取到 mySQL 数据库的表中,因为我没有名为 Foundation_fitness 的表,即数据库名称。

【问题讨论】:

PHP: "Notice: Undefined variable" and "Notice: Undefined index" 的可能重复项 【参考方案1】:

您的INSERT 语句使用foundation_fitness 作为表名,与您的数据库名称相同。您对@notulysses 评论的回答表明表名应为client

INSERT INTO client ...

您能否确认您的foundation_fitness 数据库中有一个foundation_fitness 表。

编辑:

如果您的表名是Client,您的查询可能必须是INSERT INTO Client,因为表名可能区分大小写,具体取决于底层文件系统。此外,错误似乎发生在 mysql 级别,因此您可以通过这种方式更改代码以实际查看错误:

$result = mysql_query($sql);
if ($result !== false) 
    // everything is fine, proceed with script
 else 
    // Something went wrong :
    die(mysql_error($link)); // to see the error from MySQL

MySQL 的错误输出应该对您有很大帮助,如果没有,请在此处发布,以便我们进一步帮助您。

附带说明,mysql_connect 自 PHP 5.5 起已弃用,因此也许研究 PDO 将是重构代码的良好开端。

另一件事(非常重要):您的查询暴露于 SQL 注入,您在未经验证和/或清理的情况下获取用户输入。如果那是您的生产代码,您绝对需要修复它。您应该使用准备好的语句来保护自己免受 SQL 注入。

【讨论】:

我已经相应地更新了这个问题。你现在能给我的任何帮助都会很棒。【参考方案2】:

由于对同一页面的发布请求,您会收到这些通知。页面加载后,它会读取您的 php 代码,但找不到任何发布数据。 当您使用单个 php 文件时,即表单的“操作”正在将页面重定向到自身。因此,一旦您填写表格并单击提交,这些通知就会消失,因为数据是通过邮寄方式发送的。 您可以使用error_reporting(E_ALL ^ E_NOTICES) 隐藏这些通知。它隐藏了您收到的所有通知错误。 但我建议您使用不同的页面进行表单操作重定向,以将数据插入数据库,然后使用header('Location:newclient.php') 将该页面重定向回您的主页。

【讨论】:

【参考方案3】:

表示$_POST 数组中没有这样的键。如果您想稍后将它们用作$_POST 数组中的键,您应该为form 元素使用name 属性(而不是id)。另外,您有一个错字:mehtod 应该是您的 form 元素中的 method 属性。

【讨论】:

谢谢。我已将 id 属性更改为 name 尽管我仍然收到相同的错误? @user3573796:已更新。 太好了,现在可以正常工作了——好吧,我没有收到错误消息。虽然当我查看 mySQL 数据库时,还没有将数据插入到客户端表中。你知道为什么会这样吗?

以上是关于MySQL / PHP 数据库连接以从 Web 表单输入文本的主要内容,如果未能解决你的问题,请参考以下文章

执行 PHP 脚本以从 Android 连接服务器的路径 [关闭]

MySQL - 查询临时表以从表中检索 2 行

Android - PHP - Mysql 之间的持久连接

如何修改我的 PHP 和 HTML 代码以从 MySQL 下载文件

C#连接mysql数据库 无法读取数据库表中信息 求大神指点迷津!

PHP & MySQL数据库专题 第八课 表连接