2010-06-21 70 views
0

我有一个消息传递系统,它工作正常,但我有它,所以当它读取它mysql_querys并将读取设置为1.这样,你可以告诉它,如果它的opend。它不会在这里更新是查看其更新消息的脚本。感谢mysql不更新

<?php 
session_start(); 

require "../scripts/connect_to_mysql.php"; 

    if (isset($_SESSION['id'])){ 
    $touser = $_SESSION['id']; 
     } 
     elseif (!isset($_SESSION['id'])){ 
      header('location: http://www.stat-me.com'); 
     } 

$id = $_GET['id']; 
$memberfirstname = $_SESSION['firstname']; 


if(!isset($id)) { 
    header('location: inbox.php'); 
} 
elseif(isset($id)) { 

    mysql_query("UPDATE pms SET read='1' WHERE id='$id'");  


    $grab_pm = mysql_query("SELECT * FROM pms WHERE touser = '$touser' AND id = '$id'"); 

    while($r= mysql_fetch_object($grab_pm)) {  
     $subject = $r->subject;  
     $message = $r->message;  
     $fromuser = $r->fromuser;  
     $datesent = $r->datesent;  
     $read = $r->read; 
    } 


} 


?> 
+0

什么数据类型是id和读? – 2010-06-21 10:39:21

+0

读取数据库时enum defult设置为“0”,并且消息第一次打开时,它假设更新为“1” id是数据库中消息的id(同样在链接中它会是stat-me.com/messaging/view.php?ID=X),它从 – DonJuma 2010-06-21 10:43:03

回答

0

这并不完全清楚,如果ID字段是一个INT但我猜是这样,在这种情况下修复代码如下(除去约$ ID的单引号):

mysql_query("UPDATE pms SET read='1' WHERE id=$id"); 
$grab_pm = mysql_query("SELECT * FROM pms WHERE touser = $touser AND id = $id"); 

也一定要逃避你的GET变量,例如

$id = mysql_real_escape_string($_GET['id']) ; 

编辑:也采取上述约$至用户单引号

+0

得到它仍然没有。我不明白为什么它不工作 – DonJuma 2010-06-21 10:58:10

+0

和id是一个INT 和阅读是一个ENUM – DonJuma 2010-06-21 11:07:55

+0

啊,我敢打赌touser是一个INT也是,对不对?我将编辑答案以反映这一点。另外,你有没有调试过它?在测试页面或开发站点上,将查询回复给浏览器,并将它们直接复制并粘贴到数据库中,例如,使用phpMyAdmin - 你有错误吗? – 2010-06-21 11:10:09

0

更改查询

mysql_query("UPDATE pms SET read='1' WHERE id=".$id); 
$grab_pm = mysql_query("SELECT * FROM pms WHERE touser = ".$touser." AND id = ".$id); 

INT数据类型来没有双引号,枚举依赖于他们的内容(所以如果你在例子中插入'1'和'0',删除引号'1',否则保留它们)。