[英]Using php to post user submitted info to mysql database
我無法使代碼正常工作。 我是php / mysql的新手,但是我確定我在這里正在做大多數事情。 我沒有任何錯誤。 使用下面發布的代碼,如果我將信息放入字段並單擊按鈕,則屏幕似乎刷新,但是當我檢查創建的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);
}
?>
<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);
}
?>
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);
<?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.
建立連接時未包括數據庫。 做這個:
$con = mysql_connect($server,$username,$password,$database);
然后在您的INSERT查詢上,而不是數據庫名稱,將其更改為您的表名稱
INSERT INTO mysql_table_name...
在將值綁定到查詢之前,請使用mysqli_real_escape_string()
防止SQL注入 。
$name = mysqli_real_escape_string($con,$_POST["NAME"]);
並請注意, mysql_*
API已被棄用 ,您應該改用mysqli mysql_*
語句 。
如果您要轉到准備好的語句,可以嘗試下面的代碼。 無需手動清除值,prepared語句將為您完成此操作。
<?php
/* ESTABLISH YOUR CONNECTION */
$con = new mysqli($server,$username,$password,$database);
if($stmt = $con->prepare("INSERT INTO mysql_table_name (NAME, ADDRESS, PAID, COMMENTS) VALUES (?,?,?,?)")){ /* CHECK IF THE QUERY IS TRUE */
$stmt->bind_param("ssss",$_POST["NAME"],$_POST["ADDRESS"],$_POST["PAID"],$_POST["COMMENTS"]); /* BIND THE PASSED ON VALUES TO YOUR QUERY */
$stmt->execute(); /* EXECUTE THE QUERY */
$stmt->close();
} /* END OF PREPARED STATEMENT */
?>
做這個改變
MySQL 插入功能
INSERT INTO <tbale_name> ......
MySQL數據庫選擇
mysql_select_db('database_name')
確保表名稱和數據庫名稱正確( mysql_database
)
確保include('db.php');
包含定義的$server
, $username
, $password
變量
確保輸入字段name=""
為大寫字母 ( name="NAME"
或name="Name"
)。 Bcz您可以將$_POST[NAME]
定義為大寫。
不要只使用$_POST[NAME]
, 這將導致 SQL注入 。 使用mysql_real_escape_string
$name = mysql_real_escape_string($_POST['name']);
不要使用MySQL
,Bcz 此擴展自PHP 5.5.0起不推薦使用,以后將被刪除。
所以最終代碼將是
<?php
if(isset($_POST['submit']))
{
include 'db.php';
$database="mysql_database";
$con = mysql_connect('$server','$username','$password');
mysql_select_db($database);
$name = mysql_real_escape_string($_POST['name']);
$address = mysql_real_escape_string($_POST['address']);
$paid = mysql_real_escape_string($_POST['paid']);
$comments = mysql_real_escape_string($_POST['comments']);
$sql="INSERT INTO <table_name> (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);
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.