簡體   English   中英

使用php將用戶提交的信息發布到mysql數據庫

[英]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);
}
?>
  1. mysql_*功能已被棄用,使用mysqli_*
  2. 輸入沒有經過清理或轉義 ,因此容易受到SQL注入的攻擊。
  3. 您錯誤地引用了POST變量。 在您的代碼中,您實際上是在插入“ $ _POST [NAME]”。
  4. 您要插入什么表? 那應該在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 */

?>

做這個改變

  1. MySQL 插入功能

     INSERT INTO <tbale_name> ...... 
  2. MySQL數據庫選擇

     mysql_select_db('database_name') 
  3. 確保表名稱和數據庫名稱正確( mysql_database

  4. 確保include('db.php'); 包含定義的$server$username$password 變量

  5. 確保輸入字段name=""為大寫字母name="NAME"name="Name" )。 Bcz您可以將$_POST[NAME]定義為大寫。

  6. 不要只使用$_POST[NAME]這將導致 SQL注入 使用mysql_real_escape_string

      $name = mysql_real_escape_string($_POST['name']); 
  7. 不要使用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);
    }
?>

您的<form>標記缺少method屬性,該屬性默認情況下設置為GET。 這樣,您正在檢查$_POST["submit"]是否存在,但事實並非如此,因為您應該使用$ _GET。

嘗試首先指定method="POST"

就是說,您應該認真地使用此線程中已經給出的有關已棄用的mysql PHP擴展(即使用mysqli )和可能的SQL注入攻擊預防的所有好的建議,並使用帶有mysqli預備語句。

使用thisthis作為mysqli准備語句的入口點,而本SO帖子作為有關預准備語句為何是SQL注入對策的簡短討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM