为什么$ value = $ _POST ['businessname'];从输入表格中读取名称?

时间:2014-10-14 21:01:22

标签: php mysql mysqli

我修正了错误:我必须在$ _Post [' businessname']之前加上@符号 正确的语法是:     $ value = @ $ _ POST [' businessname'];     $ sql =" INSERT INTO checkout(businessname)VALUES(' $ value')";

businessname是表单输入中的名称:     

在phpMyAdmin的mysql数据库中我有一个名为database_db的数据库,其中包含一个名为checkout的表,该表有一个字段/名称(在我的mysql中它是" Name"而不是" Field& #34;)名为" businessname"。

在我的checkout_form.php中,它通过以下行连接到我的checkout.php文件:

<form action="checkout_form.php" class="well first-form" action="<?php echo SITE_URL; ? >secured/checkout" id="questionnaireForm" name="sendMsg" novalidate="" method="post">

我有以下代码:

define('DB_NAME', 'database_db');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);

if(!$connection){
die('Could not connect: ' . mysqli_error());
}

$db_selected = mysqli_select_db($connection, DB_NAME);

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

echo 'Connected successfully';

$value = $_POST['businessname'];
$sql = "INSERT INTO checkout (businessname) VALUES ('$value')";

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

当我在浏览器中运行checkout_form.php时,我得到了第一行:     连接成功 然后我收到以下错误:

Notice: Undefined index: businessname in C:\wamp\www\folder\checkout_form.php on line 22

Warning: mysqli_query() expects at least 2 parameters, 1 given in  C:\wamp\www\folder\checkout_form.php on line 25

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\folder\checkout_form.php on line 26

为什么我会收到这些错误?

2 个答案:

答案 0 :(得分:0)

要修复错误,我们需要将正确的参数传递给被调用的函数。

使用过程版本时,

mysqli_query需要两个参数,而mysqli_error需要一个

尝试:

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

您的SQL查询也容易受到SQL注入......

答案 1 :(得分:0)

此代码存在一些问题:

  1. 一般:它易受注入攻击(考虑使用预先准备的语句http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
  2. PHP通知:您的帖子数组不包含商家名称字段。这可能是因为您尚未收到帖子回复(您可以使用isset检查)或者在html输入标记中将该字段命名为不同。
  3. 两个警告:您需要将连接标识符(如Overacheiver提及)传递给过程mysqli调用。