我无法让我的代码工作。我是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);
}
?>
答案 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)
mysql_*
函数已弃用,请使用mysqli_*
。INSERT INTO
之后。您应该将所有已清理的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)
执行此更改
MySQL Insert函数
INSERT INTO <tbale_name> ......
MySQL DB选择
mysql_select_db('database_name')
确保表名和数据库名称正确无误(mysql_database
)
确保include('db.php');
包含$server
,$username
,$password
已定义的变量
确保输入字段name=""
为大写字母(name="NAME"
或name="Name"
)。 Bcz您使用define $_POST[NAME]
作为大写。
不要只使用$_POST[NAME]
,T 他的理由 SQL Injection。使用mysql_real_escape_string
$name = mysql_real_escape_string($_POST['name']);
请勿{J} {/ 3>}
所以最终守则
MySQL
答案 5 :(得分:0)
您的<form>
标记缺少method
属性,默认设置为GET。通过这种方式,您可以检查$_POST["submit"]
是否存在,但它不能,因为您应该使用$ _GET。
首先尝试指定method="POST"
。
那就是说,你应该认真地遵循这个线程中已经给出的关于弃用的mysql
PHP扩展(即使用mysqli
)和可能的SQL注入攻击预防的所有好建议,使用预先准备好的语句mysqli
。
使用this和this作为mysqli
预准备语句的入口点,使用this SO post作为准备语句为SQL注入对策的原因的简要讨论。