-1

私はもともとここでこの質問をしました:

http://www.daniweb.com/web-development/php/threads/439484/why-arent-more-echos-being-executed

サーバー (フォーム) にアップロード:

http://cs4.sunyocc.edu/~jddancks/onestopshop/index.php

sort_mysql の結果は、他のクエリの配列をソートし、すべてのデータ配列で見つかったデータの 2 次元配列を返します。

編集:エコーで問題を解決しましたが、この機能に問題があります(と思います):

function sort_mysql_results()
{
    echo "<p>begin smr</p>";
    $match=array();
    $c_match=0;
    $num_it = 0;
    $num_args = func_num_args();
    $c = 0;
    $args = func_get_args();
    while(isset($args[0][$num_it]))
    {
        echo "<p>sort mysql beginning of loop</p>";
        $skip=false;
        $name = $args[0][$num_it]['item_name'];
        $i=1;
        while(isset($args[$i])&&!$skip)
        {
            $skip = !check($args[$i],$name);
            $i++;
        }
        $num_it++;
        if(!$skip)
        {
            $match[$c_match] = $args[0];
            $c_match++;
        }
    }
    echo "<p>Num args: ".$num_args.", Iterations: ".$num_it."</p>";
    return $match;
}

関数は次のように呼び出されます。

$match = sort_mysql_results(sort_soundex_results($queries[0]),get_array($queries[1]));

現在、$match は配列であると想定されています。何らかの理由でそうではありません。次のように結果を表に出力しようとします。

if(count($match)>0)
{
    $num=0;
    echo "<table>\n
    <tr>\n
    <td>Name</td><td>Category</td><td>Description</td>\n
    </tr>\n";
    while(isset($match[$num]))
    {
        echo "<tr>\n
        <a href=\"product2.php?id=".$match[$num]['ItemID']."\"><td>".$match[$num]['item_name']."</td><td>".$match[$num]['cat_name']."</td><td>".$match[$num]['descr']."</td></a>\n
        </tr>\n";
        $num++;
    }
    echo "</table>\n";
}
else
{
    echo "<p>No matches found. Go back and try different search criteria</p>\n";
}

参考までに、照会される mysql テーブルは次のようになります。

 +-------------+--------------+------+-----+---------------------+----------------+
 | Field       | Type         | Null | Key | Default             | Extra          |
 +-------------+--------------+------+-----+---------------------+----------------+
 | item_name   | varchar(100) | NO   |     |                     |                | 
 | ItemID      | mediumint(9) | NO   | PRI | NULL                | auto_increment | 
 | cat_name    | varchar(45)  | NO   |     |                     |                | 
 | userID      | mediumint(9) | NO   |     |                     |                | 
 | descr       | text         | NO   |     |                     |                | 
 | image       | tinytext     | YES  |     | NULL                |                | 
 | date        | timestamp    | NO   |     | CURRENT_TIMESTAMP   |                | 
 | highest_bid | decimal(6,2) | NO   |     | 0.00                |                | 
 | time_expire | timestamp    | NO   |     | 0000-00-00 00:00:00 |                | 
 +-------------+--------------+------+-----+---------------------+----------------+

編集:あなたがまだ私と一緒にいることを願っています。さらにデバッグを行いました:

...
if(count($match)>0)
{
    echo "<p>space</p><h2>In IF STATEMENT VALUE OF MATCH BEFORE WHILE LOOP</h2><p>space</p>\n";
    echo "<p>space</p><p>space</p><p>space</p>\n";
    var_dump($match);
    echo "<p>space</p><p>space</p><p>space</p>\n";
    echo "<h2>VALUE OF match[num]</h2>\n";
    echo "<p>space</p><p>space</p><p>space</p>\n";
    var_dump($match[0]);
    echo "<p>space</p><p>space</p><p>space</p>\n";
...

これをチェックしてください:

 In IF STATEMENT VALUE OF MATCH BEFORE WHILE LOOP

 space

 space

 space

space

array(1) { [0]=> array(1) { [0]=> array(12) { ["item_name"]=> string(10) "Squat Rack" ["ItemID"]=> string(1) "8" ["cat_name"]=> string(16) "Sports Equipment" ["userID"]=> string(1) "1" ["descr"]=> string(25) "Comes with 275 lbs plates" ["image"]=> string(14) "squat_rack.jpg" ["date"]=> string(19) "2012-10-15 09:34:36" ["highest_bid"]=> string(4) "0.00" ["time_expire"]=> string(19) "2012-12-01 00:00:01" ["src"]=> string(4) "S362" ["src2"]=> string(4) "S362" ["result"]=> string(1) "1" } } }
 space

 space

 space

 VALUE OF match[num]

 space

 space

 space

 array(1) { [0]=> array(12) { ["item_name"]=> string(10) "Squat Rack" ["ItemID"]=> string(1) "8" ["cat_name"]=> string(16) "Sports Equipment" ["userID"]=> string(1) "1" ["descr"]=> string(25) "Comes with 275 lbs plates" ["image"]=> string(14) "squat_rack.jpg" ["date"]=> string(19) "2012-10-15 09:34:36" ["highest_bid"]=> string(4) "0.00" ["time_expire"]=> string(19) "2012-12-01 00:00:01" ["src"]=> string(4) "S362" ["src2"]=> string(4) "S362" ["result"]=> string(1) "1" } }
 space

 space

 space

そのはずのように見えます。何が起きてる???

4

1 に答える 1

0

変更された sort_mysql_results は次のとおりです。

function sort_mysql_results()
{
    echo "<p>begin smr</p>";
    $match=array();
    $c_match=0;
    $num_it = 0;
    $c = 0;
    $args = func_get_args();
    while(isset($args[0][$num_it]))
    {
        echo "<p>sort mysql beginning of loop</p>";
        $skip=false;
        $name = $args[0][$num_it]['item_name'];
        $i=1;
        while(isset($args[$i])&&!$skip)
        {
            $skip = !check($args[$i],$name);
            $i++;
        }
        if(!$skip) //if found in another parameter
        {
            $match[$c_match] = $args[0][$num_it];
            $c_match++;
        }
        $num_it++;
    }
    echo "<p>Num args: ".$num_args.", Iterations: ".$num_it."</p>";
    var_dump($match);
    return $match;
}

基本的に、元のクエリは見つかったクエリの後にのみ保存し、2D 配列を保存しました。$match を 3D 配列にする単一の配列ではありません。うちはマダラさん投稿ありがとうございます

于 2012-11-16T20:23:02.950 に答える