Paginacja + usuwanie zbiorowe wiadomośći

0

Witam, od jakichś 2 godzin borykam się z problem. Otóż na mojej stronie, w zakładce wiadomości jest sortowanie wiadomości:

log3 = @$polaczenie2 -> query("SELECT * FROM wiadomosci WHERE odbiorca='$login' ORDER BY data_nadania DESC LIMIT $limit, $nastronie");
while($r = $log3 ->fetch_assoc()){

Jednakże aby paginacja działała nałożyłem limit na baze danych, wszystko jest okej na pierwszej stronie, jednakże gdy chce usunąć wiadomości na drugiej trzeciej i kolejnej stronie polecenie

	$log4 = @$polaczenie2 -> query("DELETE FROM wiadomosci WHERE id='$zmienna2'");

nie usuwa wiadomości. Wydaje mi się, że jest to związane z tym, że po while jest określony limit danych, nie jest on potem odswiezany przez przeglądarke, co wiąże się z tym, że baza jest cały czas w tym samym miejscu. JEzeli ktoś może jakoś pomóc, to będę wdzięczny.
Dodam jeszcze, że

	$log4 = @$polaczenie2 -> query("DELETE FROM wiadomosci WHERE id='$zmienna2'");

dział w wyżej wymienionym whilu pozdrawiam

0

Chaotycznie rozpisałeś to co robisz. Jaki limit na bazę? Rozumiem, że pobierasz tylko określoną ilość wiadomości, ale w 1 zapytaniu masz $Limit i $na_stronie, a te zmienne odznaczają to samo(!). Więc zapewne to co Ci się wyświetla to wcale nie są wiadomości ostatnio przesłane. Ustaw w zapytaniu od którego wiersza ma zacząć czytać.

Przy usuwaniu natomiast jeśli dobrze odbierasz wartość $zmienna z POST lub GET to musi usuwać tę wiadomość. Daj przed usuwaniem var_dump($zmienna) i zobaczysz co zawiera ta zmienna.

0

Chodzi mi o to, że skrypt widzi cały czas dane z zakresu od $limit do $nastronie i te dane można usunąć. Po wyjściu z whila ten zakres zostaje utrzymany i nie da się usunąć innych wiadomości, ponieważ pętla nie jest wykonywana ponownie.

1

Skąd bierzesz wartość $zmienna? Daj całość kodu najlepiej.

0

Oto kod:

$row = $wiadomoscs ->fetch_array();
        $row -> extract;
		
		 $nastronie = 3; //ilość newsów na stronę
         $wyswietlane = 7; //ilość wyświetlanych numerów stron
		 $allpages = ceil($row[ile]/$nastronie);stronę
if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
                $page = 1;
        }else{
                $page = $_GET['page'];
        }
        $limit = ($page - 1) * $nastronie; 



$log3 = @$polaczenie2 -> query("SELECT * FROM wiadomosci WHERE odbiorca='$login' ORDER BY data_nadania DESC LIMIT $limit, $nastronie" );

while($r = $log3 ->fetch_assoc()
	{
	
		$zmienna=$r['id'];

		echo '<form action="panel.php" method="post">';
		echo '<input type="checkbox" name="'.$zmienna.'" value='.$zmienna.' />';
	
		if(isset($_POST[$zmienna]))
		{
			$log4 = @$polaczenie2-> query("DELETE FROM wiadomosci WHERE id='$zmienna'");
			header("Location:panel.php");
		}





if ($r['stan']=='przeczytana'){

echo ("<a href=\"wiadomosc.php?id=".$zmienna."\">".$r['temat']."</a><br />");
}
else
{
echo ("<a href=\"wiadomosc.php?id=".$zmienna."\">".$r['temat']."</a>aaaa<br />");	

}







$_SESSION['czasowe']=$zmienna;

	}
 if($wyswietlane > $allpages){
                $wyswietlane = $allpages;
        }

        $forstart = $page - floor($wyswietlane/2);
        $forend = $forstart + $wyswietlane;
        
        if($forstart <= 0){ $forstart = 1; }
        
        $overend = $allpages - $forend;
        
        if($overend < 0){ $forstart = $forstart + $overend + 1; }
        

        $forend = $forstart + $wyswietlane;
        $prev = $page - 1;
        $next = $page + 1;
  
        $script_name = $_SERVER['SCRIPT_NAME'];
       
        if($page > 1) echo "<a href=\"".$script_name."?page=".$prev."\">Poprzednia</a>";
        if ($forstart > 1) echo "<a href=\"".$script_name."?page=1\">[1]</a>";
		if ($forstart > 2) echo "...";
        for($forstart; $forstart < $forend; $forstart++){
                if($forstart == $page){
                }else{
                        echo "";
                }
                echo "<a href=\"".$script_name."?page=".$forstart."\"> [".$forstart."] </a>";

        }
        if($forstart < $allpages) echo "...";
        if($forstart - 1 < $allpages) echo "<a href=\"".$script_name."?page=".$allpages."\">[".$allpages."]</a>";

        if($page < $allpages) echo "<a href=\"".$script_name."?page=".$next."\">Następna</a>";

        echo "</ul></div><div class=\"clear\">";


echo '<input type="submit" value="Usuń wybrane wiadomości"/>';
$_SESSION['lolo']=$nowe[qnt];

}
?>

Dodam, żę wypisywanie id przy polach działą prawidłowo i na każdej stronie id jest wypisane dobrze, jedyne co według mnie ma na to wpływ, to to, że delete działa w selekcie który ma nałożony limit od do i ten limit ogranicza możliwość usuwania pól. Dziękuje za zainteresowanie moim tematem. Pozdrawiam :)

0

Wpadłem na pewien pomysł, aby zapisać dane z $_POST do tablicy i potem poza

while($r = $log3 ->fetch_assoc()

je usunąć ponieważ w tej pętli się nie da. Jeżeli ktoś może, proszę o podpowiedź w jaki sposób zapisać kilka wartości do tablicy, najlepiej żeby wyglądało to tak, chce usunąć wiersze z tabeli o ID= 5 6 8 i 13 i teraz zapisuje do jednej tabeli te oto wartosci w takiej formie array[]=5,6,8,13, wtedy wrzucam całą tablice do deleta i nie ma problemu z usuwaniem. Nie wiem czy to dobre rozwiazanie jezeli ktos ma inny pomysł, to proszę o pomoc. Pozdrawiam :)

0

Ewentualnie może jest szansa zeby ten limit w zapytaniu czymś zastąpić??

0

Teraz zauważyłem, że dane nie są po prostu nigdzie wysyłane POSTem i dlatego nie chce nic usunac z bazy, wie ktos moze jak temu zaradzic??

1 użytkowników online, w tym zalogowanych: 0, gości: 1