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

时间:2015-08-08 11:57:30

标签: php variables md5

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

Request.php页面:

  1. 通过查询,我提取存储在MD5中的值:cod_idcrypt。
  2. 字段cod_idcrypt的值已恢复并在链接中设置:
  3. <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加密

    ,则不会出现上述问题

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

    我该如何解决?

    谢谢

1 个答案:

答案 0 :(得分:1)

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

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

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

  • 202cb962ac59075b964b07152d234b70

您可能认为列中的123整数(如果是这种情况)也可能是您的查询中的整数或被视为整数,但事实并非如此。它是MD5,反过来呈现为字符串。

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

检查查询错误后会发出语法错误信号。

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

Use mysqli with prepared statementsPDO with prepared statements他们更安全

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

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

// rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

  • 请注意您问题留下的评论。