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 连接服务器的路径 [关闭]
如何修改我的 PHP 和 HTML 代码以从 MySQL 下载文件