如果找不到字段,如何回显?

时间:2011-11-18 17:48:52

标签: php mysql

嗨我正在尝试弄清楚如果在完成数据库查找时输入的值不匹配将回显。

我正在使用ajax运行请求和php来执行查找

ajax.js:

function showResult(str)
{
if (str=="")
  {
  document.getElementById("description").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("description").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getuser.php?voucher="+str,true);
xmlhttp.send(null);
}

和getuser.php:

<?php
$q=$_GET["voucher"];
$con = mysql_connect('localhost', 'root', '');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

$sql="SELECT * FROM redemption WHERE voucher = '".$q."'";

$result = mysql_query($sql);
echo "<table>
<tr>
<th>Name</th>
<th>Product</th>
<th>Address</th>
<th>Status</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['product'] . "</td>";
  echo "<td>" . $row['address'] ." ".$row['city'] ." ".$row['province'] ." ".$row['postal'] . "</td>";
  echo "<td>" . $row['status'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>

我想要做的是,一旦该人输入了无效或未找到的凭证号码,我想返回“未找到凭证号码”的错误。数据库中还有一列存储状态,例如“已兑换”或“未兑换”。如何检查凭证编号是否存在以及是否已兑换?

我认为它必须是一种语法,如 $sql="SELECT * FROM redemption WHERE voucher = '".$q."'" AND status = 'not redeemed' 然后可能使用else或case语句?

提前致谢

3 个答案:

答案 0 :(得分:1)

SQL查询应该获取已知ID的凭证。使用PHP检查返回的状态变量的值。如果查询没有返回任何内容,则凭证号码不存在,否则您可以判断它是否已兑换。

另外,请查看sanitizing your inputs。您当前的代码容易受到SQL注入攻击(最常见的在线黑客攻击之一)。

答案 1 :(得分:1)

行后:

$result = mysql_query($sql);

尝试:

if (mysql_num_rows($result)==0)
    {
    die("Voucher number not found! Please contact us at livingdeal@overstock-king.com");
    }

您可以使用已有的SQL,并在第二部分中执行此操作:

while($row = mysql_fetch_array($result))
  {
  $row['status']=='redeemed' ? die("voucher already redeemed") : null;
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['product'] . "</td>";
  echo "<td>" . $row['address'] ." ".$row['city'] ." ".$row['province'] ." ".$row['postal'] . "</td>";
  echo "<td>" . $row['status'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

请注意,您使用的是MySql扩展程序that is being softly deprecated,并且有deal with cross browser compatibility issues for you的JavaScript库,并且为您提供了一个不易出错的代码库。正如Objective C的Child指出的那样,代码也值得注意SQL注入。

答案 2 :(得分:1)

我建议您做的一件事是status = "not redeemed"使用Datatypetinyint然后 你可以用1来兑换,0来不用兑换