如何在两个 php 页面之间发送 MD5 值

How to send MD5 value between two php pages

我无法将变量值从页面 request.php 传递到页面 response.php,该变量包含存储在 mysql 数据库字段中的 MD5 加密值以删除记录.

Request.php 页数:

  1. 通过查询我提取了存储在MD5中的值:cod_idcrypt.
  2. 字段cod_idcrypt的值被恢复并设置在link:

<a href="response.php?crypt=<?php echo $cod_idcrypt; ?>" onclick="return confirm('Vuoi eliminare il valore?');">Cancella record</a>

Response.php 页数:

include("connect.php"); 
$cod_idcrypt =$_REQUEST['crypt'];
$sql="DELETE FROM tbl_product WHERE cod_idcrypt=".$cod_idcrypt;
$result=mysql_query($sql);  

cod_idcrypt标识的记录写入正确,因为我验证了id主键cod_id,等于cod_idcrypt函数MD5中写入的值。

select md5(123) as cod_id, '202cb962ac59075b964b07152d234b70' from dual;

我所做的检查: a) 如果在 db 上使用加密值进行删除功能正确 b) 如果用主键代替id encrypted

就不会出现上述问题

我会使用加密值来避免显示真实的 url ID。

我该如何解决?

谢谢

您的 MD5 字符串将是字符串而不是整数,因此您必须在查询中引用 $cod_idcrypt 变量。

$sql="DELETE FROM tbl_product WHERE cod_idcrypt='$cod_idcrypt'";
$result=mysql_query($sql) or die(mysql_error());
  • 旁注:记住并注意上面的查询将删除 ALL 具有相同值的键。如果只想删除与某个 ID 相关的键,则向其添加一个附加子句。即:例如 AND id=5

MD5(123) 将生成以下字符串(而不是整数)。

  • 202cb962ac59075b964b07152d234b70

您可能认为您列中的 123 整数(如果此处是这种情况)也会在您的查询中出现或被视为整数,但事实并非如此。它正在接受 MD5,然后被呈现为字符串。

  • 旁注:保存 MD5 字符串的列应该是 VARCHAR 并且足够长以存储它的全长。 VARCHAR(40) 是一个安全的选择。

检查查询中的错误会指示语法错误。

如评论中所述,您的代码可用于 SQL 注入并使用已弃用的 MySQL 库。

Use mysqli with prepared statements, or PDO with prepared statements它们更安全

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:显示错误只应在试运行中进行,绝不能在生产中进行。

  • 关注您问题下留下的评论。