Создать закрытие таблицы по последнему результату записи - PullRequest
0 голосов
/ 09 августа 2011

Я создаю базовую функцию поиска для корзины заказов.У меня есть цикл, который выглядит следующим образом:

$dataQuery = "SELECT * FROM `products` WHERE upper(`desc`) LIKE'%$find%'";
$data = mysql_query($dataQuery) or die(mysql_error());

$pageContent .= '
<table border="1">
    <thead>
        <tr>
            <th>Stock Code</th>
            <th>Description</th>
            <th>Packsize</th>
            <th>Price</th>
            <th>In-Stock?</th>
            <th>Quantity</th>
        </tr>
    </thead>
    <tbody>
    ';
 //And we display the results 
while($result = mysql_fetch_array( $data ))
{
    $prId = $result['id'];
    $prRefCode = $result['refCode'];
    $prDesc = $result['desc'];
    $prPack = $result['pack'];
    $prMeasure = $result['measure'];
    $prQuantity = $result['quantity'];
    $prDeptCode = $result['deptCode'];
    $prTaxable = $result['taxable'];
    $prPrice1 = $result['price1'];
    $prPrice2 = $result['price2'];
    $prCrdCode = $result['crdCode'];
    $prCost1 = $result['cost1'];
    $prCost2 = $result['cost2'];
    $pageContent .= '
        <tr>
            <td>'.$prId.'</td>
            <td>'.$prDesc.'</td>
            <td>'.$prPack.'x'.$prSize.' '.$prMeasure.'</td>
            <td>R'.$prPrice1.'</td>
    ';
    if (empty($prQuantity)) {
        $pageContent .= '
        <td>No</td>
        ';
        } else {
        $pageContent .= '
        <td>Yes</td>
        ';
        }
    $pageContent .= '
            <td>
                <form action="" method="post">
                    <div>
                        <input type="hidden" name="id" value="'.$prId.'" />
                        <input type="submit" name="action" value="Order" />
                    </div>
                </form>
            </td>            
       </tr>
    ';
} 
$pageContent .= '
        </tbody>
    </table>
';
//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
$anymatches=mysql_num_rows($data); 
if ($anymatches == 0) 
{
    $pageContent .= '
    <p>Sorry, but we can not find an entry to match your query</p>
';
} 

//And we remind them what they searched for 
 $pageContent .= '
<p><b>Searched For:</b>  '.$find.'</p>
';
}

$pageContent .= '
<br />
<p>All prices are inclusive of VAT</p>
';

Как вы можете видеть, это создает таблицу, которая отображает каждую строку продуктов таблицы, которая соответствует предложению where.

Что бы яНапример, к последнему результату цикла добавляется последнее вхождение $pageContent, поэтому оно эффективно закрывает таблицу.Это может быть:

$pageContent .= '
    </tbody>
</table>
';

В качестве дополнения, я хотел бы, чтобы первое вхождение $pageContent было добавлено непосредственно перед циклом при вызове результатов, эффективно открывая таблицу.Это может произойти:

$pageContent .= '
<table border="1">
    <thead>
        <tr>
            <th>Stock Code</th>
            <th>Description</th>
            <th>Packsize</th>
            <th>Price</th>
            <th>In-Stock?</th>
            <th>Quantity</th>
        </tr>
    </thead>
    <tbody>
    ';

Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь ищет недопустимую строку, параграф «Извините, но мы не можем найти запись, соответствующую вашему запросу», выводится взаголовок таблицы, которому не присвоены строки.Я пытаюсь создать эффект, при котором, если пользователь вводит недопустимую опцию поиска, этот абзац будет отображаться сам по себе без заголовка таблицы, что должно применяться только к вхождению действительной строки поиска.

ЕслиУ кого-то есть что-то по этому поводу, я был бы очень признателен!

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Есть несколько возможных решений. Вы можете использовать другое имя переменной для хранения таблицы HTML (что-то отличное от $pageContent), а затем объединить его с $pageContent, если количество строк больше нуля (эта проверка уже есть в нижней части кода) , Другой возможный подход - переместить вызов mysql_num_rows куда-нибудь перед генерацией таблицы, а затем обернуть связанный с таблицей код внутри if.

1 голос
/ 09 августа 2011

Возможно, вы можете установить переменную в 0, затем внутри цикла, проверить, если переменная == 0, если так, то вывести открытие таблицы.

Затем, в конце цикла, также проверьте, равна ли переменная количеству строк в наборе результатов, и, если это так, выведите закрывающие теги. Затем увеличивайте переменную каждую итерацию.

как то так:

$dataQuery = "SELECT * FROM `products` WHERE upper(`desc`) LIKE'%$find%'";
$data = mysql_query($dataQuery) or die(mysql_error());

//This counts the number or results - and if there wasn't any it gives them a little message explaining that 
    $anymatches = mysql_num_rows($data);
    if ($anymatches == 0) {
        $pageContent .= '
<p>Sorry, but we can not find an entry to match your query</p>
';
    }

$tempVar = 0;
//And we display the results 
while ($result = mysql_fetch_array($data)) {
    $prId = $result['id'];
    $prRefCode = $result['refCode'];
    $prDesc = $result['desc'];
    $prPack = $result['pack'];
    $prMeasure = $result['measure'];
    $prQuantity = $result['quantity'];
    $prDeptCode = $result['deptCode'];
    $prTaxable = $result['taxable'];
    $prPrice1 = $result['price1'];
    $prPrice2 = $result['price2'];
    $prCrdCode = $result['crdCode'];
    $prCost1 = $result['cost1'];
    $prCost2 = $result['cost2'];


    if ($tempVar == 0) {
        $pageContent .= '
<table border="1">
    <thead>
        <tr>
            <th>Stock Code</th>
            <th>Description</th>
            <th>Packsize</th>
            <th>Price</th>
            <th>In-Stock?</th>
            <th>Quantity</th>
        </tr>
    </thead>
    <tbody>
    ';
    }
    if ($tempVar == mysql_num_rows($data)) {
        $pageContent .= '
    </tbody>
</table>
';
    }

        $pageContent .= '
    <tr>
        <td>' . $prId . '</td>
        <td>' . $prDesc . '</td>
        <td>' . $prPack . 'x' . $prSize . ' ' . $prMeasure . '</td>
        <td>R' . $prPrice1 . '</td>
';
        if (empty($prQuantity)) {
            $pageContent .= '
    <td>No</td>
    ';
        } else {
            $pageContent .= '
    <td>Yes</td>
    ';
        }
        $pageContent .= '
        <td>
            <form action="" method="post">
                <div>
                    <input type="hidden" name="id" value="' . $prId . '" />
                    <input type="submit" name="action" value="Order" />
                </div>
            </form>
        </td>           
   </tr>
';
        $tempVar ++;
    }
    $pageContent .= '
    </tbody>
</table>
';


//And we remind them what they searched for 
    $pageContent .= '
<p><b>Searched For:</b>  ' . $find . '</p>
';
}

$pageContent .= '
<br />
<p>All prices are inclusive of VAT</p>
';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...