【问题标题】:display result only if payload=1仅当有效载荷 = 1 时才显示结果
【发布时间】:2019-10-02 15:26:05
【问题描述】:

我需要脚本方面的帮助。我只想在payload=1时在页面上显示结果,如果payload=0不显示..

我试过弄乱 mysql 语句,我意识到我需要在我的脚本中更改它

这是我的 php:

    <?php
    $dbhost = "localhost";
    $dbuser = "user";
    $dbpass = "pass";
    $dbname = "rooms";

    $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

    if(! $conn ) {
    die('Could not connect: ' . mysqli_error());
    }
    echo 'Connected successfully<br>';

    $sql = "SELECT ID, topic, payload, DateTime_created FROM room1  ORDER 
    BY id DESC LIMIT 1 ";

    $retval = mysqli_query( $conn, $sql );

    if(! $retval ) {
    die('Could not get data: ' . mysqli_error());
    }

    while($row = mysqli_fetch_assoc($retval)) {
    echo "ID: " . $row["id"]. "<br>";
    echo "Topic: " . $row["topic"]. "<br>";
    echo "Payload: " . $row["payload"]. "<br>";
    echo "Timestamp: " . $row["DateTime_created"]. "<br>";
    }


   mysqli_free_result($retval);
   echo "Fetched data successfully\n";

   mysqli_close($conn);

我的数据库是: 房间 表:房间1 ID 话题 有效载荷 DateTime_created

还有我的 index.html

  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script 
  src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 
  type="text/javascript" charset="utf-8"></script>
  <script>
  $(document).ready(function(){
  sendRequest();
  function sendRequest(){
      $.ajax({
        url: "vineri.php",
        success: 
          function(data){
           $('#listposts').html(data); 

        },
        complete: function() {
       // Schedule the next request when the current one's complete
       setInterval(sendRequest, 5000); // The interval set to 5 seconds
     }
     });
   };
    });

    </script>
    </head>
    <body>
    <div id="listposts"> </div>
    </body>

如何让结果仅在有效载荷为 1 时显示?

【问题讨论】:

  • div id="listposts"&gt; < 字符。粘贴不好?
  • 您是否尝试添加到您的 SQL 查询 WHERE payload = 1
  • mysqli_error()
  • SELECT ID ...ORDER BY id$row["id"] 是两种不同的动物。
  • 更正了

标签: javascript php jquery mysql ajax


【解决方案1】:

试试这个代码。我已经为你重新编写了它。我运行并测试了它,它对我有用。

首先创建表并插入如下..

create table room1(ID int primary key auto_increment, topic varchar(30), payload int(11), DateTime_created timestamp);
   insert into room1(topic, payload) values ('nancy topic 1', 1);
   insert into room1(topic, payload) values ('nancy topic 2', 0);

这里是 vineri.php

<?php

$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "pass";
$dbname = "rooms";

$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
// Check connection
if (!$conn) {
 die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT ID, topic, payload, DateTime_created FROM room1 where payload='1' ORDER BY ID DESC LIMIT 1";

$retval = mysqli_query($conn,$sql);

while($row = mysqli_fetch_array($retval)){
  echo "ID: " . $row["ID"]. "<br>";
    echo "Topic: " . $row["topic"]. "<br>";
    echo "Payload: " . $row["payload"]. "<br>";
    echo "Timestamp: " . $row["DateTime_created"]. "<br>";
}


?>

index.html

<html><head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script 
  src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 
  type="text/javascript" charset="utf-8"></script>


<script>

$(document).ready(function(){

// set for formality. though you can pass it to backend as a variable   
var payload= 1;
var datasend = "payload="+ payload;

        $.ajax({

            type:'POST',
            url:'vineri.php',
            data:datasend,
                        crossDomain: true,
            cache:false,
            success:function(msg){

                $('#listposts').fadeIn('slow').prepend(msg);

            }

        });


});


</script>
  </head>
    <body>
    <div id="listposts"> </div>
    </body>

警告: ID 和 id 可能与其上限密集型不同。您可以看到,在我的表创建和 sql 查询中,我使用了 ID 而不是 id。所以要小心你使用的大小写字母

更新内容

抱歉迟到了。我不明白你想要什么。这正是我猜你想要的

如果您想获取最后一个 ID 为 200 的最后一行,那么

$sql = "SELECT ID, topic, payload, DateTime_created FROM room1 where ID='200' ";

通过使用限制 1,只会检索一行。

如果您想获取最后一个 ID 为 200 且有效负载为 0 的最后一行

$sql = "SELECT ID, topic, payload, DateTime_created FROM room1 where ID='200' and payload='0' ";

这是我编辑代码的方式。您可以测试我评论过的各种 sql 查询

<?php


$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "pass";
$dbname = "rooms";

$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
// Check connection
if (!$conn) {
 die("Connection failed: " . mysqli_connect_error());
}

//$sql = "SELECT ID, topic, payload, DateTime_created FROM room1 where payload='0'";

//if you want to get last rows with last id of 200 where payload is 0
//$sql = "SELECT ID, topic, payload, DateTime_created FROM room1 where ID='200' and payload='0' ";


//if you want to get last rows with last ID of 200 then
$sql = "SELECT ID, topic, payload, DateTime_created FROM room1 where ID='200' ";

$retval = mysqli_query($conn,$sql);

while($row = mysqli_fetch_array($retval)){
 $ID = $row["ID"];
 $topic =  $row["topic"];
  $payload =  $row["payload"];
  $DateTime_created =  $row["DateTime_created"];
}




if($payload ==0){

// insert record here


// return payload to the screen
echo "success<br><br>";

echo "ID: " .  $ID. "<br>";
    echo "Topic: " . $topic. "<br>";
    echo "Payload: " . $payload. "<br>";
    echo "Timestamp: " . $DateTime_created. "<br>";



}else{

//cannot insert record
echo "failed";

}

?>

【讨论】:

  • Nancy ,使用 WHERE payload=1 不会每次都检索最后一行,这就是我不使用它的原因,因为如果 msg 有效负载为 1,我想在网页上实时显示如果 msg 有效负载为 0,则不显示任何内容,我的数据库数据是从传感器插入的,因此您可以将其视为警报,因此当有效负载 = 1 停留在屏幕上并且当它变为 0 时清除屏幕,请执行你对如何去做有任何想法吗?非常感谢您的宝贵时间
  • 查看更新的内容部分。我添加了更多见解和更多代码更新
  • Nancy 我的 mysql 查询很好,因为我一直在检索最后一行,我需要修改我的
  • 把这个改成 if($payload ==0){ 改成 if($payload ==1){
  • 我一直在订购并使用了您的一些代码,现在它可以工作了!非常感谢南希
猜你喜欢
  • 1970-01-01
  • 2021-04-12
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多