-4

我创建了一个名为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 which 将删除表记录中 1 的记录 id。

我如何使用 php 字符串,所以当我去http://www.domain.com/delete.php?del?=25 删除它时record_id 25

谢谢。

4

2 回答 2

5

您将使用$_GET超全局来捕获传递的变量。

$deleteId = $_GET['del'];
$strSQL = "DELETE FROM records WHERE record_id = $deleteId";

然而,这是不安全和错误的。不要使用此代码!

您将需要停止使用mysql_函数(它们已被弃用)使用准备好的语句来帮助防止 SQL 注入。

如评论中所述,由于网络蜘蛛可能存在问题,不建议使用此方法。本文讨论了这个问题,这个问题讨论了最佳实践。

于 2013-11-06T21:57:43.803 回答
1

首先,您的网址构造不正确。它应该是:

http://www.domain.com/delete.php?del=25

然后您可以使用delviaGET访问该值:

 $del_id = $_GET['del'];
 $strSQL = "DELETE FROM records WHERE record_id = $del_id";

mysql_已弃用。您应该改用mysqli_ 或(甚至更好) PDO

上面的代码容易受到所谓的mysql injection的影响。

根据经验,永远不要相信来自用户的数据。所以你在这里所做的毫不夸张地说是灾难性的。

例子:

//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,从而返回 users 表中的所有用户名和密码!

mysqli_real_escape_string() 来救援

尽管说起来很拗口,但这个函数通过使用 MySQL 友好的 '\' 引号转义注入尝试来提供保护。

因此,通过此功能抽取所有 GET/POST 数据提供了一层安全性。

$name = mysqli_real_escape_string($_POST['username'];

现在希望这是有道理的。尽管mysqli_real_escape_string()我强烈建议(在某些时候)考虑使用更复杂的东西PDO来代替。

于 2013-11-06T22:06:03.610 回答