我创建了一个名为delete.php
的页面
使用以下代码
<?php
require_once("database.php");
$con = mysql_connect($config["db_server"],$config["db_user"],$config["db_pass"]);
mysql_select_db($config['db_name'], $con);
// The SQL statement that deletes the record
$strSQL = "DELETE FROM records WHERE record_id = 1";
mysql_query($strSQL);
// Close the database connection
mysql_close();
?>
现在如果我去http://www.domain.com/delete.php
这将删除表记录中具有 1 的记录 ID。
当我去http://www.domain.com/delete.php?del?=25
时如何使用 php 字符串它会删除record_id
25
?
谢谢。
您可以使用$_GET
超全局来捕获传递的变量。
$deleteId = $_GET['del'];
$strSQL = "DELETE FROM records WHERE record_id = $deleteId";
然而,这是不安全和错误的。不要使用此代码!
您将需要停止使用 mysql_
函数(它们已弃用)并使用预准备语句来帮助防止 SQL 注入。
如评论中所述,由于网络蜘蛛可能存在问题,不建议使用此方法。本文讨论该问题,此问题讨论最佳做法。
首先,您的网址结构不正确。它应该是:
http://www.domain.com/delete.php?del=25
然后,您可以使用del
通过GET
访问该值:
$del_id = $_GET['del'];
$strSQL = "DELETE FROM records WHERE record_id = $del_id";
mysql_已弃用。您应该改用mysqli_或(甚至更好的)PDO。
上面的代码容易受到所谓的 mysql 注入的影响。
根据经验,永远不要信任来自用户的数据。所以你在这里所做的毫不夸张地是灾难性的。
例:
//GET value: dave
query = " SELECT username, password FROM users WHERE username=$name ";
//Translates to:
query = " SELECT username, password FROM users WHERE username='dave' ";
//malicious input
//GET value: 'OR'1
query = " SELECT username, password FROM users WHERE username=$name ";
//Translates to:
query = "SELECT username, password FROM users WHERE username=''OR'1' ";
这里令人讨厌的是,1 的计算结果为 true,从而返回用户表中的所有用户名和密码!
mysqli_real_escape_string() 救援
尽管说起来很拗口,但此函数通过使用 MySQL 友好的"''"引号转义注入尝试来提供保护。
因此,通过此功能泵送所有 GET/POST 数据提供了一层安全性。
$name = mysqli_real_escape_string($_POST['username'];
现在希望这是有道理的。尽管有狂想mysqli_real_escape_string()
但我强烈建议(在某些时候)考虑使用更复杂的东西,比如PDO
。