用于测试的简单表单的PHP / MySQL错误(我正在尝试自学一些MySQL / PHP)

时间:2013-11-15 16:54:23

标签: php mysql

好的,首先,我是PHP和MySQL的新手,所以如果我要问一些愚蠢的问题,我很抱歉: 我试图创建的页面有4个表单和一个提交按钮,我想在点击提交时将所有这些信息发送到数据库,但我有这些错误:

Notice: Undefined index: submit in C:\XAMPP\htdocs\SQLtesting\index.php on line 37

Notice: Undefined variable: sql in C:\XAMPP\htdocs\SQLtesting\index.php on line 45

Warning: mysqli_query(): Empty query in C:\XAMPP\htdocs\SQLtesting\index.php on line 45

以下是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <meta name="author" content="abcde" />

    <title>Untitled 2</title>
</head>

<body>

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="User">
    First Name:
    <input type="text" name="firstName" /> <br />
    Last Name: 
    <input type="text" name="lastName" /> <br />
    E-mail:
    <input type="text" name="email" /> <br />
    Phone Number:
    <input type="text" name="phoneNumber" /> <br />
    <input type="submit" name="submit" />
</form>
<?php
$con=mysqli_connect("localhost","root",'',"test_1");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
if(isset($_POST['submit'])){
    $firstName = $_POST['firstName'];
    $lastName = $_POST['lastName'];
    $email = $_POST['email'];
    $phoneNumber = $_POST['phoneNumber'];
}
if($_POST['submit'])
{
$sql="INSERT INTO test_1_1(id,firstName, lastName, email, phoneNumber)
VALUES
('','$_POST[firstName]','$_POST[lastName]','$_POST[email]', '$_POST[phoneNumber]')";
echo "1 record added";
}

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }

mysqli_close($con);
?>
</body>
</html>

我也注意到如果我写

$sql="INSERT INTO test_1_1(id,firstName, lastName, email, phoneNumber)
VALUES
('','$_POST[firstName]','$_POST[lastName]','$_POST[email]', '$_POST[phoneNumber]')";

根本没有if条件我不会得到

Warning: mysqli_query(): Empty query in C:\XAMPP\htdocs\SQLtesting\index.php on line 45

错误但代码会在开头添加一个空行。

我正在使用XAMPP在本地计算机上运行它。

4 个答案:

答案 0 :(得分:1)

在尝试运行查询之前,必须确保设置$ _POST ['submit']。尝试:

if(isset($_POST['submit'])){

    $firstName = $_POST['firstName'];
    $lastName = $_POST['lastName'];
    $email = $_POST['email'];
    $phoneNumber = $_POST['phoneNumber'];

    $sql = "INSERT INTO test_1_1 (id,firstName, lastName, email, phoneNumber) 
          VALUES ('','$firstName','$lastName','$email', '$phoneNumber')";

    if (!mysqli_query($con,$sql)){
        die('Error: ' . mysqli_error($con));
    }

    echo "1 record added";
}

顺便说一句,您的代码对SQL注入是开放的。您可以通过熟悉prepared statements来解决这个安全漏洞。

答案 1 :(得分:0)

可能性很高:

if($_POST['submit']) {}

返回false并且$ sql var未填充

尝试添加

var_dump($sql);

之前

if (!mysqli_query($con,$sql))

答案 2 :(得分:0)

  • Notice: Undefined index: submit in C:\XAMPP\htdocs\SQLtesting\index.php on line 37

这意味着$_POST['submit']不存在。如果您不想收到警告,则应使用isset(...)检查是否存在而不是直接使用它。

  • Notice: Undefined variable: sql in C:\XAMPP\htdocs\SQLtesting\index.php on line 45

由于$_POST['submit']不存在,因此不执行if子句并且未填充$sql,错误在这里是自解释的。

  • Warning: mysqli_query(): Empty query in C:\XAMPP\htdocs\SQLtesting\index.php on line 45

这意味着查询字符串($sql未定义,因此默认为空字符串)为空。

答案 3 :(得分:0)

一切都与一切有关。首先 - 使用诸如var_dump之类的函数来转储$ _POST的内容。

我没有看到$ _POST ['submit']为空的原因,但我会为它添加一些值:

<input type="submit" name="submit" value="Hey!" />

检查条件和括号,这没有意义。见Wayne Whitty的回答是正确的。

我个人建议你使用一些php框架,尽管你花了更多的时间。它们通常包含很多示例,文档,它们通常旨在向您学习一些好习惯(编码风格......)。