使用php将用户提交的信息发布到mysql数据库

时间:2015-08-05 07:08:37

标签: php mysql database

我无法让我的代码工作。我是php / mysql的新手,但我确信我正在做大部分事情。我没有收到任何错误。使用下面发布的代码,如果我将信息放入feilds并单击按钮,屏幕似乎刷新,但是当我检查我创建的mysql数据库时,该信息不存在。我知道我与数据库的连接正常,因为我已将伪数据输入到数据库中,并且网页正在将其拉出并显示它。

db.php是一个单独的文件,其中包含用于连接数据库的格式化的PHP代码(服务器,用户名,密码),我知道这很有用,因为这也是我将数据拉入网页的方式。如果需要,我的服务器设置为php 4.0.10.7,不幸的是我不能改变它。

所以,这是我的代码:

<div class="a" id="add_customer">
<form id="customerdata" name="customerdata">
<input type="text" align="center" id="name" name="NAME" placeholder="Customer Name">
<input type="text" align="center" id="address" name="ADDRESS" placeholder="Address">
<b>Paid?:</b>
<select id="PAID" name="PAID">
<option value="select">Make a Selection</option>
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
<input type="text" align="center" id="comments" name="COMMENTS" placeholder="Comments">
<input type="submit" id="submit" name="submit" value="Add Customer">
</form>
</div>


<?php
if(isset($_POST['submit']))
{
include('db.php');
$database="mysql_database";

$con = mysql_connect($server,$username,$password);

$sql="INSERT INTO mysql_database (NAME, ADDRESS, PAID, COMMENTS)
VALUES
('$_POST[NAME]','$_POST[ADDRESS]','$_POST[PAID]','$_POST[COMMENTS]')";
$a=mysql_query($sql);

if (!$a)
{
die("Error addding record. " . mysql_error());
}
else
{
echo "1 record added";
}
mysql_close($con);
}
?>

6 个答案:

答案 0 :(得分:1)

<div class="a" id="add_customer">
<form id="customerdata" name="customerdata" method="post">
<input type="text" align="center" id="name" name="name" placeholder="Customer Name">
<input type="text" align="center" id="address" name="address" placeholder="Address">
<b>Paid?:</b>
<select id="paid" name="paid">
<option value="select">Make a Selection</option>
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
<input type="text" align="center" id="comments" name="comments" placeholder="Comments">
<input type="submit" id="submit" name="submit" value="Add Customer">
</form>
</div>


<?php
if(isset($_POST['submit']))
{
include('db.php');
$database="mysql_database";

$con = mysql_connect($server,$username,$password);
$name = $_POST['name'];
$address= $_POST['address'];
$paid= $_POST['paid'];
$comments= $_POST['comments'];
$sql="INSERT INTO mysql_database (NAME, ADDRESS, PAID, COMMENTS)
VALUES
('$name','$address','$paid','$comments')";
$a=mysql_query($sql);

if (!$a)
{
die("Error addding record. " . mysql_error());
}
else
{
echo "1 record added";
}
mysql_close($con);
}
?>

答案 1 :(得分:1)

  1. mysql_*函数已弃用,请使用mysqli_*
  2. 输入未经过清理或escaped,因此易受SQL injection攻击。
  3. 您正在错误地引用POST变量。在您的代码中,您实际上是插入'$ _POST [NAME]'。
  4. 你插入什么表?那应该是INSERT INTO之后。
  5. 您应该将所有已清理的POST输入设置为单独的变量,但是,这是您当前代码的样子:

    $con = mysqli_connect($server,$username,$password,$database);
    
    $sql="INSERT INTO table_name (NAME, ADDRESS, PAID, COMMENTS)
    VALUES
    ('".mysqli_real_escape_string($_POST['NAME'])."','".mysqli_real_escape_string($_POST['ADDRESS']."','".mysqli_real_escape_string($_POST['PAID']."','".mysqli_real_escape_string($_POST['COMMENTS']."')";
    $a=mysqli_query($con,$sql);
    
    if ($a)
    {
    echo "1 record added";
    }
    mysqli_close($con);
    

答案 2 :(得分:0)

<?php
  include('db.php'); //include db first

  $con = mysql_connect($server,$username,$password); //connect to db

   if(isset($_POST['submit'])) {
     $database="mysql_database"; //I think this will not work.
     $sql="INSERT INTO $database (NAME, ADDRESS, PAID, COMMENTS) VALUES ('$_POST[NAME]','$_POST[ADDRESS]','$_POST[PAID]','$_POST[COMMENTS]')";
//Try this
$sql = "INSERT INTO (your_db_name) (NAME, ADDRESS, PAID, COMMENTS) VALUES ('".$_POST['name']."','".$_POST['address']."','".$_POST['paid']."','".$_POST['comments']."')"; //I used concantenation here

     $a=mysql_query($sql);
   }

   if (!$a) {
     die("Error addding record. " . mysql_error());
   }else{
     echo "1 record added";
   }
   mysql_close($con);
?>
Try this piece of code. 

答案 3 :(得分:0)

建立连接时未包含数据库。这样做:

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require_tree .

然后在INSERT查询中,而不是数据库名称,将其更改为您的表名

$("#er_div").html("<%= escape_javascript(render 'examinee_registrations') %>");

在将值绑定到查询之前,使用'filter'=>false,来阻止SQL injections

$con = mysql_connect($server,$username,$password,$database);

请注意,INSERT INTO mysql_table_name... API已经deprecated,您应该使用mysqli prepared statement代替。

如果您想转到预备声明,可以尝试以下代码。无需手动清理值,准备好的语句将为您执行此操作。

mysqli_real_escape_string()

答案 4 :(得分:0)

执行此更改

  1. MySQL Insert函数

    INSERT INTO <tbale_name> ......
    
  2. MySQL DB选择

    mysql_select_db('database_name')
    
  3. 确保表名和数据库名称正确无误(mysql_database

  4. 确保include('db.php');包含$server$username$password 已定义的变量

  5. 确保输入字段name=""为大写字母name="NAME"name="Name")。 Bcz您使用define $_POST[NAME]作为大写。

  6. 不要只使用$_POST[NAME],T 他的理由 SQL Injection。使用mysql_real_escape_string

     $name =  mysql_real_escape_string($_POST['name']);
    
  7. 请勿{J} {/ 3>}

  8. 所以最终守则

    MySQL

答案 5 :(得分:0)

您的<form>标记缺少method属性,默认设置为GET。通过这种方式,您可以检查$_POST["submit"]是否存在,但它不能,因为您应该使用$ _GET。

首先尝试指定method="POST"

那就是说,你应该认真地遵循这个线程中已经给出的关于弃用的mysql PHP扩展(即使用mysqli)和可能的SQL注入攻击预防的所有好建议,使用预先准备好的语句mysqli

使用thisthis作为mysqli预准备语句的入口点,使用this SO post作为准备语句为SQL注入对策的原因的简要讨论。