Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Usuwanie rekordu
seta17
post 11.05.2010, 08:36:09
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.05.2010

Ostrzeżenie: (0%)
-----


witam jestem poczatkujący w tematyce PHP i zabardzo nie wiem czemu mi nie działa funkcja do usuwania rekordu z bazy mysql. Różne rzeczy próbowałem zrobić ale ciągle ten sam błąd jest;/
Cytat
Warning: Unknown: failed to open stream: Brak dost�pu in Unknown on line 0
Fatal error: Unknown: Failed opening required '/opt/lampp/htdocs/strona/skrypty/usun.php' (include_path='.:/opt/lampp/lib/php') in Unknown on line 0

myślę że mam gdzieś błąd skłądni ale sam sobie poradzić nie mogę...
plik news.php
  1. <?php
  2.  
  3. $polacz=mysql_connect('localhost','root','');
  4.  
  5. mysql_select_db("baza_nowa");
  6.  
  7. $zapytanie="select * from news";
  8.  
  9. $wykonaj=mysql_query($zapytanie);
  10.  
  11. while ($wypis=mysql_fetch_array($wykonaj)){
  12.  
  13. $idu=$wypis['id'];
  14.  
  15. $tytul=$wypis['tytul'];
  16.  
  17. $zdjecie=$wypis['zdjecie'];
  18.  
  19. $tresc=$wypis['tresc'];
  20.  
  21.  
  22.  
  23.  
  24. <div style="width:500px; height:150px; border:1px solid black;">
  25.  
  26.  
  27. <div style="width:150px; height:150px; background:#444; border-right:1px solid black; float:left;"><img src="'; echo $zdjecie; echo '"/></div>
  28.  
  29.  
  30.  
  31. <div style="width:349px; height:150px; background:gold; float:left;">
  32.  
  33.  
  34. <div style="width:349px; height:25px; border-bottom:1px solid black;">'; echo $tytul; echo '</div>
  35.  
  36.  
  37. <div style="width:349px; height:124px;">'; echo $tresc; echo '</div>
  38.  
  39.  
  40. </div>
  41.  
  42. </div>
  43. <form action="usun.php" method="get">
  44. <a href="skrypty/usun.php?id='; echo $idu; echo '"><button type="submit">usun</button></a>
  45. </form>
  46.  
  47. ';}
  48.  
  49.  
  50.  
  51. ?>


plik usun.php
  1. <?php
  2. $id=$_GET['id'];
  3.  
  4. include('polacz.php');
  5.  
  6. $query="DELETE FROM contacts WHERE id=$id";
  7. mysql_query($query);
  8. echo "Rekord usuniety";
  9. ?>


Ten post edytował seta17 11.05.2010, 11:15:50
Go to the top of the page
+Quote Post
Ociu
post 11.05.2010, 08:38:41
Post #2





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




  1. include('polacz.php');
Go to the top of the page
+Quote Post
seta17
post 11.05.2010, 09:16:25
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.05.2010

Ostrzeżenie: (0%)
-----


no ten błąd aż taki prosty nie jest:P dalej problem nie rozwiązany i to samo wyskakuje...
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 10:17:43
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Ten błąd jest banalny. Po pierwsze atrybut action formularza jest inny niż adres w odnośniku niżej (linie 44 i 45) i skrypt nie może znaleźć pliku usun.php. A po drugie albo usuwasz dane za pomocą odnośnika, albo za pomocą formularza. W tej chwili kod w liniach 44-46 włącznie nie ma w ogóle sensu.
Go to the top of the page
+Quote Post
teka
post 11.05.2010, 10:21:57
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 2
Dołączył: 30.04.2010

Ostrzeżenie: (0%)
-----


spróbuj w pliku usun.php w linii 2 zamiast: $_POST wstawić $_GET (linie 3-5 sa niepotrzebne)
oraz zamiast:
  1. include(polacz.php);

wstawić:
  1. $polacz=mysql_connect('localhost','root','');
  2. mysql_select_db("baza_nowa");


jeśli zadziała, to masz problem z połączeniem do bazy MySQL w pliku polacz.php

Ten post edytował teka 11.05.2010, 10:25:42
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 10:25:49
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Zauważyłem jeszcze jeden błąd. Formularz wysyłasz metodą get, a dane w pliku usun.php pobierasz z tablicy POST.

@teka Komunikat błędu wyraźnie wskazuje, co jest nie tak. Kolejnymi błędami należałoby się zająć później, bo w tej chwili skrypt nie ma prawa działać.
Go to the top of the page
+Quote Post
seta17
post 11.05.2010, 11:22:16
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.05.2010

Ostrzeżenie: (0%)
-----


@teka polaczenie z baza jest na 100% sprawne bo tego pliku używam jeszcze w kilku miejscach
@mortus: to jak wg ciebie powinno wygladac odwolanie?

plik usun.php po modyfikacji w 1 poscie
plik news.php edycja 44-46 lini
  1. <form action="skrypty/usun.php" method="get">
  2.  
  3. <a href="skrypty/usun.php?id='; echo $idu; echo '">
  4. <button type="submit">usun</button></a>
  5. </form>
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 11:36:33
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Albo formularz (1), albo odnośnik (2).
Opcja 1
news.php - formularz
  1. ...
  2. <form action="skrypty/usun.php" method="post">
  3. <input type="hidden" name="id" value="<?php echo $idu; ?>" /><br />
  4. <input type="submit" value="Usuń" />
  5. </form>
  6. ...
usun.php
  1. // sprawdzamy, czy formularz został wysłany
  2. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  3. $id = $_POST['id'];
  4. // usuwanie
  5. }

Opcja 2
news.php - odnośnik
  1. <a href="skrypty/usun.php?id=<?php echo $idu; ?>">Usuń</a>

usun.php
  1. if(isset($_GET['id']) && $_GET['id'] == '') {
  2. $id = $_GET['id'];
  3. // usuwanie
  4. }


Dodatkowo przy drugiej opcji warto byłoby zastosować formularz, poprzez który będziemy potwierdzać usuwanie danych. Np. zawierający dwa przyciski button TAK i NIE.
Go to the top of the page
+Quote Post
seta17
post 11.05.2010, 11:42:58
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.05.2010

Ostrzeżenie: (0%)
-----


bede robil to przez formularz... blad nadal wystepuje... jedyne co sie zmienilo to sa polskie znaki:)
  1. <?php
  2. include('polacz.php');
  3. if($_SERVER['REQUEST_METHOD'] == 'GET') {
  4. $id = $_GET['id'];
  5. $query="DELETE FROM news WHERE id=$id";
  6. $usun=mysql_query($query);
  7. echo "Rekord usuniety";
  8. }
  9. ?>


Ten post edytował seta17 11.05.2010, 11:59:18
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 13:03:27
Post #10





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Jeżeli przez formularz, to proponowałbym użyć jednak metody post. Plik z formularzem
  1. <form action="skrypty/usun.php" method="post">
  2. <input type="hidden" name="id" value="<?php echo $idu; ?>" /><input type="submit" value="Usuń" />
  3. </form>
i plik usun.php
  1. <?php
  2. include 'polacz.php';
  3. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  4. $id = $_POST['id'];
  5. $query = "DELETE FROM news WHERE id=$id";
  6. $usun = mysql_query($query) or die(mysql_error());
  7. echo "Rekord usuniety";
  8. }
Ogólnie metodą post powinniśmy przesyłać informacje, które mają jakikolwiek wpływ na zmianę danych. Metoda get się do tego nie nadaje, ponieważ każdy mógłby usunąć obojętnie jaki wpis, podając jego id w adresie w przeglądarce. Polecam poczytać co nieco o sposobach przesyłania danych na stronach www. Jeżeli to nadal nie będzie działać, to napisz jaki konkretnie błąd występuje.
Go to the top of the page
+Quote Post
phpion
post 11.05.2010, 13:10:08
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(mortus @ 11.05.2010, 14:03:27 ) *
Metoda get się do tego nie nadaje, ponieważ każdy mógłby usunąć obojętnie jaki wpis, podając jego id w adresie w przeglądarce. Polecam poczytać co nieco o sposobach przesyłania danych na stronach www.

Ty natomiast poczytaj o bezpieczeństwie aplikacji. Myślisz, że POST cię w jakikolwiek sposób przed tym zabezpieczy? W jednej chwili mogę FireBugiem podmienić wartość pola w formularzu i wyjdzie na to samo.
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 13:14:48
Post #12





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


@phpion Wiem o tym, ale generalnie zaleca się przesyłane metodą post informacji, które mają jakikolwiek wpływ na dane, z których korzysta aplikacja.
Go to the top of the page
+Quote Post
phpion
post 11.05.2010, 13:17:50
Post #13





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Kto tak zaleca? Jak dla mnie usuwanie rekordów za pomocą formularza i metody POST to bezsensowny pomysł - stosuję zwykły link z identyfikatorem rekordu do usunięcia. Co innego formularz zapisu danych w bazie - tam przesyłam dużo informacji więc wygodniej jest użyć POSTa.
Go to the top of the page
+Quote Post
nospor
post 11.05.2010, 13:18:03
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@mortus ale napisales to tak, ze zabrzmialo jakby POST byl super bezpieczny a GET jest zły. A pierwszy lepszy "hakier" "złamie" tego POSTA.
Ja tam IDiki też przesyłam GETem. Post sluzy w wiekszosci wypadków to większej liczby danych a nie do głupiego IDka przy usuwaniu rekordu.

To po stronie serwera (php) masz napisac zabezpieczenie by user mogl usunac tylko to co moze. POST czy GET nie ma w tym przypadku nic do gadania

smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
thek
post 11.05.2010, 13:19:16
Post #15





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




@mortus: phpion ma rację. Jedyne co możesz robić to sprawdzać uprawnienia po stronie serwera do wykonania określonych akcji. Sam jakiś czas temu przesadziłem z tym do tego stopnia, że tylko user-właściciel mógł swoje dane modyfikowac. Musiałem pisać "furtkę" by także admin miał to prawo, bo skrypt nawet usera z prawami admina blokował wypisując: "Nie masz uprawnień do tej operacji" smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
phpion
post 11.05.2010, 13:23:29
Post #16





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Dobry mechanizm ACL to podstawa smile.gif my w pracy mamy akurat dość sprytne ustrojstwo do kontrolowania dostępu do akcji (kontroler + akcja) oraz pól w formularzu (blokowanie pola + dodatkowa kontrola w momencie zapisu danych do bazy gdyby ktoś sobie spryciarsko odblokował pole winksmiley.jpg). I tak jak pisze ~nospor: metoda POST/GET nie ma tu żadnego znaczenia.
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 13:24:34
Post #17





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Ale ja nie mówię, że ktoś nie ma racji. Sam osobiście użyłbym odnośnika z id rekordu do usunięcia, kolega wybrał sposób z formularzem, więc tylko metodę post poleciłem, choć oczywiście nie jest ona bezpieczna, podobnie jak i get. W obu przypadkach należy odpowiednie zabezpieczenie zaimplementować.
Go to the top of the page
+Quote Post
phpion
post 11.05.2010, 13:27:11
Post #18





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(mortus @ 11.05.2010, 14:24:34 ) *
Sam osobiście użyłbym odnośnika z id rekordu do usunięcia, kolega wybrał sposób z formularzem, więc tylko metodę post poleciłem

A czym by się różnił formularz wysyłany metodą GET od zwykłego id przekazanego w linku?
Go to the top of the page
+Quote Post
mortus
post 11.05.2010, 13:33:56
Post #19





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Tylko długością kodu HTML i PHP. Poza tym niczym, ale w temacie nie chodzi o różnice pomiędzy odnośnikiem, a formularzem przesyłanym metodą get.

Zresztą napisałem koledze, że można tak i tak, ale nie równocześnie, bo to bez sensu. O tym jaką metodą prześle formularz i jak zabezpieczy swój skrypt zadecyduje on sam.

Ten post edytował mortus 11.05.2010, 13:31:40
Go to the top of the page
+Quote Post
seta17
post 11.05.2010, 16:42:36
Post #20





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.05.2010

Ostrzeżenie: (0%)
-----


no wiec teraz chyba trzeba odbiec od błędów w moim kodzie a skupić się na wyrzucanym błędzie, gdyż mój pierwszy kod do usuwania odpaliłem w domu i zadziałał bez problemu wiec to co jest innego... tam gdzie robię tą stronę jest linux (CentOS) oraz XAMPP... w domu pracuje na win7 oraz wampserv na przemian z xampp'em
@edit
co do zabezpieczeń to bym chciał zrobić coś takiego że przed wykonaniem zapytania SQL będzie trzeba podać hasło oraz login, ale tym zajmę się później... jeżeli da się coś takiego zrobić.
@edit2:
użyłem teraz plików w pracy z domu i działają, więc nie wiem w czym był problem... więc zostaje kod pliku o taki:
plik usun.php
  1. <?php
  2. include("polacz.php");
  3. include("polecenia.php");
  4. $idu=$_GET['id'];
  5. $query="DELETE FROM news WHERE id='$idu'";
  6. $wykonaj=mysql_query($query);
  7. echo "Rekord usuniety";
  8. echo "<br><A href='../index.php'>wróć</a>";
  9. ?>


Ten post edytował seta17 12.05.2010, 08:16:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 11:15