❶ php表單提交不同數據到資料庫的不同表的不同欄位怎麼實現
你可以用 PHP 的 MySQLi 或 PDO 庫來實現。
首先,你需要使用這些庫中的函數連接資料庫,然後把表單中的欄位值插入到相應的數據表中。
例如,如果你使用 MySQLi,你可以這樣寫:
$conn = mysqli_connect("hostname", "username", "password", "database_name");
$rwid = $_POST['rwid'];
$rwdj = $_POST['rwdj'];
$rwzb = $_POST['rwzb'];
$sql1 = "INSERT INTO table_a (s) VALUES ('$rwid')";
mysqli_query($conn, $sql1);
$sql2 = "INSERT INTO table_b (d) VALUES ('$rwdj')";
mysqli_query($conn, $sql2);
$sql3 = "INSERT INTO table_c (f) VALUES ('$rwzb')";
mysqli_query($conn, $sql3);
如果你使用 PDO,你可以這樣寫:
$conn = new PDO("mysql:host=hostname;dbname=database_name", "username", "password");
$rwid = $_POST['rwid'];
$rwdj = $_POST['rwdj'];
$rwzb = $_POST['rwzb'];
$stmt1 = $conn->prepare("INSERT INTO table_a (s) VALUES (:s)");
$stmt1->bindParam(':s', $rwid);
$stmt1->execute();
$stmt2 = $conn->prepare("INSERT INTO table_b (d) VALUES (:d)");
$stmt2->bindParam(':d', $rwdj);
$stmt2->execute();
$stmt3 = $conn->prepare("INSERT INTO table_c (f) VALUES (:f)");
$stmt3->bindParam(':f', $rwzb);
$stmt3->execute();
希望這個答案對你有幫助。
❷ php中防止SQL注入的最好方法是什麼
使用預備義語句和參數化查詢。對於帶有任何參數的sql語句都會被發送到資料庫伺服器,並被解析!對於攻擊者想要惡意注入sql是不可能的! 實現這一目標基本上有兩種選擇: 1.使用PDO(PHP Data Objects ):$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array(':name' => $name)); foreach ($stmt as $row) { // do something with $row }2.使用mysqli:$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }PDO(PHP數據對象) 注意當使用PDO訪問MySQL資料庫真正的預備義語句並不是默認使用的!為了解決這個問題,你必須禁用模擬准備好的語句。使用PDO創建連接的例子如下: $dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);在上面例子中錯誤模式ERRMODE不是嚴格必須的,但是建議添加它。當運行出錯產生致命錯誤時,這種方法腳本不會停止。並給開發人員捕捉任何錯誤的機會(當拋出PDOException異常時)。 setAttribute()那一行是強制性的,它告訴PDO禁用模擬預備義語句,使用真正的預備義語句。這可以確保語句和值在發送給MySQL資料庫伺服器前不被PHP解析(攻擊者沒有機會注入惡意的SQL). 當然你可以在構造函數選項中設置字元集參數,特別注意'老'的PHP版本(5.3.6)會在DSN中忽略掉字元集參數。 這里最重要的是,該參數值是和預編譯的語句結合的,而不是和一個SQL字元串.SQL注入的工作原理是通過欺騙手段創建的SQL腳本包括惡意字元串發送到資料庫.因此,通過發送實際的分開的sql參數,你會降低風險.使用准備好的語句時,你發送的任何參數,將只被視為字元串(雖然資料庫引擎可能會做一些參數的優化,當然最終可能會為數字).在上面的例子中,如果變數$name包含'sarah';DELETE * FROM employees,結果只會是一個搜索的字元串"'sarah';DELETE * FROM employees",你不會得到一個空表。 使用准備好的語句的另一個好處是,如果你在同一會話中多次執行相同的語句,這將只被解析和編譯一次,給你一些的速度增長。
❸ PHP怎麼防止sql注入
如果是字元串類型:addslashes() 這個函數,轉義單雙引號;
如果接收的參數屬於整數型(id之類):intval() 直接取出數字,丟棄後邊的非數字字元;
或者使用PDO預處理語句,綁定參數的方式防止SQL注入。
❹ php如何防止sql注入
PHP防止sql注入是一個比較低級的問題了,這個問題其實在我大一上學期做第一個個人博客的時候就已經關注過了,不過簡單的說一下關於PHP防注入的方式吧。
對於現在的防注入技術其實已經成熟了,對於一個站點該關心的不是防注入了,而是大規模高並發如何處理的問題,或者關於各種其他漏洞,比如現在世界上仍然有百分之80使用redis的站點存在redis漏洞,通過redis漏洞可以直接拿到機器的訪問許可權,一般來說都是直接給你種一個挖礦機器人來。
❺ 留言板防灌水功能應該怎麼做怎麼防止sql注入用PHP編寫
防灌水:
對無意義帖判定,比如:字數太少,純數字,無意義的連續數字或字母。
發帖時間間隔和發帖量
系統設置一批關鍵詞匹配,發現有類似的先設為需審核 ,由後台手動操作。
防sql注入
先對提交數據中的危險字元過濾或編碼。比如:名稱或帖子標題,一定不能是html,直接進行htmlencode ,最後輸出到頁面上,也不會變成html,而是顯示原始字元。對需要使用html的內容部分,過濾script,style等標簽,或者直接用strip_tags 函數只保留必要的段落等排版標簽。
其次也可以考慮使用bbcode或markdown等對排版有限制的語法轉義
資料庫操作使用pdo參數編譯的模式,可以有效防止提交數據中的注入字元(會變成正常字元插入到資料庫中,這也可以防止誤判,因為很多IT類的技術帖需要在內容中有這些關鍵字)
❻ thinkphp怎麼做才是安全的sql防注入
注入的產生一般都是對用戶輸入的參數未做任何處理直接對條件和語句進行拼裝.
代碼舉例:
//不安全的寫法舉例1
$_GET['id']=8;//希望得到的是正整數
$data=M('Member')->where('id='.$_GET['id'])->find();
$_GET['id']='8 or status=1';//隱患:構造畸形查詢條件進行注入;
//安全的替換寫法
$data=M('Member')->where(array('id'=>$_GET['id']))->find();//使用數組方式將自動使用框架自帶的欄位類型檢測防止注入
$data=M('Member')->where(array('id'=>(int)$_GET['id']))->find();//類型約束
$data=M('Member')->where('id='.intval($_GET['id']))->find();//類型轉換
$data=M('Member')->where(array('id'=>I('get.id','','intval')))->find();//本人習慣寫法
$data=M('Member')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();//PDO驅動可以使用參數綁定
$data=M('Member')->where("id=%d",array($_GET['id']))->find();//預處理機制
//不安全的寫法舉例2
$_GET['id']=8;//希望得到的是正整數
$data=M()->query('SELECT * FROM `member` WHERE id='.$_GET['id']);//執行的SQL語句
$_GET['id']='8 UNION SELECT * FROM `member`';;//隱患:構造畸形語句進行注入;
2.防止注入的總的原則是<<根據具體業務邏輯,對來源於用戶的值的范圍,類型和正負等進行限制和判斷>>,同時<<盡量使用THINKPHP自帶的SQL函數和寫法>>.
3.在THINKPHP3.2版本中的操作步驟是:
一:在項目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默認過濾函數
二: 使用框架帶的I方法獲取來自用戶提交的數據;
例子:M('Member')->save(array('content'=>I('post.content')));這樣添加的content內容是經過htmlspecialchars處理過的.
4.為COOKIE添加httponly配置
5.最新版本的thinkphp已經支持此參數。
9.富文本過濾
富文本過濾是,XSS攻擊最令人頭疼的話題,不僅是小網站,就連BAT這樣的巨頭也是三天兩頭的被其困擾.
❼ php增刪改查帶資料庫顯示添加成功
這個問題比較廣泛,需要更多的背景和具體需求才能提供更准確的答案。通常情況下,實現帶資料庫的增刪改查可以遵循以下步驟:
連接資料庫:使用 PHP 的資料庫擴展,如 mysqli 或 PDO,連接資料庫。
查詢資料庫:執行 SQL 語句,從資料庫中查詢需要的數據。
增加數據:通過 SQL 語句將數據插入到資料庫中。
更新數據:使用 SQL 語句更新資料庫中的數據。
刪除橋運數據:使用 SQL 語句刪除資料庫中的數據。
顯示結果:將查詢結果顯示在網頁上,通常滑卜是使用 HTML 和 CSS 構建頁面,然後使用 PHP 代碼將數據填充到頁面中。
添加成功提示:在添加、更新、刪除操作完成後,通過 PHP 代碼向用戶顯示操作是否成功的提示信息。
在實現過程中,還需要考慮數據的安全性和可靠性,例如數據的驗證和過濾,SQL 注入攻擊的防範等。
至於如何在添加成功後向用戶顯示提示信息,通常可以通過 PHP 的會話管理機制(如 $_SESSION 變數)將消息存儲起來,然後在頁面中使用 PHP 代碼讀取消息並顯示給用戶。例如:
<?php
session_start();
if (isset($_SESSION['message'])) {
echo '<div class="success">' . $_SESSION['message'] . '</div>';
unset($_SESSION['message']);
}
?>
<!-- 表單等敏讓梁其他內容 -->
<?php
// 執行添加操作
// 添加成功後,設置消息
$_SESSION['message'] = '添加成功';
// 跳轉到其他頁面
header('Location: /path/to/other/page.php');
?>
這樣,當用戶提交添加數據的表單後,成功添加數據並跳轉到其他頁面時,會在頁面頂部顯示「添加成功」的提示信息。
❽ php怎樣使用參數化防止sql注入
可以使用php的pdo對象,有預處理查詢功能可以防止注入,再有,注入sql無非就是基於你sql的拼接問題影響的執行sql,也可以不用pdo預處理,把獲取查詢的參數裡面的非法字元比如單引號雙引號等這些字元手動過濾也可以的