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" />&nbsp;
</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">&nbsp;</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>

&nbsp;
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF">&nbsp;</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>

&nbsp;
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF">&nbsp;</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" />&nbsp;
</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">&nbsp;</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>

&nbsp;
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF">&nbsp;</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>

&nbsp;
</div></td>
</tr>
<tr class="tabHeader">
<td colspan="8" align="left">' . $row['Descr'] . '</td>
</tr>
<tr>
<td colspan="8" bgcolor="#FFFFFF">&nbsp;</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

Ostatnio komentowane

  1. Mysql - FAQ Paweł
  2. Pager 2.5.1 oraz EPa... Na szybko2
  3. Pager 2.5.1 oraz EPa... Sławek
  4. Mysql - FAQ Piotr
  5. Liczba dni roboczych Na szybko2
  6. Liczba dni roboczych Naszybko
  7. Klasa widoku nospor

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer