Zmiana bez przeładowania strony w PHP

0

Czy da się zrobić zmienianie treści bez przeładowania strony? Problem jest taki, że mam przycisk który zmienia 0 na 1 lub 1 na 0. Ale efekt widać po odświeżeniu albo ponownym kliknięciu przycisku zmiany, który znowu zmieni wartość. Generalnie, jak zrobić zmienę treści na stornie bez odświeżania, zero odświeżania, zmiana dynamiczna. Może być przez js, ale nie wiem czy takie rozwiązanie jest najlepsze.

Kod:

<html>
<head>
</head>
<body>
<?php 
//Łączenie z bazą danych
$db = new PDO('sqlite:lista.db');
$result = $db->query('SELECT * FROM TestowySerial');

//Infomracje początkowe

// phpinfo();
//nazwa bazy danych
$nazwabazy = $db->query('SELECT name FROM sqlite_master WHERE type = "table"');
$nazwabazy = $nazwabazy->fetch();
echo "Nazwa pliku:<b> $nazwabazy[0]</b></br>";

//ilość rekordów
$statement = $db->query('SELECT COUNT(*) FROM TestowySerial');
$result = $statement->fetch();
$ile = $result[0];
echo "Ilość wpisów w pliku:<b>". $ile."</b>";
echo "</br> </br>";

//koniec poczatkowych informacji
//Tabela rekordów

echo "<center><table border=1 width=75%> ";
echo "<center><table border=1 width=75%> ";
echo'<tr style="font-weight:900;"><td>ID</td><td>S</td><td>Odc</td><td>Seria</td><td>Rok</td><td>Nazwa</td></tr>';
$licznik_tabelowy=0;
 $sql =<<<EOF
      SELECT * from TestowySerial;
EOF;

   $ret = $db->query($sql);
while ($row = $ret->fetch()){
	
	
   echo "Wykonano ".$licznik_tabelowy." razy.</br>";
   echo '<tr><td>ID ' . $row['ID']."</td>";
   echo '<td>stan:' . $row['stan']; 
   echo"<form action='' method='post'><input type=submit value=Klikajzmieniaj name=p$licznik_tabelowy></form>";
   echo"</td>";
   echo '<td>nr:' . $row['nr']."</td>";
   echo '<td>sezon ' . $row['sezon']."</td>";
   echo '<td>rok ' . $row['rok']."</td>";
   echo '<td>Nazwa: ' . $row['nazwa']."</td>";
   echo "</tr>";
   $licznik_tabelowy++;
}
//Obsługa przycisków
if(isset($_POST['p0']))
{
	$ret = $db->query('SELECT stan FROM TestowySerial WHERE id=1');
	$row = $ret->fetch();
    echo "Przycisk kliknięty!";
	if ($row['stan']==0){
	$db->exec("UPDATE TestowySerial SET stan=1 WHERE ID=1"); }
	else{
	$db->exec("UPDATE TestowySerial SET stan=0 WHERE ID=1"); }
}

echo "</table></br><hr>";
echo "2018 &copy \n";
//TUTAJ TESTUJEMY KOD

//TUTAJ JUŻ KOŃCZYMY TESTOWANIE
echo "</hr>";

?></body>
</html>

baza w załączniku "lista.rar"

2

jeśli musisz to zapisać w bazie lub coś takiego to poczytaj o ajax, samą dynamiczną zmianę na froncie robisz w js.

0
mr_jaro napisał(a):

jeśli musisz to zapisać w bazie lub coś takiego to poczytaj o ajax, samą dynamiczną zmianę na froncie robisz w js.

Spróbuję się czegoś dowiedzieć o tym, jeszcze jedno, jak zrobić, żeby każdy przycisk działał? Aktualnie działa tylko ten pierwszy bo tylko ten jest zrobiony. Problem w tym, że kolejne musiałyby być pisane ręcznie, a wolałbym zrobić to jakoś z pętlą bo kilkaset razy wpisywać to samo mi się nie chce.

0

Jesli chodzi o odczyt bez przeladowania to zrob tak jak ponizej.

Plik .norefresh.js

var pokaz = setInterval(
      function ()
      {
         $('#load').load('plik_ktory_chcesz_odczytac.php').fadeIn("slow");
      }, 2000);

W pliku np. *.php czy *.html wstawiasz diva [koniecznie ze spacja!]


   <script src="norefresh.js"></script>
	<div id="load"> </div>

Jak wyslac to musisz pokombinowac. Poczytaj o funkcji load()

0

Właściwie to raczej wystarczy same odświeżanie się, bez odświeżania przeglądarki. Nie trzeba ajaxa do wysyłania. Zrobiłem teraz tak:

if(isset($_POST['p0']))
{
	$ret = $db->query('SELECT stan FROM TestowySerial WHERE id=1');
	$row = $ret->fetch();
    echo "Przycisk kliknięty!";
	if ($row['stan']==0){
	$db->exec("UPDATE TestowySerial SET stan=1 WHERE ID=1"); }
	else{
	$db->exec("UPDATE TestowySerial SET stan=0 WHERE ID=1"); }
	unset($_POST['p0']);
	//echo'<script src="norefresh.js"></script>  <div id="load"> </div>';
	header('refresh: 0;');
	
}

I działa dobrze

0

jak to nie projekt do szkoły to zainteresuj się Yii2 ma fajne wsparcie dla ajax'a

0

Jescze jedna rzecz, czy da się zrobić ważną dla tej stony rzecz, zapamiętywanie pozycji przed odświeżeniem? Udało mi się już zrobić każdy przycisk, oczywiście na pętli, ale po kliknięciu strona się odświeża i wjeżdza do góry.

1

Dodaj Id do miejsc dla których chcesz by przekierowało po odświeżeniu.
Np.

<div id="rambo" class="serial"> Film  Rambo</div>

Po przeładowaniu strony dodajesz do URL po # odpowiednie Id np. www.mypage/serials/list#rambo i strona przewinie się do odpowiedniego Div'a.

0
jurek1980 napisał(a):

Dodaj Id do miejsc dla których chcesz by przekierowało po odświeżeniu.
Np.

<div id="rambo" class="serial"> Film  Rambo</div>

Po przeładowaniu strony dodajesz do URL po # odpowiednie Id np. www.mypage/serials/list#rambo i strona przewinie się do odpowiedniego Div'a.

Znam ten sposób tylko ma jedną zasadniczą wadę, strona będzie w innym miejscu, ponieważ przeglądając stronę treść którą czytasz masz na środku, a nie na samej górze, więc to i tak będzie dezorientować. Dzięki, za pomoc mimo wszystko.

1

Nie rozumiem.
Masz przykładowo na stronie wyświetlone 100 linii w tabeli. Każda linia ma id np. "row90". Po przeładowaniu strony dodajesz do url www.xxx.tablela#row90 i ten właśnie wiersz jest na górze. Nie rozumiem co tu jest mylące. Człowiek zaczyna czytać od góry a strona mu się przeładuje. Jeśli chcesz żeby np. na górze był wiersz 88, bo kliknąłeś row90 i chcesz, żeby było trochę miejsca to np. przekierowujesz właśnie do row -2.
U Ciebie z tego co rozumiem wszystko dąży jednak do tego by strona nie przeładowywała się. Po to wymyślono Ajax i idź w tym kierunku, bo problem po problemie będziesz się męczył i kombinował.

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