【问题标题】:passing multiple values in a url在 url 中传递多个值
【发布时间】:2012-06-22 14:27:00
【问题描述】:

拥有一个包含业务线索列表的数据库。它们都被赋予了新的、热的、冷的等状态。我在页面上有链接,只显示新的或只有热的工作正常,但我似乎无法让一个工作显示全部。默认视图是新建。这是我正在处理的内容,在此先感谢您的帮助。

$query = "SELECT * FROM contacts WHERE contactstatus = 'New' ORDER BY date DESC";

if(isset($_GET['contactstatus'])
&& in_array($_GET['contactstatus'], array('New', 'Hot', 'Warm', 'Cold', 'Rejected', 'Closed')))
{      
$status = $_GET['contactstatus'];   
$query = "SELECT * FROM contacts WHERE contactstatus ORDER BY date DESC";  
}

if(isset($_GET['contactstatus'])
&& in_array($_GET['contactstatus'], array('New', 'Hot', 'Warm', 'Cold', 'Rejected', 'Closed')))
{      
$status = $_GET['contactstatus'];   
$query = "SELECT * FROM contacts WHERE contactstatus = '".$status."' ORDER BY date DESC";  
}  

我用来获取所有内容的网址是:

www.mydomain.com/leads.php?contactstatus=New&contactstatus=Hot&contactstatus=Cold&contactstatus=Rejected&contactstatus=Closed

我也试过了:

www.mydomain.com/leads.php?contactstatus=New&Hot&Cold&Rejected&Closed

【问题讨论】:

  • 您是否尝试获取所有潜在客户以显示是否没有通过 URL 传递状态类型,或者是否具有允许您通过获取字符串传递多个联系状态的链接?
  • 我正在尝试创建一个显示所有状态的“全部”链接。页面上的默认值应仅为状态为“新”的潜在客户

标签: php mysql


【解决方案1】:

当您尝试通过地址传递相同的变量时,您是否尝试过使用数组,否则您将覆盖 get 变量。

像这样www.mydomain.com/leads.php?contactstatus[]=New&contactstatus[]=Hot&contactstatus[]=Cold&contactstatus[]=Rejected&contactstatus[]=Closed

$status_types = Array('New', 'Hot', 'Warm', 'Cold', 'Rejected', 'Closed');

$statuses = Array();
$query  = 'SELECT * FROM contacts ';
for($i=0, $j=count($_GET['contactstatus']); $i<$j; $i++){
    if(in_array($_GET['contactstatus'][$i], $status_types)){
        if($i==0)
            $query.= " WHERE contactstatus IN (";

        $statuses[] = $_GET['contactstatus'][$i];
        $query .= "'".$_GET['contactstatus'][$i]."'";
        if($i==($j-1))
            $query .= ")";

    }
}
$query .= ' ORDER BY contacts.date DESC';  

如果没有通过任何联系状态,我已将其设置为自动全选

【讨论】:

  • 嗯,没有让它工作。我正在学习,所以你在 $i 和 $j 东西上迷失了我。默认视图是显示新的$query = "SELECT * FROM contacts WHERE contactstatus = 'New' ORDER BY date DESC" 然后我有if(isset($_GET['contactstatus']) &amp;&amp; in_array($_GET['contactstatus'], array('New', 'Hot', 'Warm', 'Cold', 'Rejected', 'Closed'))) { $status = $_GET['contactstatus']; $query = "SELECT * FROM contacts WHERE contactstatus = '".$status."' ORDER BY date DESC"; } URL 中的所有参数都可以单独正常工作,我正在尝试创建一个显示所有联系人而不考虑状态的参数。谢谢!
  • 这是我学到的,如果我错了,也许你可以从这里帮助我并纠正我:for($i=0, $j=count($GET['contactstatus']); $i&lt;$j: $i++ - 这只是告诉它循环并继续,而 $i 较少比 $j if(in_array($GET['contactstatus'][$i], $status_types -- 这会在 status_types 中搜索 $i?或联系状态? (在这里感到困惑)if($i==0) $query.= " WHERE contactstatus IN ("; - 表示如果 $i 等于 0,其中contactstaus 是数组...我现在迷路了。上面的代码适用于各个状态,但我仍然不知道如何提取所有状态并将默认设置为 New。
  • 我已经为此工作了 2 天,但无法使其正常工作,您能提供更多帮助吗?
  • 抱歉 Josh 我周末不在,如果您没有通过查询字符串传递任何联系状态,您将获得所有结果。上面代码的伪代码是这样的:我设置了一个基本查询 $query 然后在需要它们时连接额外的部分。因此,如果 for 没有运行一次(因为 $_GET['contactstatus'] 的长度为零 [因为它没有值]),那么查询将只是:SELECT * FROM contacts ORDER BY contacts.date DESC。
【解决方案2】:

第一个 if 看起来与第二个相同。您还缺少第一个查询中的 WHERE 限定符。

如果要获取所有联系人,请更改此设置

$query = "SELECT * FROM contacts WHERE contactstatus ORDER BY contacts.date DESC"; 

到这里

$query = "SELECT * FROM contacts ORDER BY contacts.date DESC"; 

【讨论】:

    【解决方案3】:

    难道你不能将你的 php 页面的默认行为设置为全部显示吗?也就是说,如果没有设置 $_GET 参数(在 URL 中),您的页面只会从数据库中选择所有潜在客户。

    $query = " SELECT * FROM `contacts` ORDER BY date DESC";
    $result = $mysqli->query($query);
    
    if($result && $result->num_rows > 0){
        // do something with all leads
    }
    

    为了处理特定的状态,我们有

    if( isset($_GET['contactstatus']) ){
    // select leads based on status 
    }  
    

    如果您想将多个值传递给单个 GET 参数,请参阅Passing multiple values for same GET variable in URL

    【讨论】:

    • 默认视图是显示 New $query = "SELECT * FROM contacts WHERE contactstatus = 'New' ORDER BY date DESC" 然后我有 if(isset($_GET['contactstatus']) &amp;&amp; in_array($_GET['contactstatus'], array('New', 'Hot', 'Warm', 'Cold', 'Rejected', 'Closed'))) { $status = $_GET['contactstatus']; $query = "SELECT * FROM contacts WHERE contactstatus = '".$status."' ORDER BY date DESC"; } URL 中的所有参数都可以单独工作,我正在尝试创建一个也显示 All 的参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多