Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP] system newsow
zomb
post 6.11.2009, 21:06:48
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


Witam,
Piszę system newsów na swoja stronę, mam już dodawanie, wyświetlanie, edycje. Nie działa to jeszcze w 100% sprawnie. Link: http://91.121.10.107/busines/index.php
Po zalogowaniu jako admin mam pod każdym newsem przycisk Edytuj news. Jeżeli go nacisnę pokazują mi sie wszystkie newsy do edycji, oraz gdy coś edytuje to edytują się także wszystkie newsy.
Więc tutaj pytanie: jak zrobić aby było tak jak powinno? Nie będę śmiecił i wklejał tutaj wszystkie pliki, myślę że wiecie o co mi chodzi. Moje zapytania do bazy wyglądają tak:
  1. mysql_query("UPDATE `news` SET `tytul` = '$tytul', `tresc` = '$tresc', `autor` = '$autor' ;");

  1. SELECT * FROM news

wiem że trzeba dodać w zapytaniu WHERE (przynajmniej tak mi się wydaje) ale niestety nie wiem co i jak. Proszę o pomoc, jeżeli będzie potrzeba dodam wszystkie pliki.
Go to the top of the page
+Quote Post
Spawnm
post 6.11.2009, 21:09:31
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




daj where id=$id gdzie $id to id edytowanego newsa
Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 10:43:40
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


jak dodam WHERE `id` = '$id' to niestety ale po kliknieciu w edytuj nic sie nie pokazuje. Może jednak dam pliki:
news_pokaz.php:
http://wklej.org/hash/d4dac7d52a/
news_edytuj.php:
http://wklej.org/hash/ef78afbfbf/
news_edytuje.php:
http://wklej.org/hash/7fa3455610/

Wiem że jest to dość opornie zrobione ale jak na mój pierwszy system news myśle że dobrze.
Go to the top of the page
+Quote Post
Blame
post 7.11.2009, 11:10:07
Post #4





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Do news_pokaz.php dodajesz sobie w linijce 42:
  1. if ($pokaz1['ranga'] == 'admin'){
  2. $zapytanie = "SELECT * FROM news";
  3.  
  4. $wykonaj = @mysql_query ($zapytanie);
  5.  
  6. while($pokaz = @mysql_fetch_array($wykonaj)){
  7.  
  8. echo '<a href="news_edytuj.php?id='.$pokaz['id].'" >Edytuj news</a>';}
  9.  
  10. }}


W news-edytuj.php 6 i 7 linijkę zmieniasz na:

  1. $id=$_GET['id'];
  2. $zapytanie = "SELECT * FROM news WHERE 'id'='$id'";


Powinno działać. Aha, i na twoim miejscu, scaliłbym news_edytuj i news_edytuje.

Ten post edytował Blame 7.11.2009, 11:10:34


--------------------
Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 11:31:43
Post #5





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


dodane, lecz teraz pokazuje tylko 1 news oraz dalej nie pokazuje po naciśnięciu edytuj, admin testowy: test/test
Go to the top of the page
+Quote Post
Blame
post 7.11.2009, 11:40:06
Post #6





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Poprawione:
  1. if ($pokaz1['ranga'] == 'admin'){
  2.  
  3. $zapytanie = "SELECT * FROM news";
  4.  
  5.  
  6.  
  7. $wykonaj = @mysql_query ($zapytanie);
  8.  
  9.  
  10.  
  11. while($pokaz = @mysql_fetch_array($wykonaj)){
  12.  
  13.  
  14.  
  15. echo '<a href="news_edytuj.php?id='.$pokaz['id'].'" >Edytuj news</a>';}
  16.  
  17.  
  18.  
  19. }}}


  1. $id=$_GET['id'];
  2.  
  3. $zapytanie = "SELECT * FROM news WHERE id='$id'";

Przepraszam za błąd, skrypt pisany na szybko.

Ten post edytował Blame 7.11.2009, 11:43:25


--------------------
Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 11:43:07
Post #7





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


wiem, poprawiłem te błędy szybciej lecz dalej to samo
(link do strony http://91.121.10.107/busines login: test haslo: test )
Go to the top of the page
+Quote Post
potreb
post 7.11.2009, 11:50:08
Post #8





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


W formaulrzu edycji do action należy także dodać ?id=$pokaz['id']

Popatrzyłem w źródło formularza i rzeczywiście nie przekazujesz dalej zmiennej id, to skąd skrypt ma wiedzieć co edytować.

Ten post edytował potreb 7.11.2009, 11:52:03


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

Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 12:17:41
Post #9





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


wiec co mam jeszcze dodać w pliku news_edytuj i w news_edytuje ?
po tych poprawkach w news_pokaz pokazuje tylko 1 news oraz kilka napisów edytuj news
Go to the top of the page
+Quote Post
Blame
post 7.11.2009, 12:45:38
Post #10





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


A poprawiłeś kod tak jak podałem w poprzednim poście? Chodzi mi o jeszcze jedną klamrę na końcu. Specjalnie dla ciebie prze edytowałem plik news_edytuj.php teraz nie potrzebny ci już news_edytuje.php. Mam nadzieję że będzie działać. Oto on:
  1. <?
  2. if(!empty($_SESSION['login'])){
  3.  
  4. include("config.php");
  5.  
  6.  
  7. $id=$_GET['id'];
  8.  
  9. $zapytanie = "SELECT * FROM news WHERE 'id'='$id'";
  10.  
  11. $wykonaj = @mysql_query ($zapytanie);
  12. while($pokaz = @mysql_fetch_array($wykonaj)){
  13.  
  14. ?>
  15. <form action="news_edytuj.php?id=<?$id?>" method="post">
  16. <table>
  17. <tr>
  18. <td width="132"><b>id :</b></td>
  19. <td width="139"><? echo $pokaz['id']; ?></td>
  20. </tr>
  21. <tr>
  22. <td><b>tytul :</b></td>
  23. <td><input name="tytul" type="text" value="<? echo $pokaz['tytul']; ?>" /></td>
  24. </tr>
  25. <tr>
  26. <td><b>tresc :</b></td> <td><input name="tresc" type="text" value="<? echo $pokaz['tresc']; ?>" /></td>
  27. </tr>
  28. <tr>
  29. <td><b>autor :</b></td> <td><input name="autor" type="text" value="<? echo $pokaz['autor']; ?>" /></td>
  30. </tr>
  31. <tr>
  32. <td><b>data:</b></td> <td><? echo $pokaz['data']; ?></td>
  33. </tr>
  34.  
  35. <tr>
  36. <td></td>
  37. <td>
  38. </td>
  39. </tr>
  40. </table>
  41. <input type="submit" value="Zmien dane" />
  42. </form>
  43.  
  44. <?
  45. }
  46.  
  47. }else{ header("location:index.php"); }
  48.  
  49. $id=$_GET['id'];
  50. $tytul = $_POST['tytul'];
  51. $tresc = $_POST['tresc'];
  52. $autor = $_POST['autor'];
  53.  
  54.  
  55.  
  56. mysql_query("UPDATE `news` SET `tytul` = '$tytul', `tresc` = '$tresc', `autor` = '$autor' WHERE id='$id'");
  57.  
  58. }
  59.  
  60. ?>


Ten post edytował Blame 7.11.2009, 12:53:58


--------------------
Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 16:54:38
Post #11





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


tak, dodałem tą klamrę na końcu. Teraz nie potrzeba tej klamry w linii 59. Wgrałem to lecz niestety znowu nic się nie pokazuje:
http://91.121.10.107/busines/news_edytuj.php?id=9
oraz co z plikiem news_pokaz.php pokazuje się tylko 1 news i kilka przycisków Edytuj news.
Go to the top of the page
+Quote Post
potreb
post 7.11.2009, 17:32:26
Post #12





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Pomaganie w kodzie nie oznacza, że ktoś ma ci dawać do wklejenia całego przerobionego kodu. Trochę własnej inwencji. Pokazuj to co do tej zrobiłeś. To, że podasz nam url nie oznacza, że wszystko jest dla nas wiadome.

I najważniejsze, mam dane administratora, preparuje formularz i mogę zrobić sql injection lub nawet przez zwykłego geta. Przydałoby się przynajmniej minimalnie zabezpieczyć przed takimi rzeczami.


  1.  
  2. if(isset($_POST['submit'])) {
  3. $id=$_GET['id'];
  4. $tytul = $_POST['tytul'];
  5. $tresc = $_POST['tresc'];
  6. $autor = $_POST['autor'];
  7.  
  8.  
  9.  
  10. mysql_query("UPDATE `news` SET `tytul` = '$tytul', `tresc` = '$tresc', `autor` = '$autor' WHERE id='$id'");
  11. }


Nie trzeba klamry :/ zauważ, że musisz mieć przynajmniej jakiś warunek dla edycji, bo edycja za każdym razem będzie się robiła, tyle że nie ma wartości, a parametr id przekazywałbym poprzez formularz i sprawdzałbym przy okazji czy jest to liczba.

Ten post edytował potreb 7.11.2009, 17:39:51


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

Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 19:30:46
Post #13





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


zapomniałem dodać ale to chyba jest jasne że jestem początkujący ... może mi powiecie jak to zabezpieczyć? Naniosłem kilka poprawek w tym co mi podaliście typu 'id='$id' na id=.. i pokazywanie newsów działa już prawidłowo. Gdy kliknę Edytuj news pojawia mi się formularz lecz gdy zatwierdzę zmiany dane się nie zmieniają ;/ oto news_edytuj.php:
  1. <?php
  2. include("config.php");
  3.  
  4.  
  5. $id=$_GET['id'];
  6.  
  7. $zapytanie = "SELECT * FROM news WHERE id='$id'";
  8.  
  9. $wykonaj = @mysql_query ($zapytanie);
  10. while($pokaz = @mysql_fetch_array($wykonaj)){
  11.  
  12. ?>
  13. <form action="news_edytuj.php?id=<?$id?>" method="post">
  14. <table>
  15. <tr>
  16. <td width="132"><b>id :</b></td>
  17. <td width="139"><? echo $pokaz['id']; ?></td>
  18. </tr>
  19. <tr>
  20. <td><b>tytul :</b></td>
  21. <td><input name="tytul" type="text" value="<? echo $pokaz['tytul']; ?>" /></td>
  22. </tr>
  23. <tr>
  24. <td><b>tresc :</b></td> <td><input name="tresc" type="text" value="<? echo $pokaz['tresc']; ?>" /></td>
  25. </tr>
  26. <tr>
  27. <td><b>autor :</b></td> <td><input name="autor" type="text" value="<? echo $pokaz['autor']; ?>" /></td>
  28. </tr>
  29. <tr>
  30. <td><b>data:</b></td> <td><? echo $pokaz['data']; ?></td>
  31. </tr>
  32.  
  33. <tr>
  34. <td></td>
  35. <td>
  36. </td>
  37. </tr>
  38. </table>
  39. <input type="submit" value="Zmien dane" />
  40. </form>
  41.  
  42. <?
  43. }
  44.  
  45. if(isset($_POST['submit'])) {
  46. $id=$_GET['id'];
  47. $tytul = $_POST['tytul'];
  48. $tresc = $_POST['tresc'];
  49. $autor = $_POST['autor'];
  50.  
  51.  
  52.  
  53. mysql_query("UPDATE news SET `tytul` = '$tytul', `tresc` = '$tresc', `autor` = '$autor' WHERE id='$id'");
  54. }
  55.  
  56.  
  57.  
  58. ?>
Go to the top of the page
+Quote Post
potreb
post 7.11.2009, 20:11:09
Post #14





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


  1. <input type="submit" name="submit" value="Zmien dane" />


Warunek isset($_POST['submit']) sprawdza czy jest taka tablica, więc trzeba było dodać do submit name="submit".

Zamień mysql_query("UPDATE ... poniższym kodem.
  1. $sql = "UPDATE news SET `tytul` = '$tytul', `tresc` = '$tresc', `autor` = '$autor' WHERE id='". $id."' ";
  2. echo $sql; // wyświetlę sobie zmienną $sql i wtedy zobaczę czy zapytanie jest okey
  3. echo mysql_error(); // w razie wystąpienia błędu dostanę info o błędzie


Przy okazji sprawdzę czy id jest liczbą:
  1. if(isset($_POST['submit']) && ctype_digit($_GET['id'])) {


Przy okazji pousuwaj wszystkie małpy z przed funkcji.

Co to?? Skrótowy zapis?? Raczej nie.
  1. <form action="news_edytuj.php?id=<?$id?>" method="post">


Raczej tak
  1. <form action="news_edytuj.php?id=<?php echo $id; ?>" method="post">


Zrób o to co cię prosiłem i napisz o efektach.

Ten post edytował potreb 7.11.2009, 20:15:49


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

Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 20:25:19
Post #15





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


UPDATE news SET `tytul` = '00000', `tresc` = '00000', `autor` = '00000' WHERE id='9'

W końcu wszystko działa jak należy winksmiley.jpg) dzięki wielkie. Mógłbyś mi jeszcze powiedzieć jak to zabezpieczyć ?
Go to the top of the page
+Quote Post
Blame
post 7.11.2009, 20:32:35
Post #16





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Poczytaj trochę o mysql_real_escape_string, addslashes i htmlspecialchars. Dodam tylko tyle, że musisz nimi potraktować wszystkie dane które użytkownik wpisuje do formularza.

Ten post edytował Blame 7.11.2009, 20:33:30


--------------------
Go to the top of the page
+Quote Post
zomb
post 7.11.2009, 21:07:19
Post #17





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


ok, wiem o co z tym chodzi, w najbliższym czasie poprawię to. Teraz skrypt wygląda tak:
  1. <?php
  2. include("config.php");
  3.  
  4.  
  5. $id=$_GET['id'];
  6.  
  7. $zapytanie = "SELECT * FROM news WHERE id='$id'";
  8.  
  9. $wykonaj = @mysql_query ($zapytanie);
  10. while($pokaz = @mysql_fetch_array($wykonaj)){
  11.  
  12. ?>
  13. <form action="news_edytuj.php?id=<?php echo $id; ?>" method="post">
  14. <table>
  15. <tr>
  16. <td width="132"><b>id :</b></td>
  17. <td width="139"><? echo $pokaz['id']; ?></td>
  18. </tr>
  19. <tr>
  20. <td><b>tytul :</b></td>
  21. <td><input name="tytul" type="text" value="<? echo $pokaz['tytul']; ?>" /></td>
  22. </tr>
  23. <tr>
  24. <td><b>tresc :</b></td> <td><input name="tresc" type="text" value="<? echo $pokaz['tresc']; ?>" /></td>
  25. </tr>
  26. <tr>
  27. <td><b>autor :</b></td> <td><input name="autor" type="text" value="<? echo $pokaz['autor']; ?>" /></td>
  28. </tr>
  29. <tr>
  30. <td><b>data:</b></td> <td><? echo $pokaz['data']; ?></td>
  31. </tr>
  32.  
  33. <tr>
  34. <td></td>
  35. <td>
  36. </td>
  37. </tr>
  38. </table>
  39. <input type="submit" name="submit" value="Zmien dane" />
  40. </form>
  41.  
  42. <?
  43. }
  44.  
  45. if (isset($_POST['submit']) && ctype_digit($_GET['id'])) {
  46. $id=$_GET['id'];
  47. $tytul = $_POST['tytul'];
  48. $tresc = $_POST['tresc'];
  49. $autor = $_POST['autor'];
  50.  
  51. $sql = "UPDATE news SET `tytul` = '$tytul', `tresc` = '$tresc', `autor` = '$autor' WHERE id='". $id."' ";
  52. mysql_query($sql) or die("Wystąpił błąd" );
  53.  
  54. echo '<font style="size:14px;position:relative;margin:0px auto;top:300px;"><center><b>Dane zostały zmienione.</b> <br /> Zachwile zostaniesz przekierowany na strone główną.<br />Jeżeli sie to sie stanie kliknij <a href="index.php">tutaj</a>.</font></center><meta http-equiv="refresh" content="4; URL=index.php"> ';
  55.  
  56. }
  57. ?>


teraz mam jeszcze jedno pytanie: jak dodać edycję tylko dla admina, bo każdy może sobie wejść i edytować to. Gdy dodaje do kodu " if ($pokaz['ranga'] == 'admin'){ " niestety znowu ale tylko białe tło ;/
Go to the top of the page
+Quote Post
thek
post 7.11.2009, 22:11:00
Post #18





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




A od kiedy to w informacji o newsach wciskasz typ użytkownika?
$pokaz['ranga'] == 'admin' nie ma prawa działać, bo $pokaz przechowuje informacje o newsie, która to zmienna jest efektem zapytania: "SELECT * FROM news WHERE id='$id'"
Jak Tyś tam rangę wcisnął to nie wiem smile.gif
Musisz informację o użytkowniku wyciągnąć z bazy w locie, albo pobrać jego uprawnienia z sesji. Dopiero na tej podstawie decydujesz czy user ma prawo edytować czy nie.

Ten post edytował thek 7.11.2009, 22:11:53


--------------------
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
zomb
post 11.11.2009, 10:38:45
Post #19





Grupa: Zarejestrowani
Postów: 68
Pomógł: 1
Dołączył: 7.06.2009
Skąd: Sanok

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


ok, fakt, nie zauważyłem.
Jeszcze jedno pytanie: jak "odwrócić" kolejność pokazywania newsów. Chodzi o to, że jak dodam teraz jakiś news to pokazuje on się "na dole" a nie "na górze".
Czekam na pomoc
Go to the top of the page
+Quote Post
Blame
post 11.11.2009, 10:59:17
Post #20





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Przy $zapytanie dajesz:
  1. $zapytanie = "SELECT * FROM news WHERE id='$id' ORDER BY id desc";


Ten post edytował Blame 11.11.2009, 10:59:29


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 13.06.2025 - 05:52