Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP][MySQL]kasowanie rekordu wg id, kasuje co mu się podoba
Lucky Luke
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


Witam. Robię taki drobny skrypt ogłoszeń, dodałem kilka rzeczy i pojawił mi się problem z usuwaniem rekordów. Mianowicie każdy rekord w bazie ma inne id (u mnie: idnum) i dodatkowo w każdym rekordzie jest ustawione hasło. Gdy chcę usunąć konkretny rekord z np. id 50 i podaję poprawne hasło to usuwa zupełnie inny rekord niż ten wybrany z id 50 i z innym hasłem. Nie wiem gdzie tkwi problem. Proszę o podpowiedzi. Niżej kody 3 plików.

1. strona z numerem id który ma być skasowany i pytaniem o hasło:
  1. <?
  2. require("config.php");
  3. include("conf/config_main_options.php");
  4. include("db_connect.php");
  5. polacz_z_baza();
  6.  
  7. $idnum=$row['idnum'];
  8. $id_get=$_GET['idnum'];
  9.  
  10. $id_get = mysql_escape_string($id_get);
  11. $zap = mysql_query("SELECT * FROM baza WHERE idnum='$id_get'");
  12.  
  13. echo $html_naglowek;
  14. echo '<div id="content">';
  15. <TABLE BORDER=0 WIDTH=750 bgcolor=#FFFFFF cellspacing=1 cellpadding=1>
  16. <tr>
  17. <td colspan=2 width=700 bgcolor=#FFD47F><center>
  18. <font FACE=ARIAL COLOR=000000 size=3 align=center>&nbsp; <b>Usunięcie ogłoszenia:</b></font></center>
  19. </td>
  20. </tr>
  21. </table>
  22. <TABLE BORDER=0 WIDTH=750 bgcolor=#FFFFFF cellspacing=1 cellpadding=1>
  23. <tr>
  24. <td colspan=2 width=700 bgcolor=#EBEBEB><center>
  25. <font FACE=ARIAL COLOR=000000 size=3><b>Uwaga!</b></font>
  26. <font FACE=ARIAL COLOR=000000 size=2>Proces usuwania ogłoszenie został rozpoczęty. Podaj hasło do ogłoszenia.</font>
  27. </center>
  28. </td>
  29. </tr>
  30. </table>
  31. <TABLE BORDER=0 WIDTH=750 bgcolor=#EBEBEB cellspacing=1 cellpadding=1>
  32. <TR>
  33. <TD align=right width=50% height=25>
  34. <form action="delete_ads_form.php" method="post" name="usun_ogl">
  35. <font FACE=ARIAL COLOR=#000000 size=2>&nbsp;<b>Numer #ID ogłoszenia:</b>&nbsp;</font>
  36. </td>
  37. <td align=left width=50%>
  38. <input type="text" name="delete_id" value="'.$id_get.'" size="10" class="formst">
  39. </td>
  40. </tr>
  41. <TR>
  42. <TD align=right width=50% height=25>
  43. <font FACE=ARIAL COLOR=#000000 size=2>&nbsp;<b>Hasło:</b>&nbsp;
  44. </td>
  45. <td align=left width=50%>
  46. <input type="password" name="passw" size="10" class="formst">
  47. </td>
  48. </tr>
  49. </table>
  50. <TABLE BORDER=0 WIDTH=750 bgcolor=#FFFFFF cellspacing=1 cellpadding=1>
  51. <TR>
  52. <TD align=center width=100% height=25>
  53. <input type="submit" value="Dalej !" class="formst" STYLE="FONT-WEIGHT: bold;"></form>
  54. </td>
  55. </tr>
  56. </table>
  57. ';
  58. echo '</div>';
  59. echo $html_stopka;
  60. ?>


2. Strona pyta czy napewno usunąć rekord
  1. <?
  2. require("config.php");
  3. include("conf/config_main_options.php");
  4.  
  5. include("db_connect.php");
  6.  
  7. polacz_z_baza();
  8.  
  9. $idnum=$row['idnum'];
  10. $id_get=$_GET['idnum'];
  11.  
  12. $id_get = mysql_escape_string($id_get);
  13. $zap = mysql_query("SELECT * FROM baza WHERE idnum Like '%".$_POST['delete_id']."%'");
  14. while($rek = mysql_fetch_array($zap)) {
  15.  
  16. $idnum = $rek[0];
  17. $title = $rek[11];
  18. $passw = $rek[23];
  19. }
  20. echo $html_naglowek;
  21. echo '<div id="content">';
  22.  
  23. if($passw === $_POST['passw']){
  24. <form action="delete_ads.php" method="post" name="usun_ogl">
  25.  
  26. <TABLE BORDER=0 WIDTH=750 bgcolor=#FFFFFF cellspacing=1 cellpadding=1>
  27. <tr>
  28. <td colspan=2 width=700 bgcolor=#EBEBEB><center>
  29. <font FACE=ARIAL COLOR=990033 size=3><b>Uwaga!</b></font><br>
  30. <font FACE=ARIAL COLOR=000000 size=2>To jest ostatni etap usuwania ogłoszenia.<br>
  31. Jesteś pewny, że chcesz usunąć ogłoszenie: <font FACE=ARIAL COLOR=990033 size=2><b>'.$title.'</b></font> które ma ID: <font FACE=ARIAL COLOR=990033 size=2><b>#'.$idnum.'</b> </font>?
  32. </font><br><br>
  33. <p align="center">
  34. <input type="submit" value="Tak!" class=formst STYLE="FONT-WEIGHT: bold; width: 150px;">
  35. <input type="button" name="backButton" id="backButton" value="Nie" onclick="java script:history.go(-2)" class=formst STYLE="FONT-WEIGHT: bold; width: 150px;"></p><br>
  36. </form>
  37. </center>
  38. </td>
  39. </tr>
  40. </table>
  41. ';
  42. }else
  43. <br>
  44. <font FACE="ARIAL" COLOR="#c90000" size="3"><b>Podałeś złe hasło</b></font><br>
  45. <font FACE="ARIAL" COLOR="#000000" size="2">Kliknij <a href="java script:history.back()"><b> wstecz </b></a> i podaj poprawne hasło dla ogłoszenia.</font><br>
  46. <font FACE="ARIAL" COLOR="#c90000" size="1"><b>Jesli napotkales jakies problemy prosimy o <a href="contact.php"> kontakt</a> z administratorem.</b></font><br>
  47. ';
  48. echo '</div>';
  49. echo $html_stopka;
  50. ?>


3. Wykonanie kasowania rekordu

  1. <?
  2. include("conf/config_main_options.php");
  3. include("db_connect.php");
  4. $id = $_POST['idnum'];
  5.  
  6. polacz_z_baza();
  7.  
  8. $idnum=$row['idnum'];
  9. if (!isset($_POST['submit'])) {
  10. $zap = @mysql_query("DELETE FROM baza WHERE idnum Like '%".$_POST['delete_id']."%' LIMIT 1");
  11.  
  12. if($zap) {
  13. echo $html_naglowek;
  14. <div id=content>
  15. <table width=750 bgcolor=#FFFFFF border=0 cellspacing=0 cellpadding=0>
  16. <TR>
  17. <td width=750>
  18. <center>
  19. <br>
  20. <p>
  21. <b>
  22. <font FACE=ARIAL COLOR=#aa0000 size=-1><META HTTP-EQUIV='Refresh' CONTENT='3; URL=index.php'>Ogłoszenie usunięte. </font> </b>
  23. <br><br>
  24. <font FACE=ARIAL COLOR=#000000 size=-1> <b>Dziękujemy za korzystanie z naszego serwisu. Zapraszamy do wystawienia nowej oferty!</b> </font>
  25. </center>
  26. <p>
  27. </td></TR>
  28. </table> </div>
  29. ";}
  30. else
  31. echo 'nie usuniete';
  32.  
  33. echo $html_stopka;
  34. }
  35. ?>
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


A po co tam like przy usuwaniu? Po drugie skad bierzesz $_POST['delete_id']; ? Z pierwszego formularza a w drugim to juz nie istnieje
Go to the top of the page
+Quote Post
Lucky Luke
post
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


Cytat(ciekawskiii @ 4.03.2011, 15:25:57 ) *
A po co tam like przy usuwaniu? Po drugie skad bierzesz $_POST['delete_id']; ? Z pierwszego formularza a w drugim to juz nie istnieje



<input type="text" name="delete_id" value="'.$id_get.'" size="10" class="formst">


WHERE idnum Like '%".$_POST['delete_id']."%'

żeby wiedział co kasować. Czy to jest źle zrobione?
Go to the top of the page
+Quote Post
mat-bi
post
Post #4





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

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


A to, że nie kasujesz rekordu z danym id, ale z id podobnym do tego. Na przykład id 1 i 111
Go to the top of the page
+Quote Post
modern-web
post
Post #5





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Pamiętaj, że znak % oznacza dowolny ciąg znaków. Jeśli zatem masz id 1 to jest to rozpoznawane tak samo jak:
1
112
513
831
2192
7311
86146
itd...

Chyba wiesz co powinieneś w tym przypadku zrobić (IMG:style_emoticons/default/smile.gif)
Lecz wciąż nie mam pewności co do tego błędu. Nie wydaje mi się by był on spowodowany złym zapisem w WHERE bo pewnie tak to właśnie ma wyglądać.
LIMIT powinien ograniczyć kasowane rekordy ;/ a w Twoim wypadku tak się nie dzieje. Cóż... pokombinuj i daj nam więcej wskazówek bo szczerze mówiąc nie mam dziś nastroju do analizowania wszystkich fragmentów kodu w poszukiwaniu błędu logicznego.

Ten post edytował modern-web 4.03.2011, 16:54:51
Go to the top of the page
+Quote Post
Lucky Luke
post
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


Faktycznie co do % to wiem, że zastępuje dowolny ciąg znaków, ale to wygląda tak, że chcę usunąć id 50 a kasuje mi id 38 albo jakiś inny gdzie nie ma tych cyfer np 38. Już sprawdziłem, kiedy pominę ten plik z pytanie o potwierdzenie to usuwa rekordy z takim id jakie sobie wybiorę. Ale muszę zastosować jakieś pytanie o potwierdzenie.

Ten post edytował Lucky Luke 4.03.2011, 17:16:15
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #7





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


Bo Ci tlumacze, ze w trzecim pliku juz $_POST['id_delete'] nie istnieje, przenosisz to z pierwszego formularza do drugiego tylko. (albo ja slepy jestem). Poczytaj o $_POST bo chyba nie wiesz jak to dziala
Go to the top of the page
+Quote Post
modern-web
post
Post #8





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Sprawdź to w prosty sposób by potwierdzić tezę ciekawskiii:

1. 3 plik
2. 9 wers
3. zastąp to takim kodem:

  1. if (isset($_POST['submit']) && isset($_POST['delete_id'])) {


4. przekonamy się czy delete_id przekazywane jest do 3 pliku... (IMG:style_emoticons/default/wink.gif)

P.S.
Chyba miałeś błąd w tej linijce bo napisałeś !isset czyli na to wychodzi, że po wciśnięciu klawisza ta instrukcja nie powinna być wykonywana... no ale i tak klawisz w 2 pliku powinien mieć name="submit"...

Masz pełno podstawowych błędów no ale jak już mówiłem, nie chcę tego wszystkiego przeglądać pod tym kątem.

Ten post edytował modern-web 4.03.2011, 17:56:20
Go to the top of the page
+Quote Post
Lucky Luke
post
Post #9





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


Cytat(modern-web @ 4.03.2011, 17:53:50 ) *
Sprawdź to w prosty sposób by potwierdzić tezę ciekawskiii:

1. 3 plik
2. 9 wers
3. zastąp to takim kodem:

  1. if (isset($_POST['submit']) && isset($_POST['delete_id'])) {


4. przekonamy się czy delete_id przekazywane jest do 3 pliku... (IMG:style_emoticons/default/wink.gif)


no niestety nic to nie daje (IMG:style_emoticons/default/sad.gif) . Jest jakaś szansa, żeby to delete_id przekazać do 3 pliku?
Go to the top of the page
+Quote Post
modern-web
post
Post #10





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


No raczej... Najprościej dodaj do formularza znajdującego się na stronie 2 pole <input> z atrybutem hidden i name="delete_id" a następnie wczytaj do niego wartość delete_id otrzymaną z strony 1 (pole będzie niewidoczne ale wartość delete_id zostanie przekazana z całym formularzem do strony 3). Nic prostszego (IMG:style_emoticons/default/smile.gif) Jeśli nie wiesz jak zrobić takie pole to www.google.pl (IMG:style_emoticons/default/tongue.gif)

Ten post edytował modern-web 4.03.2011, 18:31:16
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #11





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


Mozesz w ukrytym hidden, w sesji albo w get, w sumie jakiegos id w get tam masz wiec to chyba to id? Troche sie w tym gubie
Go to the top of the page
+Quote Post
Lucky Luke
post
Post #12





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


Dokładnie właśnie z tym nowym polem <input> zacząłem kombinować ale zamiast hidden miałem button i z tym nie działało a z hidden wygląda że działa dobrze.
Go to the top of the page
+Quote Post
modern-web
post
Post #13





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


Musi działać... Więc powiedz na czym teraz stoimy (IMG:style_emoticons/default/smile.gif)
Nadal problem z identyfikatorami? Kasują się wszystkie, tak?
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #14





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


Nastepnym razem wystarczy sobie wyswietlic wszystkie zmienne przed zapytaniem i zobaczyc czy w ogole sa, echo nie jest trudne a w ten sposob nauczysz sie wyszukiwac takie bledy samemu;)
Go to the top of the page
+Quote Post
Lucky Luke
post
Post #15





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


Cytat(modern-web @ 4.03.2011, 18:47:10 ) *
Musi działać... Więc powiedz na czym teraz stoimy (IMG:style_emoticons/default/smile.gif)
Nadal problem z identyfikatorami? Kasują się wszystkie, tak?


Teraz wygląda, że działa tak jak zaplanowałem (IMG:style_emoticons/default/smile.gif) , czyli kasuje rekordy re które sobie wybiorę ze sprawdzaniem hasła, oczywiście dzięki Waszej pomocy.

Podpowiedzcie mi jeszcze tak poza tym tematem czy są jakieśprogramy które sprawdzą mi kod który piszę? Jestem raczej samoukiem staram się robić wiele sam ale czasem korzystam z poradników i różnych książek ale zapewne jet w tym sporo jakichś błędów i przydało by się jakieś narzędzie które może to sprawdzić.
Go to the top of the page
+Quote Post
modern-web
post
Post #16





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


@ciekawskiii To życzę powodzenia w wyświetlaniu zmiennych w bardziej skomplikowanych skryptach o długościach 500 linijek... echo na wiele się nie zda; lepiej chwilę posiedzieć i logicznie pomyśleć; przeanalizować cały system i szukać błędu `logicznego`.

@Lucky Luke Nie ma programu, który sprawdzi Tobie skrypt pod kątem `logicznym`. Są różne techniki programowania i zawsze najlepiej robić skrypt jak najkrótsze, najszybsze i najbardziej czytelne... Programy typu Adobe Dreamweaver/CoreEditor lub inne tego typu z kolorowaniem składni pokażą Ci błędy w strukturze. To Ty sam musisz nauczyć się dobrych praktyk. Z czasem sam wszystko zrozumiesz (IMG:style_emoticons/default/wink.gif)

Pozdrawiam!

Ten post edytował modern-web 4.03.2011, 18:59:19
Go to the top of the page
+Quote Post
ciekawskiii
post
Post #17





Grupa: Zarejestrowani
Postów: 467
Pomógł: 39
Dołączył: 7.11.2010
Skąd: Raz tu, raz tam

Ostrzeżenie: (30%)
XX---


Modern, zawsze tak robie, tak sie sam uczylem i jakos sobie radze z takimi rzeczami a tym bardziej polecam to poczatkujacym bo mozna szybko odnalezc w czym jest problem i wlasnie zmusza do przeanalizowania i do logicznego myslenia. Moze nie zawsze zda to egzamin ale w takich przypadkach tak bo gdyby sobie to wyswietlil w 3 pliku to juz by wiedzial ze id nieistnieje. P.s. Lucky Luke, poczytaj tez o zabezpieczeniach...

Ten post edytował ciekawskiii 4.03.2011, 19:15:36
Go to the top of the page
+Quote Post
Lucky Luke
post
Post #18





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 27.08.2010

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


ok dzięki (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
modern-web
post
Post #19





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

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


I na wstępnie dodam, że nie sugeruj się stripslashes i addslashes przy zabezpieczeniach gdyż nie do tego te 2 funkcje służą. Mają swój odpowiednik: mysql_real_escape_string .
Najważniejsze jest i tak filtrowanie danych. Sprawdzaj je pod wieloma kątami... Poczytaj o SQL Injection/Insertion i innych atakach za pośrednictwem MySQL. Traktuj każdego odwiedzającego jak nieprzyjaciela (IMG:style_emoticons/default/smile.gif) nigdy nie wiesz jakie ma zamiary wobec Twojego systemu.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 5.10.2025 - 02:15