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

Edycja i usuwanie konkretnego rekordu z bazy danych z poziomu PHP

Object Storage Arubacloud
0 głosów
3,493 wizyt
pytanie zadane 22 maja 2015 w PHP przez smarek Nowicjusz (190 p.)

Witam serdecznie!

W jaki sposób można rozgryźć taki orzech? :

Chcę, żeby na podstronie wyświetlała się cała tabela XYZ z bazy danych i była możliwość edycji/usunięcia/dodania wybranego rekordu.

_____

Jak na razie udało mi się wyświetlić całą tabelę i dodać do każdego wiersza 2 guziki-linki(edycja/usun) i jeden guzik link(dodaj). Rozwiązane jest to tak, że klikając na guzik-link (dodaj) 

<a href="index.php?page=dodaj">Dodaj</a> przekierowuje mnie na podstronę dodaj.php, gdzie mogę dodać sobie rekord i jest on dodawany jako kolejny w bazie danych. CZyli tutaj działa.

Jeśli chodzi o guzik-link(edytuj) to także jest przekierowywany na podstronę tylko, że edytuj.php, gdzie może wedytować, ale niestety można edytować tylko ostatni rekord. 

Tutaj właśnie jest ten orzeszek. Myślę, że trzeba jakoś wyłuskać id danego rekordu, ale nie wiem jak, przypisując w linku zmienną do id, tylko wtedy nie wiem jak zrobić przekierowanie na stronę edytuj.php. 

Jeśli chodzi o dodawanie to jest ten sam problem, usuwa ostatni rekord. 

Chyba, że jest jakiś zgrabniejszy pomysł :)  

   

1 odpowiedź

+2 głosów
odpowiedź 22 maja 2015 przez Comandeer Guru (600,810 p.)
wybrane 23 maja 2015 przez smarek
 
Najlepsza
<a href="index.php?page=edytuj&id=<?=$idRekordu;?>">Edytuj</a>

$idRekordu wyciągniesz se z pętli (z danego wiersza z bazy). Później na podstronie edytuj będziesz go miał w $_GET['id']

komentarz 22 maja 2015 przez ArturB Mądrala (6,060 p.)
aby nie przekazywać w pasku danych do usuwania moze pobawić się z przekazaniem tej wartości w zmiennej sesyjnej lub post'em
komentarz 22 maja 2015 przez Comandeer Guru (600,810 p.)

A jak wsadzisz do sesji dane po kliknięciu w link? ;)

POST szybciej (wówczas zamiast linków mielibyśmy button[type=submit]), ale zauważ, że ten link jest odpowiednikiem takiej akcji w RESTful API:

http://strona/news/edit/1

To id jest zatem integralną częścią adresu

komentarz 22 maja 2015 przez ArturB Mądrala (6,060 p.)
niekoniecznie bym to robił w linku, przyciski jakoś lepiej wyglądają na stronach. ja bym wolał postawić bardziej na bezpieczeństwo jak coś usuwamy z bazy danych. przy tym linku to aż tak źle nie wygląda, ale jak ktoś wpisze na końcu np 2 to będzie edytował wiersz o id2? jak tak to lipa.

Ja dopiero poznaję php, dlatego napisałem że można użyć sesji i wydaje mi się że jest to możliwe może nie będzie to takie proste jak get, ale raczej bezpieczniejsze.
komentarz 22 maja 2015 przez Comandeer Guru (600,810 p.)

To, że coś wygląda jak przycisk, niekoniecznie nim jest. Ostylować można też odpowiednio link (patrz: Bootstrap i jego .btn)

Tutaj nie rozchodzi się o bezpieczeństwo. Ok, takie usuwanie można przeprowadzić lepiej niż przez GET (wzorcowo to jest żądanie metodą DELETE), natomiast samo wyświetlenie edytora newsa przecież nie stanowi żadnego zagrożenia bezpieczeństwa.

Jeśli ktoś dostawi id na końcu linka, to system ma obowiązek sprawdzić czy dany użytkownik ma prawo widzieć stronę o tym newsie i wykonywać dane czynności na nim. Z tym, że system uprawnień nie ma nic do systemu linków.

Zgodnie z architekturą REST każdy zasób powinien mieć swój unikalny link, zatem dla newsa o id 1 mogłoby to być:

http://strona/news/1

Zatem naturalnym jest, że link do edycji tego newsa byłby taki:

http://strona/news/1/edit

Jeśli wywoła się ten adres metodą GET (kliknięcie w link) wyświetlany jest formularz edycji (oczywiście po uprzednim sprawdzeniu czy user ma prawo go widzieć). Natomiast gdy pod ten adres pójdzie żądanie POST, to znak, że ktoś już wypełnił formularz edycji i chce, żeby system zapisał zmiany (tutaj inna kwestia to np. zabezpieczenia typu anty-XSRF).

Same linki nie przesądzają o bezpieczeństwie - ich wykorzystanie dopiero o tym decyduje.

komentarz 22 maja 2015 przez ArturB Mądrala (6,060 p.)
O tym zapomniałem, że można sprawdzać czy dana osoba ma uprawnienia do korzystania z danego pliku, a to już może jakoś zabezpieczyć bazę danych.
komentarz 23 maja 2015 przez smarek Nowicjusz (190 p.)

Dziękuję za odpowiedź :) 

Zrobiłem tak jak napisałeś, przechodzi do strony edycja.php, ale nadal występuję problem z przesłaniem id. Tym razem nic nie ma w zmiennej, gdzie odbieram $_GET['id_thing'].

Może pokażę w jaki sposób w pętli odbieram dane z bazy: 


while($row = mysql_fetch_assoc($result)) {
                    
echo '<tr >
      <td>'.$row['id_thing'].'</td><td>'.$row['name_thing'].'</a></td>
      <td>'.$row['thing_stan'].'</td><td>'.$row['desc_thing'].'</td>
      <td>'.$row['amount_thing'].'</td>';
echo  $id = $row['id_thing']; //wyświetla mi na stronie liczby od 1 - 9, czyli prawidłową ilość rekordów
echo ' <td><a href="index.php?page=edycja&id_thing=<?=$id?>">Edytuj</a></td>'; 
                        '</tr>';

 }

Próbowałem jeszcze tak(bez rezultatu): 

echo ' <td><a href="index.php?page=edycja&id_thing=<?=$row[\'id_thing\'];?>">Edytuj</a></td>'; 
komentarz 23 maja 2015 przez Comandeer Guru (600,810 p.)

Popatrz jak w każdym wersie dodajesz zmienne do wyświetlenia i pomyśl czemu nie działa w tej z id ;) <?= działa jedynie jak jest poza kodem PHP

komentarz 23 maja 2015 przez smarek Nowicjusz (190 p.)

Okej, już ogarnąłem, nie wiedziałem, że można też tak zapisywać składnie PHP :D

Dziękuję, już działa :)

@edit

Kod powinien wyglądać tak: 

<td ><a href="index.php?page=edycja&id_thing=';echo $row['id_thing'];echo '">Edytuj</a></td>';

 

 

Podobne pytania

0 głosów
3 odpowiedzi 1,116 wizyt
pytanie zadane 7 lipca 2015 w PHP przez Mateusz Analityk Stary wyjadacz (13,710 p.)
0 głosów
3 odpowiedzi 194 wizyt
pytanie zadane 30 sierpnia 2015 w PHP przez KamilloPL Gaduła (3,470 p.)
0 głosów
2 odpowiedzi 389 wizyt
pytanie zadane 2 sierpnia 2016 w JavaScript przez Patryk Rafał Bywalec (2,700 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...