我有一个mysql表,名为foods,列为“id,name,addinfo,picname,mg1up,mg100g”。我有一个表格,用户可以提交1-20个食品名称。php文件接受名为$terms[]的数组中提交的食物名。我需要在sql表中搜索所有术语,并为每个术语的所有列返回结果。
但是,结果仅显示提交的第一个词,重复次数与输入次数相同(例如,如果输入了两个词,则第一个词将在结果中输出两次,而不是第一个词结果,然后是第二个词结果)。
我不知道我做错了什么。下面是我的代码(我还没有添加清理字符串的函数):

<?php

error_reporting(E_ALL);

ini_set('display_errors', '1');

//connect to the wordpress (bluehost)DB

require_once '../../../wp-config.php';

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die('Could not connect to mysql');

$Db = mysql_select_db(DB_NAME, $link) or die('Could not select database.');

//check to see if the search term has a value, matches "name" column in DB, and if so, put it into an array called terms
if (isset($_POST['terms'])) {

    $terms = ($_POST['terms']);

        if (count($terms) > 0 ) {

            $results=array();

            foreach($terms as $term) {

                $sql = 'SELECT * from `wpqr_foods` WHERE `name` like  "%'. $term .'%" ORDER BY name ASC';


                $Q1 = mysql_query($sql);

                if(mysql_num_rows($Q1)) {

                    while ($Res = mysql_fetch_assoc($Q1)) {

                        $results[] = $Res;

                    }

                }

                //$results = mysql_query($sql);


                $sql = 'SELECT * from wpqr_foods WHERE name LIKE "%'. $term .'%" ORDER BY name ASC';

                $Q2 = mysql_query($sql);

                //get results

                if(mysql_num_rows($Q2)) {

                    while ($Res = mysql_fetch_assoc($Q2)) {

                        $results[] = $Res;

                    }

                }

            }

            if (count($results) > 0 ) {

                foreach ($results as $CurRes ) {

                    echo $CurRes['name']. "<br/>";
                    echo $CurRes['addinfo']. "<hr/>";

                    /*

                    [id] => 5
                    [name] => Apples
                    [value] => Yes
                    [addinfo] => They can eat apples.  They can also eat the skin of the apple and the leaves of the apple tree, but the tree leaves are high in calcium, so limit their intake.  They can also chew on the apple tree branches.
                    [picname] => apple
                    [mgc1cup] => 5.8
                    [mgc100g] => 4.6

                    */
                }

            }

            else {

                echo "(nothing entered)";//MEANS $TERM IS EMPTY

            }


        }
        else {

            echo "(nothing entered)";//means $_POST IS NOT SET (end of if(isset($_POST['term'])) { )

        }
}

//function to sanitize array values from form
function sanitizeString($var) {
         if (is_array($val))
           {
           foreach ($val as $k => $v)
               {
               $val[$k] = htmlentities(strip_tags($v),ENT_QUOTES);
               }
           }
         else
           {
             $val = htmlentities(strip_tags($terms),ENT_QUOTES);
           }
        return $val;
}
?>

HTML是
<div class="my-form">
        <form role="form" id="step1" method="post" action="/wp-content/themes/mia/vitcdata.php">
            <p class="text-box"><label for="box1">Food <span class="box-number">1&nbsp;</span></label><input type="text" name="terms[]" value="" placeholder="apples" id="box1" />&nbsp;<a class="add-box" href="#">Add More</a></p>
            <p><input type="submit" value="Submit" /></p>
        </form>

表单有动态表单字段,用户可以通过javascript添加这些字段,他们可以添加多达20个文本输入,其中所有输入的术语都被添加到$terms[]数组中。
所以,如果我测试它,使用两个字段,输入“apples”和“bananas”,结果会显示“apples”的所有数据重复两次。

最佳答案

我建议采取以下两种方法:
看起来查询数据库并将结果推送到$results中的代码块是重复的。您可能想去掉这个被欺骗的块,因为这将为每个不同的项创建2倍的结果。
我怀疑实际上通过表单传递给服务器的是一个包含空格分隔(或逗号,或用户选择输入的任何分隔符)的字符串。即使您选择将其作为数组传递(并在服务器端接收),但它实际上是一个字符串,您必须自己将其(或某些其他方法)传递到数组中。要检查是否是这种情况(如果您还没有这样做),您应该检查explode循环中的某个地方,看看它是否是您所期望的。

10-07 14:00