如果没有输入,请不要传递自定义变量

时间:2014-08-04 09:32:13

标签: php mysql

我对mysql和php完全陌生。我正在开发一个项目,该项目有很多用户输入来查询数据库。

我无法使用多个用户选项来查询数据库。

     <form action="QUERYFORM1.php" method="get">

  <div><label for="Value1">Enter Value1
  <input type="text" name="Value1" id="Value1"/>
  </label>  
</div>

   <div><label for="Value2">Enter Value2
  <input type="text" name="Value2" id="Value2"/>
  </label>  

     <div><input type="submit" value="Go"/></div>

    </form>

上面是用户输入表单,如果您输入两个值,但是如果您只输入一个值,则该查询会返回空白,因为查询会返回空白,然后询问空白值。

如果没有输入变量,是否可以不将该变量传递到下一页?

以下是表单启动的php文件中的一些代码

    $Value1 = $_GET['Value1'];
    $Value2 = $_GET['Value2']; 


$result = mysqli_query($link, "SELECT * FROM trackdata WHERE Value1='$Value1' AND Value2='$Value2'"); 
if (!$result)  
{  

  $error = 'Error fetching data: ' . mysqli_error($link);  

  include 'error.html.php';  

  exit();  

}  


while($row = mysqli_fetch_array($result)) {
  echo $row['Value1'] . " " . $row['Value2'];
}

是否有我可以使用的php函数,以便如果Value1为空,它仍然只使用value2查询数据库?

希望这是有道理和对不起如果这是一个如此简单的问题,我在网上搜索并搜索了答案,但什么都找不到。

由于

5 个答案:

答案 0 :(得分:1)

假设您有五个值

$_GET['Value1'] ..... $_GET['Value5']

$query = "";

foreach($_GET as $key => $value)
{
  if(!empty($value))
  {
    if(empty($query))
    {
      $query = "SELECT * FROM trackdata WHERE ".$key."=".$value;
    }
    else
    {
      $query .= " AND ".$key."=".$value;
    }
  }
}

希望这能解决问题。

答案 1 :(得分:0)

嗯,这很简单:你可以使用&#34; if&#34;声明。 如果值1为空,则仅使用值2进行查询,否则使用两个值进行查询。

if($Value1=""){
$result = mysqli_query($link, "SELECT * FROM trackdata WHERE Value2='$Value2'");
} else {
$result = mysqli_query($link, "SELECT * FROM trackdata WHERE Value1='$Value1' AND Value2='$Value2'");
}
编辑:好的,这个有点棘手(我特别担心所有的连接)。这个想法是:

1 - 我们将值存储在数组

2 - 我们扫描数组,直到找到非空白值

3 - 如果我们找到一个非空值,我们添加一个WHERE子句并将该值从该值扫描到末尾,寻找其他非空值

4 - 每当我们找到一个新的非空值时,我们将它添加到WHERE子句

尝试一下:

$Value1=$_GET['Value1'];
$Value2=$_GET['Value2'];
...
$ValueN=$_GET['ValueN'];

$query = "SELECT * FROM trackdata";

$values = array(1 => $Value1, $Value2... , $ValueN);

for($i = 1; $i < count($values)+1; $i++){

   if($values[$i] != ""){

      $query = $query." WHERE Value".$i."='$Value".$i."'"; //begin the WHERE clause with the first non-blank value

      //add all other non-blank values to the WHERE clause
      //to do that, we scan the array from the first non-blank value to the end
      for($j = $i+1; $j < count($values)+1; $j++){

         if($values[$j] != ""){

            $query = $query." AND Value".$j."='$Value".$j."'";

         }

      }

   break;//we break the first for loop, so that it doesn't add undesired WHERE clauses

   }

}

$query = $query.";"; //for good practice, then the query should be good to go!

这当然假设你的所有变量都被命名为&#34; ValueX&#34;,并且索引是连续的(即如果你有Value1和Value3,你必须在它们之间有Value2,或者它赢了&#39;工作)。

答案 2 :(得分:0)

为什么不这样做:

"SELECT * FROM trackdata WHERE Value1='$Value1'" . ($Value2 ? " AND Value2='$Value2'" : '')

答案 3 :(得分:0)

您可以在数据库查询中使用“OR”关键字而不是“AND”。 因此,如果未设置$ value1,则将检查$ value2。

我希望我能说清楚。

答案 4 :(得分:0)

您可以拆分查询以放置逻辑

例如:

   <?php
    $Value1 ='';
    $Value2 = '13';
    if($Value1 || $Value2){ 
    $query = 'SELECT * FROM trackdata WHERE';

         if($Value1 && $Value2){
            $query.= "`Value1`=".$Value1." AND `Value2`=".$Value2;
         }
         elseif(!$Value1){
            $query.= " `Value2`=".$Value2;
         }
        elseif(!$Value2){
            $query.= " `Value1`=".$Value1;
         }
         $query.=';';
         echo $query;
     }
     else{
        echo 'invalid';
     }