• 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.

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
717 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 (607,060 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 (607,060 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 (607,060 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 (607,060 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 (607,060 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ź 5,608 wizyt
0 głosów
2 odpowiedzi 688 wizyt
pytanie zadane 10 marca 2018 w HTML i CSS przez PROFF Obywatel (1,180 p.)
0 głosów
3 odpowiedzi 1,522 wizyt
pytanie zadane 10 stycznia 2017 w HTML i CSS przez Daniel Kudyba Obywatel (1,260 p.)

93,433 zapytań

142,429 odpowiedzi

322,661 komentarzy

62,796 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

...