logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[PHP/MySQL] Jak poprawić skrypt PHP do usuwania rekordów z bazy MySQL?

Adalberd 24 Kwi 2011 20:59 3424 17
REKLAMA
  • #1 9435979
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    Napisałem skrypt:

    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Problem się pojawił po dodaniu header('location: tabauto.php');
    mianowicie firefox zwraca:
    "Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie."
    Chcę żeby po usnięciu rekordu odświeżył stronę, jest jakiś sposób na to?
    Żeby po usunięciu rekordu jednorazowo przekierował do pierwotnej stony.
  • REKLAMA
  • #2 9436182
    makkak
    Poziom 19  
    Posty: 289
    Pomógł: 22
    Ocena: 16
    Usuń spacje i znaki nowego wiersza sprzed <?php

    pomogło?
  • #3 9436417
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    Niestety nie...
    Wychodzi na to, że używając header nie można odwołać się do tej samej strony.
    Jak zrobię header('location:innastrona.php');
    jest ok...
  • REKLAMA
  • Pomocny post
    #4 9436465
    makkak
    Poziom 19  
    Posty: 289
    Pomógł: 22
    Ocena: 16
    A tak działa?

    <?php
     
    require "connect.php"; 
     
     if(isset($_GET['usun'])) {
             mysql_query("DELETE FROM system_auto.pojazd WHERE pojazd.id ='$_GET[usun]' LIMIT 1"); 
    header('location: tabauto.php');
    
    } else {
     
    $query = "SELECT * FROM pojazd";
     
    $result = mysql_query($query, $polacz)
    or die ('problem z tabelka w bazie ');
    $licz_pojazdy = mysql_num_rows($result);
     
     
    $pojazd_naglowek=<<<EOD
     
    <h4 align="center">Lista Samochodów</h4>
    <table width="50%" border="1" align="center">
     
     
    <th>Id</th>
    <th>Marka</th>
    <th>Model</th>
    <th>Rejestracja</th>
    <th>Paliwo</th>
    <th>Pojemnosc</th>
    <th>Akcja</th>
     
     
     
    EOD;
     
    $pojazd_dane = '';
    while($row = mysql_fetch_array($result)) {
     
    $id = $row['id'];
    $Marka = $row['Marka'];
    $Model = $row['Model'];
    $Rejestracja = $row['Rejestracja']; 
    $Paliwo = $row['Paliwo']; 
    $Pojemnosc = $row['Pojemnosc']; 
     
    $pojazd_dane .=<<<EOD
     
     
    <tr>
    <td>$id.</td>
    <td>$Marka</td>
    <td>$Model</td>
    <td>$Rejestracja</td>
    <td>$Paliwo</td>
    <td>$Pojemnosc</td>
    <td><a href=tabauto.php?usun=$id>USUN</a></td>
    </tr>
     
     
    EOD;
     
    }
     
     
    $pojazd_wyswietl =<<<POJAZD
    					$pojazd_naglowek
    					$pojazd_dane
     
     
    POJAZD;
     
    echo "Ilosć pojazdów w bazie: $licz_pojazdy" ;
    echo $pojazd_wyswietl;
    
    }
    ?>
  • #5 9436564
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    Działaaa!! aaaa super ulga! tyle się namęczyłem, bardzo dziękuje!
    Niech zgadnę, przed
    Kod: PHP
    Zaloguj się, aby zobaczyć kod

    nie może być wysłany do przeglądarki żaden html ??

    Teraz czas się zabrać za przycisk "edytuj"....
  • #7 9437671
    azra
    Poziom 17  
    Posty: 108
    Pomógł: 26
    Ocena: 2
    Kolejny dowód, że czytanie dokumentacji zapobiega wyrywaniu sobie włosów z głowy. Z manuala:
    http://php.net/manual/en/function.header.php
    Cytat:
    header() is used to send a raw HTTP header. See the » HTTP/1.1 specification for more information on HTTP headers.

    Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
  • REKLAMA
  • Pomocny post
    #8 9438745
    wujek2009
    Poziom 13  
    Posty: 60
    Pomógł: 4
    Ocena: 2
    Filtruj dane, wszelkie $_POST, $_GET aby nikt Cię nie zaatakował. Dlaczego to piszę, ponieważ widzę już, że przy zapytaniu usuwania nie robisz tego. Poza tym sprawdzaj czy zapytanie się poprawnie wykonało, czyli coś na wzór jak podałeś w pierwszym poście:

    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Jeśli chodzi o opcje edytuj to sprawa jest prosta, przedstawię Ci mniej więcej zarys.

    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    Podałem Ci przykładowe rozwiązanie z przykładowymi danymi - sam musisz skleić to w całość.
  • #9 9439593
    makkak
    Poziom 19  
    Posty: 289
    Pomógł: 22
    Ocena: 16
    wujek: co ciekawe to is_numeric zawsze zwróci Ci fałsz bo traktowane jest jako string.
  • #10 9439990
    wujek2009
    Poziom 13  
    Posty: 60
    Pomógł: 4
    Ocena: 2
    Jak zwróci fałsz?

    Kod: PHP
    Zaloguj się, aby zobaczyć kod


    2x wartość true.
  • #11 9440033
    makkak
    Poziom 19  
    Posty: 289
    Pomógł: 22
    Ocena: 16
    Taaa tylko sprawdź sobie jak to się zachowa jak otrzymasz dane metodą get lub post z pola input.

    Dodano po 3 [minuty]:

    Ahh tu nie było danych z input tylko bezpośrednio z linku, więc zadziała ;) Sorry za małe zamieszanie.

    Dodano po 3 [minuty]:

    Ehh to już całkiem mi się coś pomieszało bo tak i tak działa, a pamiętam że kiedyś miałem z tym problem. A może to było z is_int.
  • #12 9514525
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    Zrobiłem tak jak poniżej, formularz działa, ale dane wysłane z formularza nie chcą się zapisać...żaden błąd też nie wyskakuje. Pewnie złe zapytanie "UPDATE" daje...

    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #13 9514846
    wujek2009
    Poziom 13  
    Posty: 60
    Pomógł: 4
    Ocena: 2
    Nigdzie nie widzę zmiennej $id zdeklarowanej, a użyłeś jej dwa razy. W formularzu oraz w zapytaniu.
  • REKLAMA
  • #14 9516591
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    nie pomaga, id w bazie mam AUTO_INCREMENT może to ma jakieś znaczenie?

    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #15 9516834
    wujek2009
    Poziom 13  
    Posty: 60
    Pomógł: 4
    Ocena: 2
    ale formularz wysyłasz metodą POST, a warunek masz GET
    Kod: PHP
    Zaloguj się, aby zobaczyć kod
  • #16 9517152
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    Kod: PHP
    Zaloguj się, aby zobaczyć kod



    też to sprawdzałem, nic nie zmienia.
  • #17 9518445
    wujek2009
    Poziom 13  
    Posty: 60
    Pomógł: 4
    Ocena: 2
    a bo Ty spacje porobiłeś w nazwach, zobacz:
    Kod: HTML, XML
    Zaloguj się, aby zobaczyć kod


    Więc $_POST[' id']; musi być spacja przed nazwą - ogólnie proponuje ją usunąć z inputów.

    UPDATE: Chociaż teraz sprawdziłem u siebie to nie ma to większego znaczenia - na razie nie mam pomysłów, wrócę to pomyśle.
  • #18 9522006
    Adalberd
    Poziom 13  
    Posty: 137
    Pomógł: 6
    Ocena: 9
    echo '<form action="edytujauto.php?edytuj=' . $id . '" method="post">

    Zabrakło operatora łączenia tekstów.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napisał skrypt PHP do usuwania rekordów z bazy MySQL, jednak napotkał problemy z przekierowaniem po usunięciu. Otrzymał porady dotyczące usuwania spacji i znaków nowego wiersza przed wywołaniem funkcji `header()`, co jest kluczowe, aby uniknąć błędów. Wskazano również na konieczność filtrowania danych z `$_POST` i `$_GET` w celu zabezpieczenia przed atakami. Użytkownik z powodzeniem zaimplementował funkcję usuwania, a następnie przeszedł do edytowania rekordów, gdzie napotkał problemy z zapisywaniem danych. Wskazówki obejmowały poprawne użycie metod `GET` i `POST`, a także usunięcie zbędnych spacji w nazwach pól formularza.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA