我对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查询数据库?
希望这是有道理和对不起如果这是一个如此简单的问题,我在网上搜索并搜索了答案,但什么都找不到。
由于
答案 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';
}