Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择、插入MySQL和PHP_Php_Html_Mysql - Fatal编程技术网

选择、插入MySQL和PHP

选择、插入MySQL和PHP,php,html,mysql,Php,Html,Mysql,我创建了一个搜索函数,能够显示行 但我不知道该怎么办: 例如,我搜索了以J开头的名称,并列出了所有以J开头的名称,以及登录时间和尚未注销的名称。也就是说,超时从一开始就被设置为null。它显示如下: 1 | Johny | 7:58 | (timeOut) 4 | Jess | 8:05 | (timeOut)` 超时是一个输入类型=按钮。我想要的是,每当我单击注销时,例如,我为Johny单击超时,它现在将为超时插入值,而不影响Jess的行 我有以下代码: <?php $result=

我创建了一个搜索函数,能够显示行

但我不知道该怎么办:

例如,我搜索了以J开头的名称,并列出了所有以J开头的名称,以及登录时间和尚未注销的名称。也就是说,超时从一开始就被设置为null。它显示如下:

1 | Johny | 7:58 | (timeOut)
4 | Jess  | 8:05 | (timeOut)`
超时是一个输入类型=按钮。我想要的是,每当我单击注销时,例如,我为Johny单击超时,它现在将为超时插入值,而不影响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,所以请接受我的建议。感谢您的帮助。

您需要使用update语句,并使用where子句根据用户id将记录范围限定到当前用户,而不是select语句

所以对你来说是这样的:

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

我认为您的意思是更新而不是插入,您必须提供用户ID来更新特定的行

此外,您不需要生成循环中的每个表单。改为用表单包装表格

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>';

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

然后$\u POST['logout']实际上将包含Jess,您可以从中构建更新sql查询


另一种方法是完全跳过表单,只在Jess旁边的注销上构建一个web链接,其中包含GET参数而不是POST参数。看起来可能更简单。

您需要基于注销用户的更新查询?从PlatNumber(如“%$name%”的记录中选择*您应该为TimeOut添加另一个WHERE子句,使其不影响性能。此外,对于名称,您需要准确,因为如果通过代码对所有结果2records进行循环,尽管它只显示一条记录,但它会在TimeOut下更新所有列。我遗漏了一些东西这是评论而不是回答对不起。我在手机上,编辑速度不够快。现在最好避免链接到W3,而改用php.net,这就是为什么抱歉。谢谢你。下次我会记得的。我可以知道$id的用途吗?对不起,我就是不明白out@yun我想这是独一无二的,对吗?如记录id主键自动increment@yun是的,它必须是独一无二的,如果它不是,那将是怪异和不正确的