Поиск заказа PHP - при добавлении элемента на страницу обновления заказа, как применить старый поисковый запрос? - PullRequest
1 голос
/ 11 августа 2011

Я создаю простую функцию поиска, которая запрашивает строку ввода пользователя для совпадений в каталоге продуктов, который хранится в таблице в MySQL.

Это мой код для этой формы поиска:

<form name="search" method="post" action="'.$_SERVER['PHP_SELF'].'">
    <div>
    Search For Product: <input type="text" name="find" style="background: #F4F4F4; font-family: "Lucida Console", Monaco, monospace;" />
    <input type="hidden" name="searching" value="yes" />
    <input type="submit" name="search" value="Search" />
    </div>
</form>

Вот код, который обрабатывает эту строку:

//This is only displayed if they have submitted the form 
if ($searching == "yes") 
{ 
$pageContent = '
<h2>Place your order</h2>
<p>Your order contains '.count($_SESSION['order']).' items. (<a href="?orders">View your order</a>)</p>
<form name="search" method="post" action="'.$_SERVER['PHP_SELF'].'">
    <div>
    Search For Product: <input type="text" name="find" style="background: #F4F4F4; font-family: "Lucida Console", Monaco, monospace;" />
    <input type="hidden" name="searching" value="yes" />
    <input type="submit" name="search" value="Search" />
    </div>
</form>
<br />
';


//If they did not enter a search term we give them an error 
if ($find == "") 
{ 
$pageContent .= '<p>You forgot to enter a search term</p>';
echo $head1 . $pageDetails . $head2 . $header . $menu . $belowMenu . $content . $pageContent . $footer . $pageScripts; 
exit;
} 

// Otherwise we connect to our Database 
$bccConn   = mysql_connect($bccHost, $bccUser, $bccPass) or exit(mysql_error());
             mysql_select_db($bccDB, $bccConn) or exit(mysql_error());

// We preform a bit of filtering 

$find = strtoupper($find); 
$find = strip_tags($find); 
$find = trim ($find); 
$keywords_array = explode(' ', $find);

//Now we search for our search term, in the field the user specified 
$dataQuery = "SELECT * FROM `products` WHERE upper(`desc`) LIKE '%" 
   . implode("%' AND upper(`desc`) LIKE '%", $keywords_array) 
   . "%'";

$data = mysql_query($dataQuery) or die(mysql_error());

//And we remind them what they searched for
$pageContent .= '
<p><b>Searched For:</b>  ' . $find . '</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 .= '
<p>All prices are inclusive of VAT</p>
<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>
        <th>Submit</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 .= '
    <form action="" method="post">
    <td>            
            <div>
                <input type="text" name="quantity" size ="2" value ="1" style="background: #F4F4F4; font-family: "Lucida Console", Monaco, monospace;"/>
            </div>            
    </td>
    <td>
            <div>
                <input type="hidden" name="id" value="' . $prId . '" />
                <input type="submit" name="action" value="Order" />
            </div>            
    </td>
    </form>           
 </tr>
 ';
    $tempVar ++;
 }
 $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>
';
}
}

Вот код, который касается события, когда пользователь нажимает кнопку «Заказать»:

if (!isset($_SESSION['order']))
{
$_SESSION['order'] = array();
}

if (!isset($_SESSION['quantity']))
{
$_SESSION['quantity'] = array();
}

if (isset($_POST['action']) and $_POST['action'] == 'Order')
{
// Add item to the end of the $_SESSION['order'] array
$_SESSION['order'][$_POST['id']] = $_POST['id'];
$_SESSION['quantity'][$_POST['id']] = $_POST['quantity'];
header('Location: .');
exit();
}

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

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

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

С чем я борюсь, так это с процессом, вовлеченным в это.

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

Спасибо!

1 Ответ

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

Моя первая мысль - просто вставить $find или $keywords_array в $_SESSION при проведении поиска.Вам нужно обновить код, чтобы проверить эту переменную $ _SESSION как часть процесса, прежде чем выдавать ошибку «Введите условие поиска».

Поскольку вы уже используете $_SESSION, вполне возможно, чтоВы уже пошли по этой дороге.Если это так, то что пошло не так?

Изменить, чтобы включить код. По сути, я бы изменил второй сегмент кода следующим образом:

if (($searching == "yes") || (isset($_SESSION['find'])))

... [ваш код] ... до if ($find == ""), который заменяется на:

if (isset($_SESSION['find']) && ($find == "") 
   $find = $_SESSION['find'];

if ($find == "")

... [ваш код] ... до $keywords_array = explode(' ', $find);, который добавляет одну строку перед ним:

$_SESSION['find'] = $find;

... [ваш код, как и раньше] ...

...