2014-10-28 30 views
0

所以我有这个关键的赠品脚本,现在我想要显示的键从数据库中删除。我如何在我写的代码中工作?删除从数据库中显示的密钥在PHP

so $ key是将发送给您并显示在浏览器中的密钥,但是我希望此密钥在发送并显示后从数据库中删除,因此无法再次显示给另一个人用户。

<?php 
//fill in mail 

echo " 
<form method='post' action=" . $_SERVER['PHP_SELF'] . "> 
    Email: <input name='email'></input><br> 
    <input type='submit' value='Get your key' name='submit'> </input><br><br> 
</form>"; 

    if(empty($_POST["email"])) 
    { 
     echo "Please enter an email adress."; 
    } 
    else{ 
     // get key from database 
     $key = dispres(); 

     //mail key to input mail 
     $to  = $_POST["email"]; 
     $subject = 'Your test key'; 
     $message = 'Your key is: ' . $key; 
     $headers = 'There you go!'; 

     mail($to, $subject, $message, $headers); 

     echo "Your code has been sent to your email: " . $_POST["email"] . " \r"; 
     echo $key; 
    } 



function dispres(){ 

//database connect 
$db_host = 'localhost'; 
$db_user = 'root'; 
$db_pwd = 'pwd'; 

$database = 'c3keys'; 
$table = 'test'; 

if (!mysql_connect($db_host, $db_user, $db_pwd)) 
    die("Can't connect to database"); 

if (!mysql_select_db($database)) 
    die("Can't select database"); 


//grab random key from database 

$result = mysql_query("SELECT * FROM {$table} order by RAND() LIMIT 1"); 

$row = mysql_fetch_row($result); 

$result = implode('|',$row); 



return $result; 

//delete key from database 


//had this as a begin 
mysqli_query("DELETE FROM test WHERE test='$key'"); 

//remember ip adress for 1 use only 
} 

?> 
+2

1-你使用的是mysql和mysqli两个棍子...... 2-你的删除查询在'return'之后,所以它永远不会运行。 3-什么是$ key?我没有看到你设置的位置。 4-停止使用'mysql_ *'这些函数已被弃用。在准备好的语句中使用'mysqli'或'PDO'。 – CodeBird 2014-10-28 10:41:24

+0

我是新来的PHP和目前的学习。所以我并不是真正意义上的。 – kaaai3 2014-10-28 10:45:30

+0

@CodeBird我会把所有这些放在OP的一个很好的答案中,特别是在返回后的删除查询。 – 2014-10-28 12:57:58

回答

1

1-您同时使用mysql和mysqli的坚持使用一个...

2 - 你删除查询是回归后,使之永远运行。

3-什么是$键?我没有看到你设置的位置。

4-停止使用mysql_ *这些函数已被弃用。使用mysqli或PDO与准备好的语句。

说明点1:

在您的代码在你dispres功能的开始,你有mysql_connect,在年底为您删除查询mysql_select_dbmysql_query您使用mysqli_query通知i在过去的功能,你可以在这里使用mysqli,就像你用mysql适配器连接一样。

说明2点:

你有return $result;那么之后你需要mysqli_query("...");当他们看到一个return这意味着功能做PHP将不会执行该代码行,因为PHP和其他编程语言,无事可做,所以你不能拥有你想要的return

说明3点后执行任何行:

在你的整个dispres功能没有$key所以基本上$key是空的,我想你的意思是在该查询中使用$result。即使您使用$result,您的删除也不会起作用,因为$result是一个字符串,您将所有字段加入其中,并在每个字段与另一个字段之间添加了|管道符号。所以第test列不会等于您的$结果。您应该由测试列的实际值替换$关键要删除,也许是这样的:

$row = mysql_fetch_row($result); 
$test_i_want_to_delete=$row[0];//Where 0 is the number of column of `test` in your db table, starting counting from 0 
$result = implode('|',$row); 
mysql_query("DELETE FROM test WHERE test='$test_i_want_to_delete'"); 

说明点4:

如果你刚开始学习PHP它会更好因为你不学习任何在以后的版本中完全删除的弃用函数。所以在使用mysql_*功能的地方,看看PDOmysqli,尤其是看看如何使用预处理语句。

我希望我的回答有助于清除一些东西。