• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP odświeżenie się wyników po użyciu funkcji.

Object Storage Arubacloud
+1 głos
435 wizyt
pytanie zadane 10 lipca 2015 w PHP przez migacz100 Mądrala (5,410 p.)
edycja 10 lipca 2015 przez migacz100

Mam taki kod php:

  $con = mysqli_connect("localhost", "root", "", "technikum1") or die("Error");
      if (!mysqli_set_charset($con, "utf8")) { }
  $dat1 = "tech_1";
  $querry = "SELECT `id`, `dane`, `minus` FROM $dat1 order by `dane` ASC";
  $result = mysqli_query($con,$querry);
  while($row = mysqli_fetch_array($result)){
      echo "<tr>"."<td>".$row['id']."</td>"."<td>".$row['dane']."</td>"."<td>".$row['minus']."</td>"."<td>"."$dat1"."</td>";
      echo '<td>'.'<form action="delete_data2.php" method="post"><input type="submit" name="'.$row['id'].'" value="DELETE"></input> </form>'.'</td>'.'</tr>';
      if(isset($_POST[$row['id']])) {
        $con = mysqli_connect("localhost", "root", "", "technikum1") or die("Error");
       $table = $dat1;
       $id = $row['id'];
       $query = "DELETE FROM $table WHERE id = {$id} LIMIT 1";

      $result2 = mysqli_query($con, $query);
              if ($result2) {
                echo "Sukces!";
              } else {
                die("Operacja nie powiodła się." . mysqli_error($con));
              }
       mysqli_close($con);
       }
          }

Który wyświetla mi z bazy danych "id", "dane", "minus" i przycisk do usunięcia tego elementu z bazy danych, cały kod działa dobrze i nie wyrzuca errorów, lecz nie odświeża poprawnie strony by ilość wyników zaktualizowała się i trzeba to zrobić ręcznie; moje pytania to: 

gdzie popełniłem błąd w kodzie?

Jak poprawić ten kod pod względem funkcjonalności i aktualnych standardów?

Dzięki i pozdrawiam.

1 odpowiedź

+1 głos
odpowiedź 10 lipca 2015 przez Comandeer Guru (601,110 p.)
wybrane 11 lipca 2015 przez migacz100
 
Najlepsza
Najpierw usuwaj, a później licz ile jest. Przecież to logiczne, że jak policzysz przed usunięciem to przedstawi stary wynik
komentarz 10 lipca 2015 przez migacz100 Mądrala (5,410 p.)
No ale w formie mam przejście na tę stronę po usunięciu więc powinna przeładować ją, ale nie wiem dlaczego przeładowuje stronę ale wyniki są niezmienne. Dopiero po manualnym odświeżeniu.
komentarz 10 lipca 2015 przez Comandeer Guru (601,110 p.)
W kodzie, który podałeś nie ma żadnego przekierowania. Widzę jedynie, że najpierw pobierasz ile jest wyników, a dopiero później robisz usuwanie
komentarz 10 lipca 2015 przez migacz100 Mądrala (5,410 p.)
Usuwanie wykonuje się po kliknięciu przycisku (if(isset($_POST[$row['id']]))) który generuje się wraz z kodem :'<form action="delete_data2.php" method="post"><input type="submit" name="'.$row['id'].'" value="DELETE"></input> </form>'.'</td>'.'</tr>';: i jest tam action który ma za zadanie przekierowanie na stronę; jeśli się nie myle tak to działa, ale w tym przypadku coś mi nie trybi.
komentarz 10 lipca 2015 przez Comandeer Guru (601,110 p.)

Patrz co robi Twój kod: najpierw pobiera wszystkie pozycje z bazy i je wyświetla i w trakcie wyświetlania usuwa niektóre z nich... Logicznym więc jest, że wyświetli wszystkie pozycje sprzed usunięcia.

komentarz 10 lipca 2015 przez migacz100 Mądrala (5,410 p.)
To jak to naprawić, proszę pomóż.
komentarz 10 lipca 2015 przez Comandeer Guru (601,110 p.)

Ja bym to widział jakoś tak:

<?php
$con = mysqli_connect("localhost", "root", "", "technikum1") or die("Error");
    if (!mysqli_set_charset($con, "utf8")) { }
$dat1 = "tech_1";

    if(count($_POST) > 0) {
        foreach($_POST as $key => $value)
        {
             $table = $dat1;;
             $query = "DELETE FROM $table WHERE id = {$key} LIMIT 1";
         
            $result2 = mysqli_query($con, $query);
                    if ($result2) {
                      echo "Sukces!";
                    } else {
                      die("Operacja nie powiodła się." . mysqli_error($con));
                    }
        }
    }

$querry = "SELECT `id`, `dane`, `minus` FROM $dat1 order by `dane` ASC";
$result = mysqli_query($con,$querry);
while($row = mysqli_fetch_array($result)){
    echo "<tr>"."<td>".$row['id']."</td>"."<td>".$row['dane']."</td>"."<td>".$row['minus']."</td>"."<td>"."$dat1"."</td>";
    echo '<td>'.'<form action="delete_data2.php" method="post"><input type="submit" name="'.$row['id'].'" value="DELETE"></input> </form>'.'</td>'.'</tr>';
        }

BTW rób jakieś wcięcia w kodzie, bo się tego praktycznie czytać nie da...

komentarz 11 lipca 2015 przez migacz100 Mądrala (5,410 p.)
Dla mnie kod jest czytelny a ten który ty sugerujesz będzie mi usuwał po jednym wyniku z bazy danych za każdym razem gdy tylko odaple ten skrypt, nie jest to nawet blisko tego co miałem zrobionę, po przemyśleniu i przewertowaniu manuala php użyłem "http://php.net/manual/en/function.header.php" by przeniosło mnie do tej strony gdy funkcja wykona się bez błędów.
komentarz 11 lipca 2015 przez Comandeer Guru (601,110 p.)
… gdzie Ci będzie usuwał po odpaleniu? Przecież wyraźnie sprawdza czy coś nie przyszło POST-em i później leci pętlą po tym, co zostało przesłane. Ani nie usuwa po każdym odpaleniu, ani pojedynczo…
komentarz 11 lipca 2015 przez migacz100 Mądrala (5,410 p.)
Oj przepraszam, źle to rozczytałem tak to już jest gdy się dopiero zaczyna dziękuję za twój trud i wytrwałość w niesieniu mi pomocy.

Podobne pytania

+1 głos
1 odpowiedź 4,830 wizyt
0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 10 marca 2018 w HTML i CSS przez PROFF Obywatel (1,180 p.)
0 głosów
3 odpowiedzi 1,257 wizyt
pytanie zadane 10 stycznia 2017 w HTML i CSS przez Daniel Kudyba Obywatel (1,260 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...