0
<?php
$query = $_GET['query'];
// gets value sent over search form

$min_length = 6;
// you can set minimum length of the query if you want

if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then

$query = htmlspecialchars($query);
// changes characters used in html to their equivalents, for example: < to &gt;

$query = mysql_real_escape_string($query);
// makes sure nobody uses SQL injection

$raw_results = mysql_query("SELECT * FROM cwnational WHERE (`postcode` = '$query') OR (`structure` LIKE '%".$query."%')") or die(mysql_error());

if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following


while($results = mysql_fetch_array($raw_results)){

echo "<p><h3>".$results['postcode']."</h3>".$results['structure']."</p>";



}

while($results = mysql_fetch_array($raw_results)){

if($results['structure'] = "National") {

echo "print national_table";

} else {
echo "print local_table";



}



}
else{ // if there is no matching rows do following
echo "No results";
        }

    }
    else{ // if query length is less than minimum
        echo "Minimum length is ".$min_length;
    }


?>
</body>

私は今完全に困惑しています..

$query の一致に成功したら、構造体と呼ばれる列である配列の 2 番目の部分を使用し、それをスイッチとして使用して、db から table_local または table_national を出力します。

正しいアプローチを理解してから書き直し、

if (empty($searchTerm)) {
                echo "<h1>Empty search term</h1>";
                $sqlQuery = false;
            } elseif (strlen($searchTerm) < $minQueryLength) {
                echo "<h1>Search term must be at least ".$minQueryLength." characters long.";
                $sqlQuery = false;
            } else {
                if (strlen($firstPart) + strlen($secondPart) == 7) {
                    $sqlQuery = $mysqli->query("SELECT `postcode`, `structure` FROM `cwnational` WHERE `postcode` LIKE '".$firstPart." ".$secondPart."'");
                } else {
                    $sqlQuery = $mysqli->query("SELECT `postcode`, `structure` FROM `cwnational` WHERE REPLACE(`postcode`, ' ', '') LIKE '".$searchTerm."%'");
                }
            }

            if (is_object($sqlQuery) && $sqlQuery->num_rows >= 1) {
                $resultArr = array();
                while($row = $sqlQuery->fetch_assoc()) {
                    $resultArr[$row['postcode']] = array();
                    $priceQuery = $mysqli->query("SELECT `base_rate`, `commit_mbps` FROM `pricing` WHERE `structure` = '".$row['structure']."'");
                    if ($priceQuery->num_rows >= 1) {
                        while ($price = $priceQuery->fetch_assoc()) {
                            $resultArr[$row['postcode']][$price['commit_mbps']] = ((float)$price['base_rate'] + $transit[$price['commit_mbps']] ) + ( ( $transit[$price['commit_mbps']] + (float)$price['base_rate'] ) * ((float)$apiUser['margin']/100)  )   ;
                        }
                    }
                }
4

2 に答える 2

2

結果セットを 2 回読んでいます。これは最初のループでは機能しますが、すでに最後に到達しているため、2 番目のループは実行されません。結果を 2 回読み取る必要がある場合は、次のようにします。

mysql_data_seek ($raw_results , 0 )

2 番目のループの直前に、ポインターを再び先頭に設定します。

もちろん、mysqli を使用する必要があります...

于 2013-07-02T22:55:36.503 に答える
1

今何がうまくいかないのですか?ここに等号を追加する必要があるようです。

if($results['structure'] == "National") {

注:PHP条件の二重等号

また、「while」から「else」が出ているように見えますが、それは機能しません。そして、この「while」ループを 2 回実行しましたが、それらを 1 つの「While」に結合します。
while($results = mysql_fetch_array($raw_results)){

于 2013-07-02T22:47:57.720 に答える