【问题标题】:html forms to sql tablehtml表单到sql表
【发布时间】:2016-05-03 07:07:17
【问题描述】:

我创建了一个名为“employee.php”的表单页面,用于接收用户数据。此外,我还有另一个名为 SQLConnectionProcess.php 的文件,其中包含将 employee.php 中的表单链接到 sql 表的代码。数据库的名称是“员工信息”,表的名称是“员工信息”。我正在使用 phpmyadmin 和 XAMPP 进行本地服务器测试。

employee.php 代码:

<html>
<body>

<form name="EmployeeDatabase" action="SQLConnectionProcess.php" method="post">

<link rel="stylesheet" href="css.css">

<h1>EMPLOYEE DATABASE</h1>

Employe Card NO: <input type="text" name="cardNO" ><br><br>
Employee NO: <input type="text" name="employeeNO" ><br><br>
Employee Name: <input type="text" name="employeename"><br><br>
Nationality: <input type="text" name="nationality"><br><br>
Profession: <input type="text" name="profession"><br><br>
DOB: <input type="text" name="DOB"><br><br>
DOJ: <input type="text" name="DOJ"><br><br>
DOA(VisitVisa): <input type="text" name="DOA"><br><br>
Company Code: <input type="text" name="companycode"><br><br>
Sponsor Code: <input type="text" name="sponsorcode"><br><br>
Visa Type: <input type="text" name="visatype"><br><br>
Status: <input type="text" name="status"><br><br>

<input type="submit" name="formSubmit" value="Submit">

</form>

</body>
</html>

SQLConnectionProcess.php 代码:

  <?php
if(isset($_POST['formSubmit'])){
  $cardNO= isset($_POST['cardNO']) ? $_POST['cardNO'] : 0;
  $employeeNO= isset($_POST['employeeNO']) ? $_POST['employeeNO'] : 0;
  $employeename= isset($_POST['employeename']) ? $_POST['employeename'] : "";
  $nationality= isset($_POST['nationality']) ? $_POST['nationality'] : "";
  $profession= isset($_POST['profession']) ? $_POST['profession'] : "";
  $DOB= isset($_POST['DOB']) ? $_POST['DOB'] : "";
  $DOJ= isset($_POST['DOJ']) ? $_POST['DOJ'] : "";
  $DOA= isset($_POST['DOA']) ? $_POST['DOA'] : "";
  $companycode = isset($_POST['companycode']) ? $_POST['companycode'] : 0;
  $sponsorcode= isset($_POST['sponsorcode']) ? $_POST['sponsorcode'] : 0;
  $visatype= isset($_POST['visatype']) ? $_POST['visatype'] : "";
  $status= isset($_POST['status']) ? $_POST['status'] : "";
  $con = mysqli_connect('localhost','root','','employee information');
  $sql = sprintf("INSERT INTO table_employee info(Employee Card NO,Employee NO,Employee Name,Nationality,Profession,DOB,DOJ,DOA(VisitVisa),Company Code,Sponsor Code,Visa Type,Status) VALUES ('','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",$cardNO,$employeeNO,$employeename,$nationality,$profession,$DOB,$DOJ,$DOA,$companycode,$sponsorcode,$visatype,$status);
  mysqli_query($con,$sql);
}
?>

但是当我从employee.php 提交表单时,我收到以下错误:

注意:未定义变量:emplo‌​yeeNO in C:\xampp\htdocs\test1\SQLConnectionProcess.php 第 16 行

注意:未定义变量:赞助商代码在 C:\xampp\htdocs\test1\SQLConnectionProcess.php 第 16 行

我无法找到错误的来源。请帮帮我

【问题讨论】:

  • 您是否输入了 emplo‌​yeeNO 和赞助商代码的数据?
  • 是的,尝试通过输入所有数据来提交您的表单,如果您收到它,请在您的客户端进行一些验证。其次,尝试调试问题并使用var_dump($_POST);exit; 来查看发布请求中的内容。
  • 我尝试在所有表格中输入数据。同样的错误仍然存​​在...
  • 再次查看我编辑的代码。我现在只是得到一个白屏
  • 是的,因为您没有在代码中的任何地方回显。请检查您的查询数据将被插入。

标签: php mysql


【解决方案1】:

使用isset() 防止出现上述错误。

<?php
if(isset($_POST['formSubmit'])){
  $cardNO= isset($_POST['cardNO']) ? $_POST['cardNO'] : 0;
  $employeeNO= isset($_POST['employeeNO']) ? $_POST['employeeNO'] : 0;
  $employeename= isset($_POST['employeename']) ? $_POST['employeename'] : "";
  $nationality= isset($_POST['nationality']) ? $_POST['nationality'] : "";
  $profession= isset($_POST['profession']) ? $_POST['profession'] : "";
  $DOB= isset($_POST['DOB']) ? $_POST['DOB'] : "";
  $DOJ= isset($_POST['DOJ']) ? $_POST['DOJ'] : "";
  $DOA= isset($_POST['DOA']) ? $_POST['DOA'] : "";
  $companycode = isset($_POST['companycode']) ? $_POST['companycode'] : 0;
  $sponsorcode= isset($_POST['sponsorcode']) ? $_POST['sponsorcode'] : 0;
  $visatype= isset($_POST['visatype']) ? $_POST['visatype'] : "";
  $status= isset($_POST['status']) ? $_POST['status'] : "";
  $con = mysqli_connect('localhost','root','','employee information');
  $sql = sprintf("INSERT INTO employee_info info(EmployeeCardNO,EmployeeNO,EmployeeName,Nationality,Profession,DOB,DOJ,DOA(VisitVisa),CompanyCode,SponsorCode,VisaType,Status) VALUES ('','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",$cardNO,$employeeNO,$employeename,$nationality,$profession,$DOB,$DOJ,$DOA,$companycode,$sponsorcode,$visatype,$status);
  mysqli_query($con,$sql);
}
?>

【讨论】:

  • 谢谢。我使用了上面的代码。没有更多的错误。只是空白页。这是否意味着它的工作?
  • 我还在学习使用 phpmyadmin,所以我还不知道数据库是否正在接收来自表单的输入
  • 我的表格名称是“员工信息”,数据库名称是“员工信息”。我应该担心我们在代码中使用的“table_employee 信息”吗? table_ 是做什么的?是我代码中表的语法还是名称?
  • 给表名employee_info 并从所有列名中删除空格。在 phpmyadmin 中进行更改后,我已经编辑了 sprintf 行使用。 @哥谭
  • 我们需要使用 isset() 来防止出现上述错误,它将检查数据是否存在于 post 中,如果不存在,则将其设置为 null 或 0。@SanzeebAryal
【解决方案2】:

不要依赖客户期望的数据。首先确保从$_POST 数组读取的每个数据都已设置。如果一个值不重要,您可以选择一个默认值。你可以用一个简短的函数来简化它

function get(&$var, $default = null)
{
  return isset($var) ? $var : $default;
}

$cardNO = get($_POST['cardNO'], 0);

如果所需的输入不存在,则必须通知用户。

然后永远不要将来自不安全来源(例如客户端)的字符串混合到 SQL 语句中。请改用准备好的语句。

$query_string = 'INSERT INTO `tablename` (`fieldname1`, `fieldname2`) VALUES (?,?);';
if($statement =  $mysqli_connection->prepare( $query_string ))
{ $statement->bind_param('s', $variable1);
  $statement->bind_param('s', $variable2);
  $statement->execute();
  // fetch the result...
}

有关更多信息,另请参阅PHP manual

应通过连接选项关闭模拟的预处理语句,否则在某些情况下仍可能进行编码攻击。

如果您需要访问标识符中包含空格的数据库,您可以用反引号括起来:

SELECT * FROM `table name with whitespaces`;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多