2014-10-10 210 views
1

我已经创建了一个搜索功能,并能够显示行。选择,插入MySQL和PHP

但我不知道该怎么处理这件事件事是什么:

比如,我搜索名称以J,并列出了开始的J与登录时的所有名称并没有被注销。意思是,timeOut已经从第一位置为空。它显示为:

1 | Johny | 7:58 | (timeOut) 
4 | Jess | 8:05 | (timeOut)` 

(timeOut)是input type="button"。我想要的是每当我点击注销时,例如,我点击johnny的超时时间,它会为超时插入值now(),不会影响Jess的行。

我有这样的代码:

<?php 
$result=mysqli_query($con,"SELECT * FROM records WHERE PlateNumber LIKE '%$name%'"); 
while($row = mysqli_fetch_array($result)) { 
    if($row['TimeOut'] == null){ 
    echo "<table border='1'>" . "<tr>" ."<td style='width:100px;'>" . $row['Number']. "</td>". "<td style='width:100px;'>" . $row['PlateNumber']. "</td>". "<td style='width:100px;'>" . $row['TimeIn'] . "</td>" ."<td style='width:100px;'>" . "<form>" . "<input type='submit' name='logout' value='Log Out'/>" . "</form>". "</td>" . "</table>" ; 
      if(isset($_POST['logout'])){ 
        //HELP ME IN THIS PART 
      } 
    } 
} 
?> 

我不是在PHP真的很好,所以请忍受我这。谢谢你的帮助。

+1

您需要根据被注销用户一个更新查询? – underscore 2014-10-10 04:09:17

+0

SELECT * FROM记录WHERE PlateNumber LIKE'%$ name%'您应该为TimeOut添加另一个where子句,因此它没有执行性能。同时还为名称你必须要准确,因为如果你的代码让所有结果(2条记录)循环 – 2014-10-10 04:12:34

+0

虽然只显示一个记录,这下超时更新所有列。我错过了一些东西 – yun 2014-10-10 09:25:51

回答

1

我想你的意思是不更新插入,你必须养活用户标识以更新特定行。

你也不必每次产卵形式循环。 用表格代替

if(isset($_POST['logout'])) { // if logout button is submitted 
    // do not insert but update 
    $id = $con->real_escape_string($_POST['logout']); 
    $query = $con->query("UPDATE records SET TimeOut = NOW() WHERE id = '$id'"); 
} 

$name = $con->real_escape_string($name); 
$result = mysqli_query($con, "SELECT * FROM records WHERE PlateNumber LIKE '%$name%'"); 

echo '<form method="POST">'; 
echo '<table boder="1" cellpadding="10">'; 

while($row = mysqli_fetch_assoc($result)) { 
    if(empty($row['TimeOut'])){ 

     $id = $row['id']; 
     echo 
      "<tr>" . 
       "<td style='width:100px;'>" . $row['Number']. "</td>". 
       "<td style='width:100px;'>" . $row['PlateNumber']. "</td>". 
       "<td style='width:100px;'>" . $row['TimeIn'] . "</td>" . 
       "<td style='width:100px;'>" . 
       "<button type='submit' name='logout' value='$id'>Logout</button>" . "</td>" . 
      "</tr>"; 
    } 
} 

echo '</table>'; 
+0

我可以知道$ id的目的是什么吗?对不起,我只是想不出 – yun 2014-10-10 09:18:37

+0

@yun im假设你的表有一个id的权利? – Ghost 2014-10-10 10:11:45

+0

是的,我把它命名为'数字',就试试它。谢谢 – yun 2014-10-10 10:13:54

-1

相反,你需要使用一个更新语句,并使用where子句范围记录到当前用户关闭基于用户ID的select语句。因此,对于你

这将是这样的:

UPDATE records 
SET logouttime=now() 
WHERE userid='4' 
+0

这是一条评论而不是答案 – underscore 2014-10-10 04:09:39

+0

对不起。我在移动设备上,无法足够快地进行编辑。这很好现在 – Brandon 2014-10-10 04:14:06

+0

尽量避免链接到w3schools(使用php.net代替),这是为什么http://www.w3fools.com/ – webeno 2014-10-10 04:38:54

0

您需要在输入的“值”部分放置某种记录ID。不只是“注销”。您需要发布“注销jess”(或者更好,只是“Jess”,所以当您检索它以从字符串中删除“注销”时,您不必编辑它)。通常这是通过主键字段完成的。但它也可以用任何独特的领域来完成。因此,而不是value='Log Out'尝试value='Jess'

然后$_POST['logout']实际上将包含Jess,你可以从它建立您的更新SQL查询。

另一种方法是完全跳过形式,只是建立在“退出”旁边的“杰西”,这将包含“GET”的参数,而不是POST一个网络链接。可能会更容易在眼睛上。