Pager i stronicowanie z warunkami

2011-04-21 20:45:41 Post #1 gość_jarko

 
Mam problem z wyszukiwarką i warunkami. Jeśli użyję warunku - tu 'keyword' to po wciśnięciu szukaj zwraca mi poprawnie wyniki ale, gdy kliknę w następną stronę zwraca mi wyniki i strony z wszystkich dostępnych rekordów.

<?php
session_start();

?><br>
<div class="Header" align="center">Katalog</div>

<br>

<!-- Rozpoczęcie wyszukiwarki -->

<div style="width: 465px; margin: 10px 17px; border-bottom: dotted 2px #797979;">
<p>
<form method="post" action="" name="formData">
Szukana fraza:<br />
<input style="width:320px;" type="text" class="search" name="keyword" size="20" maxlength="40" value="" />

<br /><br />

<input type="submit" name="submit" value="Szukaj" class="login" /> 
</form>

</p>
<br />
</div>

<table width="95%" align="center" cellpadding="2" class="normal">

<tr class="tabHeader">
<td width="14%"><div align="center"><? echo Lang('Autor','Author','Autoryter'); ?></div></td>
<td width="8%"><div align="center"><? echo Lang('Przedmiot', 'Subject', 'Przedmiot rus'); ?></div></td>
<td width="13%"><div align="center"><? echo Lang('Kategoria', 'Category', 'Kategoria rus'); ?></div></td>
<td width="15%"><div align="center"><? echo Lang('Etap edukacji', 'Etap eng', 'Etap rus'); ?></div></td>
<td width="16%"><div align="center"><? echo Lang('Rodzaj<br />(wielko¶ć)', 'Rodzaj<br />(wielko¶ć) eng','Rodzaj<br />(wielko¶ć) rus'); ?></div></td>
<td width="13%"><div align="center"><? echo Lang('Zasób', 'Resource', 'Zasób rus'); ?></div></td>
</tr>
<tr>
<td colspan="6" bgcolor="#FFFFFF"> </td>
</tr>


<?
if (isset($_POST['keyword']) {

$sql = "SELECT count(*) FROM Exchange WHERE (Warranty LIKE '%$keyword%' OR Descr LIKE '%$keyword%') AND Approved=1 AND Remaind=0;";


$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$recordsCount = $row[0];//pobranie liczby rekordów
try{
$pager = new Pager('Szukaj', null);
$pager->SetTotalRecords($recordsCount);
$pager->Make(true);
$pag = $pager->Render();
$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
}
catch (Exception $e) {
echo $e->getMessage();
}

//zapytanie z uwzglenieniem stronicowania
// wpisano keyword lub wybrano przedmiot lub kategorię;
// do wyszukania po przedmiocie Phone='$przedmiot' AND
$q = "SELECT * FROM Exchange WHERE (Warranty LIKE '%$keyword%' OR Descr LIKE '%$keyword%') AND Approved=1 AND Remaind=0 LIMIT ".$start.",".($end - $start + 1).";";

$r = @mysqli_query ($dbc, $q);


if (mysqli_num_rows($r) > 0){
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

echo '<tr class="tabHeader">
<td colspan="8"><b>'.$row['Warranty'].'</b></td>
</tr>
<tr class="tabBody">
<td>' . $row['Producer'] . ' ' . $row['Model'] . '</td>
<td>' . $row['Phone'] .'</td>
<td>';
if ($row['CategoryID']!='0') {
$s = "SELECT Exchange.CategoryID, Exchange.ID, ExchangeCategory.NamePol FROM Exchange INNER JOIN ExchangeCategory ON Exchange.CategoryID=ExchangeCategory.ID WHERE Exchange.ID=$row[ID];";
$k = @mysqli_query ($dbc, $s);

$num2 = mysqli_num_rows($k);
if ($num2 > 0) {

while ($row2 = mysqli_fetch_array ($k, MYSQLI_ASSOC)){

echo ''. $row2['NamePol'] . '';

}
mysqli_free_result($k);
}

} else {
echo '<i>Brak kategorii</i>';
}


echo '</td>
<td>' . $row['Faults'] . '</td>
<td><div align="center">' . $row['Dateln'] . '</div></td>
<td align="right"><div align="center">

<a title="pobierz ze strony interwrite" target="_blank" href="download.php?filepath=' . $row['Picture'] . '"><img src="images/download.gif" border="0" width="20" ></a>

 
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF"> </td>
</tr>';

}

echo '</table>';

mysqli_free_result ($r);
mysqli_close($dbc);

echo $pag;//wyswietlenie pager'a

} else {
echo '<tr><td colspan="6"><p style="color: #F70000; font-style: italic; font-weight: bold;"">Brak wyników</p></td></tr></table>';
}
} // koniec if isset $_POST['keyword']
else {

$sql = "SELECT count(*) FROM Exchange WHERE Approved=1 AND Remaind=0;";

$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$recordsCount = $row[0];//pobranie liczby rekordów
try{
$pager = new Pager('Id', null);
$pager->SetTotalRecords($recordsCount);
$pager->Make(true);
$pag = $pager->Render();
$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
}
catch (Exception $e) {
echo $e->getMessage();
}

//zapytanie z uwzglenieniem stronicowania
// wpisano keyword lub wybrano przedmiot lub kategorię;
// do wyszukania po przedmiocie Phone='$przedmiot' AND
$q = "SELECT * FROM Exchange WHERE Approved=1 AND Remaind=0 LIMIT ".$start.",".($end - $start + 1).";";

$r = @mysqli_query ($dbc, $q);


if (mysqli_num_rows($r) > 0){
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

echo '<tr class="tabHeader">
<td colspan="8"><b>'.$row['Warranty'].'</b></td>
</tr>
<tr class="tabBody">
<td>' . $row['Producer'] . ' ' . $row['Model'] . '</td>
<td>' . $row['Phone'] .'</td>
<td>';
if ($row['CategoryID']!='0') {
$s = "SELECT Exchange.CategoryID, Exchange.ID, ExchangeCategory.NamePol FROM Exchange INNER JOIN ExchangeCategory ON Exchange.CategoryID=ExchangeCategory.ID WHERE Exchange.ID=$row[ID];";
$k = @mysqli_query ($dbc, $s);

$num2 = mysqli_num_rows($k);
if ($num2 > 0) {

while ($row2 = mysqli_fetch_array ($k, MYSQLI_ASSOC)){

echo ''. $row2['NamePol'] . '';

}
mysqli_free_result($k);
}

} else {
echo '<i>Brak kategorii</i>';
}


echo '</td>
<td>' . $row['Faults'] . '</td>
<td><div align="center">' . $row['Dateln'] . '</div></td>
<td align="right"><div align="center">

<a title="pobierz ze strony interwrite" target="_blank" href="download.php?filepath=' . $row['Picture'] . '"><img src="images/download.gif" border="0" width="20" ></a>

 
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF"> </td>
</tr>';

}

echo '</table>';

mysqli_free_result ($r);
mysqli_close($dbc);

echo $pag;//wyswietlenie pager'a
}
}

?>

2011-04-22 09:03:15 Post #2 nospor

 
Chodzi o to, że przy przechodzeniu do następnej strony gubione są warunki wyszukiwania
Pisałem o tym tutaj:
http://nospor.pl/formularz-i-stronicowanie-pamietanie-stanu.html
Drugi parametr konstruktora trzeba ustawić na null. Ty to zrobiłeś. Tylko zapomniałeś o jednym - formularz musi być wysłany GETem a nie POSTem. Dopiero gdy wyślesz dane GETem pojawią się one w URL i dopiero wtedy Pager sam automatycznie je zczyta

2011-04-22 12:02:31 Post #3 gość_jarko

 
Zmieniłem na pobieranie w sesji i mam kolejny problem, pewnie z warunkami.

Gdy był tylko formData['keyword'] wszystko działało prawidłowo, gdy dołożyłem kolejne warunki już są problemy z wynikami:


if (isset($_POST['submit']){
$_SESSION['form'] = array(
'keyword' => $_POST['keyword'],
'kategoria' => $_POST['kategoria'],
'przedmiot' => $_POST['przedmiot'],
);
}

$formData = array(
'keyword' => !isset($_SESSION['form'] ? null : $_SESSION['form']['keyword'],
'kategoria' => !isset($_SESSION['form'] ? null : $_SESSION['form']['kategoria'],
'przedmiot' => !isset($_SESSION['form'] ? null : $_SESSION['form']['przedmiot'],
);

<body>
<br>
<div class="Header" align="center">Katalog zasobów</div>

<br>

<!-- Rozpoczęcie wyszukiwarki -->

<br /><br />
<div style="width: 465px; border-bottom: dotted 2px #797979; margin: 0 auto;">
<p>
<form method="post" action="" name="formData">
Szukana fraza:<br />
<input style="width:320px;" type="text" class="search" name="keyword" size="20" maxlength="40" value="<?php echo $formData['keyword'];?>" />
<br /><br />

<select name="kategoria" class="search" style="width:180px;">
<option value='' <? if(empty($formData['kategoria']) echo "Selected "; ?> >Wybierz kategorię:</option>
<?

$sql5 = "SELECT ID, NamePol from ExchangeCategory ORDER BY NamePol ASC";
$result5 = @mysqli_query ($dbc, $sql5);

while ($row5 = mysqli_fetch_array($result5, MYSQLI_ASSOC)) {

$ID = $row5['ID'];
$name = $row5['NamePol'];

?>
<option value='<? echo $ID;?>' <? if($formData['kategoria']==$ID) echo "Selected "; ?>><? echo $name;?></option>
<?

}
?>
</select>

<select name="przedmiot" class="search" style="width:135px">

<option value='' <? if(empty($formData['przedmiot']) echo "Selected "; ?>>Wybierz przedmiot:</option>
<?
$sql4 = "SELECT DISTINCT Phone from Exchange WHERE Approved=1 AND Remaind=0 ORDER BY Phone ASC";
$result4 = @mysqli_query ($dbc, $sql4);
while ($row4 = mysqli_fetch_array($result4, MYSQLI_ASSOC))
{
$phone = $row4['Phone'];
if ($phone!=''){
?>
<option value='<? echo $phone;?>' <? if($formData['przedmiot']==$phone) echo "Selected "; ?>><? echo $phone;?></option>
<?
}
}

?>
</select>

<input type="submit" name="submit" value="Szukaj" class="login" /> 
</form>

<form method="post" action="resources_test1dziala.php">
<input type="submit" value="Nowe wyszukiwanie" class="login" name="reset" />
</form>

</p>
<br />
</div>
<br />
<table width="600" align="center" cellpadding="2" class="normal">

<tr class="tabHeader">
<td width="14%"><div align="center">Autor</div></td>
<td width="8%"><div align="center">Przedmiot</div></td>
<td width="13%"><div align="center">Kategoria</div></td>
<td width="15%"><div align="center">Etap edukacji</div></td>
<td width="16%"><div align="center">Rodzaj<br />(wielko¶ć)</div></td>
<td width="13%"><div align="center">Zasób</div></td>
</tr>
<tr>
<td colspan="6" bgcolor="#FFFFFF"> </td>
</tr>


<?
if (isset($_SESSION['form']['keyword'] || isset($_SESSION['form']['kategoria'] || isset($_SESSION['form']['przedmiot']) {

$sql = "SELECT count(*) FROM Exchange WHERE ";
if (isset($_SESSION['form']['keyword']) $sql.= " (Warranty LIKE '%".$formData['keyword']."%' OR Descr LIKE '%".$formData['keyword']."%') AND ";
if (isset($_SESSION['form']['kategoria']) $sql.= " CategoryID='".$formData['kategoria']."' AND ";
if (isset($_SESSION['form']['przedmiot']) $sql.= " Phone='".$formData['przedmiot']."' AND ";
$sql.= " Approved=1 AND Remaind=0;";


$result = mysqli_query($dbc, $sql);
$row = mysqli_fetch_array($result);
$recordsCount = $row[0];//pobranie liczby rekordów
try{
$pager = new Pager('Szukaj', null);
$pager->SetTotalRecords($recordsCount);
$pager->Make(true);
$pag = $pager->Render();
$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
}
catch (Exception $e) {
echo $e->getMessage();
}

//zapytanie z uwzglenieniem stronicowania
// wpisano keyword lub wybrano przedmiot lub kategorię;
// do wyszukania po przedmiocie Phone='$przedmiot' AND
$q = "SELECT * FROM Exchange WHERE ";
if (isset($_SESSION['form']['keyword']) $q.= " (Warranty LIKE '%".$formData['keyword']."%' OR Descr LIKE '%".$formData['keyword']."%') AND ";
if (isset($_SESSION['form']['kategoria']) $q.= " CategoryID='".$formData['kategoria']."' AND ";
if (isset($_SESSION['form']['przedmiot']) $q.= " Phone='".$formData['przedmiot']."' AND ";
$q.= " Approved=1 AND Remaind=0 LIMIT ".$start.",".($end - $start + 1).";";

$r = @mysqli_query ($dbc, $q);


if (mysqli_num_rows($r) > 0){
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

echo '<tr class="tabHeader">
<td colspan="8"><b>'.$row['Warranty'].'</b></td>
</tr>
<tr class="tabBody">
<td>' . $row['Producer'] . ' ' . $row['Model'] . '</td>
<td>' . $row['Phone'] .'</td>
<td>';
if ($row['CategoryID']!='0') {
$s = "SELECT Exchange.CategoryID, Exchange.ID, ExchangeCategory.NamePol FROM Exchange INNER JOIN ExchangeCategory ON Exchange.CategoryID=ExchangeCategory.ID WHERE Exchange.ID=$row[ID];";
$k = @mysqli_query ($dbc, $s);

$num2 = mysqli_num_rows($k);
if ($num2 > 0) {

while ($row2 = mysqli_fetch_array ($k, MYSQLI_ASSOC)){

echo ''. $row2['NamePol'] . '';

}
mysqli_free_result($k);
}

} else {
echo '<i>Brak kategorii</i>';
}


echo '</td>
<td>' . $row['Faults'] . '</td>
<td><div align="center">' . $row['Dateln'] . '</div></td>
<td align="right"><div align="center">

<a title="pobierz ze strony interwrite" target="_blank" href="download.php?filepath=' . $row['Picture'] . '"><img src="images/download.gif" border="0" width="20" ></a>

 
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF"> </td>
</tr>';

}

echo '</table>';

mysqli_free_result ($r);
mysqli_close($dbc);

echo '<div align="center">'.$pag.'</div>';//wyswietlenie pager'a

} else {
echo '<tr><td colspan="6"><p style="color: #F70000; font-style: italic; font-weight: bold;"">Brak wyników</p></td></tr></table>';
}
} // koniec if isset $_POST['keyword']
else {

$sql = "SELECT count(*) FROM Exchange WHERE Approved=1 AND Remaind=0;";

$result = mysqli_query($dbc, $sql);
$row = mysqli_fetch_array($result);
$recordsCount = $row[0];//pobranie liczby rekordów
try{
$pager = new Pager('Id', null);
$pager->SetTotalRecords($recordsCount);
$pager->Make(true);
$pag = $pager->Render();
$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
}
catch (Exception $e) {
echo $e->getMessage();
}

//zapytanie z uwzglenieniem stronicowania
// wpisano keyword lub wybrano przedmiot lub kategorię;
// do wyszukania po przedmiocie Phone='$przedmiot' AND
$q = "SELECT * FROM Exchange WHERE Approved=1 AND Remaind=0 LIMIT ".$start.",".($end - $start + 1).";";

$r = @mysqli_query ($dbc, $q);


if (mysqli_num_rows($r) > 0){
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {

echo '<tr class="tabHeader">
<td colspan="8"><b>'.$row['Warranty'].'</b></td>
</tr>
<tr class="tabBody">
<td>' . $row['Producer'] . ' ' . $row['Model'] . '</td>
<td>' . $row['Phone'] .'</td>
<td>';
if ($row['CategoryID']!='0') {
$s = "SELECT Exchange.CategoryID, Exchange.ID, ExchangeCategory.NamePol FROM Exchange INNER JOIN ExchangeCategory ON Exchange.CategoryID=ExchangeCategory.ID WHERE Exchange.ID=$row[ID];";
$k = @mysqli_query ($dbc, $s);

$num2 = mysqli_num_rows($k);
if ($num2 > 0) {

while ($row2 = mysqli_fetch_array ($k, MYSQLI_ASSOC)){

echo ''. $row2['NamePol'] . '';

}
mysqli_free_result($k);
}

} else {
echo '<i>Brak kategorii</i>';
}


echo '</td>
<td>' . $row['Faults'] . '</td>
<td><div align="center">' . $row['Dateln'] . '</div></td>
<td align="right"><div align="center">

<a title="pobierz ze strony interwrite" target="_blank" href="download.php?filepath=' . $row['Picture'] . '"><img src="images/download.gif" border="0" width="20" ></a>

 
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF"> </td>
</tr>';

}

echo '</table>';

mysqli_free_result ($r);
mysqli_close($dbc);

echo '<div align="center">'.$pag.'</div>';//wyswietlenie pager'a
}
}

?>

2011-04-22 12:11:55 Post #4 nospor

 
1) Lepsze wydaje mi się było rozwiązanie z GET o którym ci pisałem. No ale jak wolisz.
2) Dane masz już w $formData więc później nie musisz juz po sesji latać przy budowaniu zapytan
3) Odnośnie budowania zapytań z kilku warunków też pisałem arta
Wyszukiwarka - zapytanie zależne od warunków

2011-04-22 13:21:30 Post #5 gość_jarko

 
Poprawiłem jeszcze inaczej:
if ($_SESSION['form']['keyword']!='') zapytanie...

2011-04-22 13:26:30 Post #6 nospor

 
Znaczy już działa?

2011-04-22 13:37:57 Post #7 gość_jarko

 
Po poprawieniu wszystkich warunków wg poprzedniego posta, tak

Świetna robota nospor!

Odpowiedz