【问题标题】:if statement not working properly regarding return value- PHPif 语句在返回值方面无法正常工作 - PHP
【发布时间】:2016-04-05 07:29:34
【问题描述】:

我尝试了几天解决这个问题,但仍然无法解决。我正在尝试使用mysqli_num_rows($result)>0 执行 if 语句,但它无法正常工作。这听起来很奇怪。如果result>0,它将显示记录(工作正常),否则不会显示任何记录(也工作正常)但表格继续显示。我不知道为什么(如果结果返回为空,则该表不应该出现)。另一个相关问题是,当没有记录时,似乎出现了 3 个值(图片列下没有图像值,Dat Reg 列下的日期,在终止会员资格栏下删除)。任何帮助将不胜感激。当结果返回为空时,我无法让“无图像值”、“日期”和“删除”消失。我正在尝试使整个表格不出现,以便列(也不会显示,但它无法工作)。

userpage.php

<p align="left">A. YOUR RECORDS </p>
<p align="left">
<?php
echo "<tr><td></tr></td>";
if(mysqli_num_rows($result)>0){
echo "<table cellpadding=10 border=0 id='secondtable'>";
echo "<tr><td bgcolor=#698C00 class='white'>"."Membership"."</td>".
"<td bgcolor=#698C00 class='white'>"."Title"."</td>".
"<td bgcolor=#698C00 class='white'>"."Location"."</td>".
"<td bgcolor=#698C00 class='white'>"."Phone"."</td>".
"<td bgcolor=#698C00 class='white'>"."Picture"."</td>".
"<td bgcolor=#698C00 class='white'>"."Date Reg"."</td>".
"<td bgcolor=#698C00 class='white'>"."Terminate Membership?"."</td></tr>";
if(mysqli_num_rows($result)>0){
while( $row = $result->fetch_array(MYSQLI_ASSOC)){
$showdateua=$row['dateua'];
$showdateua=date('d-m-Y',strtotime($showdateua));
echo "<tr><td bgcolor=#DCDCDC>".$_SESSION['Membership']=$row['Membership'].
"</td><td bgcolor=#DCDCDC>".$_SESSION['Title']=$row['Title'].
"</td><td bgcolor=#DCDCDC>".$_SESSION['location']=$row['location'].
"</td><td bgcolor=#DCDCDC>".$_SESSION['adphone']=$row['adphone'].
"</td><td bgcolor=#DCDCDC>".
'<img src="'.$_SESSION['image1']=$row['image1'].'"alt="No image"style="width:100px;height:100px;"/>'.
"</td><td bgcolor=#DCDCDC>".$_SESSION['dateua']=$showdateua.
"</td><td bgcolor=#DCDCDC>"."<a href=\"rundelup.php?idadv=".$row['idadv']."\">"."Delete"."</a></td></tr>";
}
}
echo "</table>";}
else
{
if(mysqli_num_rows($result)===0)
{echo "No records";}
}?>
<?php
if(isset($_SESSION['id'])){
if (isset($result)){
if(mysqli_num_rows($result)>0){
echo "<table>";
$page=(int)$page;
if($page>$tpages)
{$page=$tpages;}
if($page<1)
{$page=1;
}
if($page==1){
echo "";}
else
{
//go to first page 
echo "<tr><td><a href='?page=1'class='button'>FIRST</a></td>";
}
if($page>1)
{
//go to previous page to show previous 3 items. 
echo "<td><a href='?page=".($page-1)."'class='button'><<</a></td>";
}
echo "<ul class='page'>";
for($i=max($page-4,1);$i<=max(1,min($tpages,$page+4));$i++)
{
if($i==$page){
echo "<td><class='current'>".$i."</td>";
}
else{
echo "<td><a href='?page=".$i."'>".$i."</a></td>";}
//echo "<tr><td><a href=useradacc.php?page=".$i.">".$i."</a></td></tr>";
}
echo "</ul>";
if($page!=$tpages)
{
//go to next page to show next 3 items. 
echo "<td><a href='?page=".($page+1)."'class='button'>>></a></td>";
}
if($page==$tpages)
{
    echo "";}
    else{
//go to last page 
echo "<td><a href='?page=".($page=$tpages)."'class='button'>LAST</a></td></tr>";
}
echo "</table>";
}
}}
else
{echo "Insert record";
}
?>

包含文件 (run.php)

<?php
if(isset($conn)){
$id = $_SESSION['id'];
//pagination calculation
$reclimit=3;
if(isset($_GET['page'])){
$page=$_GET['page'];}
else
{
$page=1;
}
$start=(($page-1)*$reclimit);
$advert = "SELECT u.*,ua.* FROM uskkk u LEFT JOIN uaddd ua ON  u.id=ua.id
WHERE u.id='".$id."'";
$result=$conn->query($advert);
$total=$result->num_rows;
$tpages=ceil($total/$reclimit);
//pagination script ends here
$advert = "SELECT u.*,ua.* FROM uskkk u LEFT JOIN uaddd ua ON  u.id=ua.id
WHERE u.id='".$id."'ORDER BY dateua DESC LIMIT $start,$reclimit";
$statement = $conn->prepare($advert);
$statement->execute();
$result = $statement->get_result(); }
if ($conn->connect_error){
die("Connection failed: ".$conn->connect_error);
} 
?>

【问题讨论】:

  • 你正在混合程序和 OO mysqli 风格
  • 感谢@Chay22 的回复。注意到......我认为两者都可以混合......?呵呵......谢谢你的提示......
  • 我先试一试.. 因为很难区分程序和 OO mysqli 风格.. 对我来说看起来都一样..
  • @Chay22。我按照你的建议做了……但还是一样……有希望吗?
  • 不过,这只是一个简单的通知。你不能像这样在$statement 上做准备好的声明。改用$conn-&gt;query() 并使用$conn-&gt;fetch_assoc() 获取结果

标签: php mysql


【解决方案1】:

您的代码可能还有其他错误。 通过查看它的输出,确保你得到了一个有效的 SQL 查询。

$advert = "SELECT u.*,ua.* FROM uskkk u LEFT JOIN uaddd ua ON u.id=ua.id WHERE u.id='".$id."'ORDER BY dateua DESC LIMIT $start,$reclimit";
$statement = $conn->query($advert);
var_dump($statement);

看到结果了吗?


准备好的陈述 使用? 符号作为动态参数,并使用bind_param() 将其变量绑定到sql 查询之外。

$stmt= $conn->prepare("SELECT u.*,ua.* FROM uskkk u LEFT JOIN uaddd ua ON  u.id=ua.id WHERE u.id= ? ORDER BY dateua DESC LIMIT ?,?");
$stmt->bind_param("iii", $id, $start, $reclimit);
$stmt->execute();
$result = $stmt->get_result();

你可以在之后获取结果

while($row = $result->fetch_array(MYSQLI_ASSOC)){
   var_dump($row);
}

确保您知道要绑定的变量类型

i = 对应变量的类型为整数

d = 对应变量的类型为 double

s = 对应的变量是字符串类型

b = 对应的变量是一个 blob,会以数据包的形式发送

来自http://php.net/manual/en/mysqli-stmt.bind-param.php

或者只使用mysqli::query

$stmt= $conn->query("SELECT u.*,ua.* FROM uskkk u LEFT JOIN uaddd ua ON u.id=ua.id WHERE u.id='".$id."'ORDER BY dateua DESC LIMIT $start,$reclimit");
while($row = $result->fetch_array()){
   var_dump($row);
}

像这样改变表结构

echo "<table cellpadding=10 border=0 id='secondtable'>";
echo "<tr><td bgcolor=#698C00 class='white'>" . "Membership" . "</td>" . "<td bgcolor=#698C00 class='white'>" . "Title" . "</td>" . "<td bgcolor=#698C00 class='white'>" . "Location" . "</td>" . "<td bgcolor=#698C00 class='white'>" . "Phone" . "</td>" . "<td bgcolor=#698C00 class='white'>" . "Picture" . "</td>" . "<td bgcolor=#698C00 class='white'>" . "Date Reg" . "</td>" . "<td bgcolor=#698C00 class='white'>" . "Terminate Membership?" . "</td></tr>";
 
if (mysqli_num_rows($result) > 0) {
   while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
     $showdateua = $row['dateua'];
     $showdateua = date('d-m-Y', strtotime($showdateua));
     echo "<tr><td bgcolor=#DCDCDC>" . $_SESSION['Membership'] = $row['Membership'] . "</td><td bgcolor=#DCDCDC>" . $_SESSION['Title'] = $row['Title'] . "</td><td bgcolor=#DCDCDC>" . $_SESSION['location'] = $row['location'] . "</td><td bgcolor=#DCDCDC>" . $_SESSION['adphone'] = $row['adphone'] . "</td><td bgcolor=#DCDCDC>" . '<img src="' . $_SESSION['image1'] = $row['image1'] . '"alt="No image"style="width:100px;height:100px;"/>' . "</td><td bgcolor=#DCDCDC>" . $_SESSION['dateua'] = $showdateua . "</td><td bgcolor=#DCDCDC>" . "<a href=\"rundelup.php?idadv=" . $row['idadv'] . "\">" . "Delete" . "</a></td></tr>";
   }
} else {
  echo "No records";
} 
echo "</table>";

【讨论】:

  • 嗨@Chay22。 Tqs。这里有一些发展。但是现在我收到一个错误“在第 38 行调用非对象上的成员函数 get_result() .....”它指的是“$stmt->bind_param("iii", $id, $start, $重新限制);"。
  • @kmaJJ 您的变量$id 是整数类型吗?或者错误可能来自sql语法,我猜。
  • 我尝试了你在上面给我的最新选项。没有提示错误......但是我之前提到的“无图像值”,“日期”和“删除”三个文本仍然出现。我已经清除了数据库。 :-(
  • 如果结果>0,则显示记录。否则它会消失(工作正常)但是当结果> 0时我无法让 3 文本消失。即使我清除了数据库,它也会一直显示。我的脚本或代码安排有那么糟糕吗?
  • 什么样的文字?我无法理解。无论如何,自从你在循环中设置它以来,你正在覆盖你的会话
猜你喜欢
  • 2019-07-23
  • 2015-09-27
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多