PHP中的搜索功能使用数值但不适用于字母/单词

时间:2017-09-12 03:12:14

标签: php mysql numeric alphabetical

人们可以在我的平台上订购链接,这些链接存储在两个不同的表中,例如wp_project和wp_articles。这样做的原因是当人们为1个链接下订单时,会创建一个项目行并创建一个文章行。

但是,如果客户订购10个链接,则会有一个项目条目和10个文章条目。现在这与我的问题不太相关,只是为了解释系统是如何工作的。

项目和文章有两个常用标识符,ID和项目标题都存储在inpu_project和inpu_articles中。

现在,如果我想回显一个项目的所有链接,我建立了一个搜索功能,我可以在其中选择项目ID,点击搜索以及客户是否订购了1个链接或20个链接将显示链接。

当我想基于项目标题而不是ID进行搜索时,问题就出现了,ID是非数字的,但只是单词(有时会有空格)。

这是为了防止错误日志中的错误未定义索引

    $where_clouse='';

这是基于项目标题的搜索功能:

    if(isset($_GET['todo']) && $_GET['todo']=='search')
    {
        if($_GET['proid']!=0){
            $where_clouse.=' AND P.`project_title`='.$_GET['proid'];
        }
    }

这是从中提取链接的数据库查询:

    $sql="SELECT P.`project_title`, P.`backlink` FROM `inpu_articles` AS P 
WHERE P.`post_it_posted` = '1' ".$where_clouse."  ORDER BY P.`project_title`  ASC";
    $backlinks=$wpdb->get_results($sql, ARRAY_A);

这是触发我粘贴的第一个代码的实际搜索功能:

    <p>Select a project title and hit search!</p>
    <form action="" method="get">
        <input type="hidden" name="todo" id="todo" value="search" />
        <select name="proid" id="proid">
        <option value="0">All Projects</option>
        <?php $projects=getTitles(); foreach($projects as $project){ ?>
            <option value="<?php echo $project['title']; ?>" <?php if(isset($_GET['proid']) && $_GET['proid']==$project['title'] ) { echo 'selected="selected"';  } ?> ><?php echo $project['title'] ?>
            </option>
        <?php } ?>
        </select>
        <input class="submit_search" type="submit" id="search_button" value="Search"/>
    </form>

这是从项目表中提取项目标题的代码:

    function getTitles($where=false)
    {
        global $wpdb;
        $sql="SELECT  `title`, `link` FROM `inpu_project` WHERE `link`='1' ORDER BY `title` ASC";
        $result = $wpdb->get_results($sql, ARRAY_A);
        return $result;
    }

所有这些都非常直接,如果我用inpu_articles和带有数字id的inpu_project表替换代码中的非数字标题,它可以100%正常工作。

然后代码完全按照它的方式执行,但是当我使用项目标题时,它只显示每个客户端订购的所有链接,并且我的数据库中不会显示任何错误。这就像是找不到匹配或者其他东西,这很奇怪。

我在这里错过了一些东西吗?是否无法匹配单词或者在使用单词而不是数字值时是否应该调整某些内容?

最后,对于它的价值,这是回复查询的代码:

    <?php foreach ($backlinks as $backlink) {
        $backlink_overview=$backlink['backlink'];
    ?>
        <ul>
            <li><?php echo $backlink_overview; ?></li>
        </ul>
    <?php } ?>

标题会显示在我的表单/搜索下拉菜单中,所以我很惊讶它无法将项目标题与存储在文章表中的标题相匹配。

我的直觉说这是出错的地方:

    P.`project_title`='.$_GET['proid'];

但它不会抛出任何语法错误或任何错误,它只显示存储在inpu_article表中的所有链接,完全忽略我的搜索功能。

2 个答案:

答案 0 :(得分:0)

我认为你在SQL语句中可能出错了。并且您可以将sql string语句打印到屏幕并将其复制到Mysql中进行检查。我希望你能找到你的错误。

答案 1 :(得分:0)

问题在于where_clausewhere_clause本身。 要检查输入,您需要检查参数是否已设置且不为空。然后对于where子句,您需要将字符串放入引号。将这部分代码更改为bellow

if(isset($_GET['proid']) && !empty($_GET['proid'])){ 
      $where_clouse.=" AND P.project_title='".$_GET['proid']."'"; 
  }