Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] System news - edycja po wpisaniu 'hassla'?
Forum PHP.pl > Forum > Przedszkole
Forti
  1. <?php
  2. include("config.php");
  3. $result = mysql_query("SELECT * FROM news ORDER BY newsid DESC",$connect);
  4. while($myrow = mysql_fetch_assoc($result))
  5. {
  6. echo "<b>Title: ";
  7. echo $myrow['title'];
  8. echo "</b><br>On: <i>";
  9. echo $myrow['dtime'];
  10. echo "</i><hr align=left width=160>";
  11. echo $myrow['text1'];
  12.  
  13. echo "<form method="POST">";
  14.  
  15. echo "<input type=text name="login"/>";
  16.  
  17. echo "<input type=submit value="Wyślij"/>";
  18.  
  19. echo "</form>";
  20. if ($_POST['login'] == 10){
  21.  
  22. echo "<br><a href=\"read_more.php?newsid=$myrow[newsid]\">Read More...</a>
  23.  
  24. || <a href=\"edit_news.php?newsid=$myrow[newsid]\">Edit</a>
  25.  
  26. || <a href=\"delete_news.php?newsid=$myrow[newsid]\">Delete</a><br><hr>";
  27.  
  28. || <a href=\"add_news.php\">add</a><br><hr>";
  29. }
  30.  
  31. }
  32.  
  33. ?>
  34.  


Jak już pewnie widzicie, problem jest od linijki echo "<form method="POST">"; - napisałem to sam i już przed wiedziałem że będzie źle.
Co chce osiągnąć - chce by 'newsy' były wyświetlane normalnie dla każdego odwiedzającego. U dołu powinno być pole do wpisania tekstu i przycisk - po wpisaniu hasła chce aby ukazałi mi się opcje: read more, edit, delete, add.

Wpadłem na ten pomysł bo wydaje mi się najprostszy a nie potrafie jeszcze ogarnąć systemu rejestracji, logowania itp. Robie prosty system newsów - na razie wychodzi, jednak problem w tym że każdy będzie mógł go edytować wg. tego co powyżej.

Jakieś rozwiązania praktyczne?
Turson
Masz błedy w liniach 13, 15, 17 - powinieneś dodać backslash przed ". 28 - <a href poza " " jest
Włącz raportowane błędów!
kartin
  1. $myrow[newsid]
i podobne są niepoprawne

Wyświetlanie kodu HTML za pomocą echo jest niewłaściwe (należy oddzielać kod aplikacji od jej wyglądu). Jeśli upierasz się przy trzymaniu wszystkiego razem to zamiast:
  1. echo "<form method="POST">";
  2.  
  3. echo "<input type=text name="login"/>";
  4.  
  5. echo "<input type=submit value="Wyślij"/>";
  6.  
  7. echo "</form>";


możesz dać:
  1. ?>
  2. <form method="POST">
  3. <input type=text name="login"/>
  4. <input type=submit value="Wyślij"/>
  5. </form>
  6. <?php
Forti
Panowie, dziękuje za pomoc przy wyświetleniu kodu, rozumiem że trzeba poprawić wiele kwestii. Jednak nadal nie rozwiązuje to mojego problemu - jak zrobić, aby po wpisaniu np. 10 i kliknięciu przycisku wyświetliło mi opcje edit, delete, add new itp.
kartin
Jak teraz wygląda skrypt i jaki kod HTML otrzymujesz po jego uruchomieniu?
Forti
Witam ponownie.

Nie chce zakładać nowego tematu, więc napisze tutaj - może ktoś mi pomoże.

Na stronie głównej pod "newsami" mam takie cos:
  1. <br><a href=\"edit_news.php?newsid=$myrow[newsid]\">Edit</a>



Następnie wyświetla mi się strona o takim kodzie:


  1. <?php
  2.  
  3. include("config.php");
  4.  
  5. if(isset($_POST['submit']))
  6.  
  7. {
  8. $title = mysql_escape_string($_POST['title']);
  9.  
  10. $text1 = mysql_escape_string($_POST['text1']);
  11.  
  12. $text2 = mysql_escape_string($_POST['text2']);
  13.  
  14. $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);
  15.  
  16. echo "<b>Thank you! News UPDATED Successfully!<br>You'll be redirected to Home Page after (4) Seconds";
  17.  
  18. echo "<meta http-equiv=Refresh content=4;url=index.php>";
  19.  
  20. }
  21.  
  22. elseif(isset($_GET['newsid']))
  23.  
  24. {
  25.  
  26. $result = mysql_query("SELECT * FROM news WHERE newsid='$_GET[newsid]' ",$connect);
  27.  
  28. while($myrow = mysql_fetch_assoc($result))
  29.  
  30. {
  31.  
  32. $title = $myrow["title"];
  33.  
  34. $text1 = $myrow["text1"];
  35.  
  36. $text2= $myrow["text2"];
  37.  
  38. ?>
  39.  
  40. <br>
  41.  
  42. <h3>::Edit News</h3>
  43.  
  44.  
  45.  
  46. <form method="post" action="<?php echo $PHP_SELF ?>">
  47.  
  48. <input type="hidden" name="newsid" value="<? echo $myrow['newsid']?>">
  49. Tutuł:<input name="title" size="40" maxlength="255" value="<? echo $title; ?>">
  50. <br>
  51. Tekst:<textarea name="text1" rows="7" cols="30"><? echo $text1; ?></textarea>
  52. <br>
  53. Tekst2:<textarea name="text2" rows="7" cols="30"><? echo $text2; ?></textarea>
  54. <br>
  55. <input type="submit" name="submit" value="Update News">
  56. </form>
  57.  
  58.  
  59.  



I wszystko ładnie pięknie, jednak "news" nie edytuje się - wraca do swojej poprzedniej treści. Co może być nie tak w tym kodzie? Żadnych błędów nie zwraca.
johny_s
pewnie nie ma newsid
ps.
tak Ciężko wyświetlić zapytanie i z palca do bazy wrzucić?
kartin
  1. $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);
Pewnie dla zmiennej $newsid powinieneś przypisać wartość pobraną z $_POST.
W jakim celu do zmiennej $result pobierasz wynik wykonania zapytania, jak z niej nie korzystasz?

Zrób coś w rodzaju:
  1. if ($result) {
  2. //komunikat zapisano poprawnie
  3. }
  4. else {
  5. //komunikat błąd zapisu do bazy
  6. }
Forti
Tyle że delete dla newsid (tabela jest w mysql) czy przycisk dodaj (podobne jak edit ale dodaje nowy) działa poprawnie.
Link z index.php do edit i delete jest w tym samym miejscu, wygląda tak samo praktycznie jeżeli chodzi o kwestie NEWSID

Coś jest źle w kodzie aplikacji z edit, tylko nie potrafie stwierdzić co.

Zadanie: pobrać NEWSID i wyświetlić to, co jest w bazie w tabeli (tytuł, tekst1, tekst2) a następnie nadpisać to.
kartin
Wyświetl sobie treść zapytania SQL (to pewnie wszystko wyjasni) i dodatkowo sprawdzaj czy zostało wykonane prawidłowo.
Forti
hm.. chyba jeszcze troche nie wszystko ogarniam. Jak sprawdzić treść zapytania SQL?
kartin
Np. wyświetlić przez przy użyciu echo a w nim zapytanie skopiowane z mysql_query().
Forti
Nie ogarniam hehe

wstawiłem coś takiego:

  1. <?php
  2. echo $result = mysql_query("SELECT * FROM news WHERE newsid='$_GET[newsid]' ",$connect);
  3. echo $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);
  4.  
  5. ?>


i wyświetla mi na stronie: Resource id #41 - a powinno pobrać np. id #5 (artykuł ma taki id) (samo pierwsze echo wyświetla Resource id #1)




ps, może ktoś będzie wiedział (nie chce kolejnego tematu robić)

mam coś takiego:
  1. <br><a href=\"read_more.php?newsid=$myrow[newsid]\">Więcej</a></div>


i to jest na stronie news.php która jest zaincludowana w index.php (index.php?inc=news)
przy pomocy tej funkcji:

  1. <?PHP
  2.  
  3. @$strona=$_GET['inc'];
  4.  
  5.  
  6. if (isset($_GET['inc'])) {
  7. if (file_exists('inc/'.$strona.'.php'))
  8. include('inc/'.$strona.'.php');
  9. else
  10. include('inc/error.php');
  11. }
  12. else {
  13. //załaduj stronę główną
  14. $strona="news";
  15. include('inc/'.$strona.'.php');
  16. }
  17.  
  18.  
  19. ?>


Jak sprawić aby plik read_more wraz z pobranym ID $_get wyświetlił mi się w miejscu news.php przy pomocy include? Próbowałem już róznych warunków, siedze generalnie od wczoraj nad tym problemem. Nawet próbowałem coś z input name="xx" i warunek co zrobić gdy się go naciśnie. Albo wywala error.php albo pustą strone.
Turson
Zapytanie masz wyświetlić w ten sposób
  1. $sql = "SELECT * FROM news WHERE newsid='$_GET[newsid]' ";
  2. $result = mysql_query($sql,$connect);
  3. echo $sql;
Forti
wyświetliło: SELECT * FROM news WHERE newsid='6'

Czyli w teorii prawidłowo, newsid pobiera prawidłowo (link: edit_news.php?newsid=6). Jednak po edycji dalej pozostaje wersja z przed.



edit:

naprawiłem ;]

było: $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$newsid' ",$connect);
a powinno być : $result = mysql_query("UPDATE news SET title='$title', text1='$text1', text2='$text2' WHERE newsid='$_GET[newsid]' ",$connect);


W postach wyżej zapytałem się odnośnie funkcji include, aby było coś takiego: index.php?inc=read_more.php?newsid=$myrow[newsid] - tylko mam problem bo moja funkcja sama pobiera read_more, wstawia .php a ze wszystkim potem jest problem (obecnie pobiera wszystko i na końcu wstawia .php przez co jest error.
Turson
daj
  1. print_r($_GET);


poza tym, to jest bez sensu
  1. @$strona=$_GET['inc'];
  2. if (isset($_GET['inc'])) {
  3. }

Nie wygłuszaj błędów.
  1. if (isset($_GET['inc'])) {
  2. $strona = $_GET['inc'];
  3. }
Forti
Tutaj pokażę jak bardzo zielony jestem, nie wiem co z tym zrobić.

  1. print_r($_GET);

Turson
Wklej do swojego kodu najlepiej na sam początek i odśwież stronę, następnie to co tam sie wyswietli skopiuj i wklej na forum
Forti
array ()
na stronie index.php, pytanie tylko po co to miałem wstawić?

Jezeli chodzi o edycje wpisu to rozwiązałem problem.

Pytanie kolejne: na stronie index.php jest kod na include linków z menu (podany wyzej). domyślnie ładuje się inc/news.php, w nim jest link do pliku read_more.php?newsid=$myrow[newsid]. I chce aby ten link wraz z odpowiednią wartością newsid wyświetlił się w polu include na index.php. Do tego nie mogę dojść.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.