Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System newsów z podziałem na kategorie
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy portalowe i CMS'y
benzulli
Witam

Po długich podbojach "czyichś" systemów newsów postanowiłem zabrać się za napisanie swojego. Zrobiłem już system logowania, użytkowników dodaję z poziomu PHPmyAdmina, lecz mam problem ze stworzeniem systemu newsów z kategoriami. O ile zwykły nie sprawia problemów, bo wystarczy dodać tabelkę w bazie danych i kilka kolumn (id newsa, tytul, tresc, data i autor), to już z newsem z kategoriami jest inaczej. Chciałbym przykładowo dać dwie kategorie: Ogrodnictwo i Ziołolecznictwo. Mógłbym rozwiązać to tak, że dodałbym dwa osobne skrypty dodawania newsów, jeden kompatybilny z ogrodnictwem,a drugi z ziołolecznictwem, tylko, że w bazie danych musiały by się znajdować dwie osobne tabele: ogrodnictwo i ziołolecznictwo (tutaj bym dał takie same kolumny jak teraz są z newsami). Tylko problem mały by był, jeżeli chodzi o dodawanie na stronę główną, bo wtedy ciężko byłoby ustawić, żeby pojawiały się na górze newsy z najświeższą datą. Przejdźmy do sedna, mianowicie wizualny plan mam taki:
Wchodzę sobie w dodajnewsa.php i tam chciałbym, z tego poziomu po prostu wstawiać do danej kategorii (przykładowo rozwijana lista), np. news "Jak zrobić domową nalewkę" do ziołolecznictwa (oczywiście w tym samym menu byłoby dodawanie tytułu i treści - to już mam), a następny news np. będzie "Jak prawidłowo przyciąć czereśnię" i tutaj też napiszę bla bla bla w treści i tym razem wybiorę z listy ogrodnictwo. Chciałbym, aby to mi się pojawiało w porządku datowym w index.php oraz osobno newsy pojawiały się odpowiednio w ogrodnictwo.php i ziololecznictwo.php

Proszę o pomoc jak mógłbym to zrobić w miarę prosty sposób (jestem początkujący jeżeli chodzi o php).
buliq
Do obecnej tabeli dodajesz klucz obcy id_kategorii
tworzysz tabelę kategorie ze strukturą np id(AI), nazwa
podczas tworzenia newsa, listę kategorii bierzesz z tej tabelki,
podczas wyświetlania newsa dodajesz nazwę kategorii za pomocą JOIN
podczas pobierania listy dla konkretnej kategorii wyszukujesz po jej ID (chociaż ja bym użył jednego skryptu do wyświetlenia, i za pomocą GET wysyłałbym jaką kategorię przeglądam)
benzulli
Już nie mam słów na to co się dzieje - próbuję dodać opcję wyboru jednej z dwóch kategorii:

  1. <?php ob_start(); ?>
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  5. <link rel="stylesheet" type="text/css" href="bezchemii.css"/>
  6. </head>
  7. <body>
  8. <?php
  9. include("config.php");
  10. ini_set( 'default_charset', 'UTF-8' );
  11. if(isset($_SESSION['zalogowany']))
  12. {
  13. echo "Witaj, " .$_SESSION['login'];
  14. $wynik = mysql_query("SELECT tytul FROM kategorie");
  15. while($k = mysql_fetch_array($wynik)) {
  16. ?>
  17. <form method="">
  18. <select>
  19. <option><?php echo $k[0];?></option>
  20. <option><?php echo $k[1];?></option>
  21. <?php }?>
  22. </select>
  23. </form>
  24. Tytuł: <input type="text" name="tytul">
  25. <br/>Treść:<textarea name="tresc" rows="20" cols="50"></textarea>
  26. <br/><input type="submit" value="Dodaj"></form>
  27. <?php
  28. if($_SERVER['REQUEST_METHOD'] == 'POST')
  29. {
  30. $query = mysql_query("insert into newsy values('','".$_POST['tytul']."',now(),'','".$_SESSION['login']."','".$_POST['tresc']."')");
  31. }
  32. ?>
  33. <p align="right"><form method="POST" action="wyloguj.php"><input type="submit" value="Wyloguj" name="wyloguj"></form></p>
  34. <?php
  35. } else {
  36. echo "dua dupa ni masz dostempa";
  37. }
  38. ?>
  39. </body>
  40. </html>
  41. <?php ob_end_flush(); ?>


ale kiedy przychodzi do sprawdzenia na stronie wyskakuje tylko Ziołolecznictwo. A jeżeli dam te zmienne normalnie, bez znaczników <select> to normalnie pokazuje Ziołolecznictwo i Ogrodnictwo. Nie wiem co jest nie tak. Żeby potem zrobić skrypt, który będzie wybierał do której kategorii w mysql dodać muszę mieć zrobione w ten sposób :/

No dobra, na obecną chwilę dałem input=radio, wyświetla co prawda po dwa do jednej opcji, ale może być - na razie.

Moje pytanie - jak mogę zrobić, aby teraz dodać do bazy danych nr kategorii, która została wybrana? Wydaje mi się, że można to zrobić na wzór metody przy rejestracji - płeć - tam też są dwa radio inputy i można sobie wybrać, albo ten - albo ten, tylko jak?

Nie rozumiem dalej jak mam zastosować to id kategorii w tabeli newsy - trzeba to jakoś połączyć z tą drugą tabelą.
markuz
  1. <?php
  2. if(isset($_POST['category']) AND isset($_POST['title']) AND isset($_POST['content']))
  3. {
  4. $category = (int)$_POST['category'];
  5. $title = mysql_real_escape_string($_POST['title']);
  6. $content = mysql_real_escape_string($_POST['content']);
  7.  
  8. $results = mysql_query("INSTERT INTO `newsy` VALUES ('','".$title."',now(),'','".$_SESSION['login']."','".$content."')");
  9.  
  10. if($results)
  11. {
  12. echo 'News został pomyślnie dodany.';
  13. }
  14. else
  15. {
  16. }
  17.  
  18. }
  19. ?>
  20. <form method="post">
  21. <select name="category">
  22. <?php
  23. $results = mysql_query("SELECT `id`, `tytul` FROM `kategorie`");
  24. while($category = mysql_fetch_array($results))
  25. {
  26. ?>
  27. <option value="<?php echo $category[0]; ?>">
  28. <?php echo $category[1]; ?>
  29. </option>
  30. <?php
  31. }
  32. ?>
  33. </select>
  34. Tytuł: <input type="text" name="title"><br/>
  35. Treść: <textarea name="content" rows="20" cols="50"></textarea><br/>
  36. <input type="submit" value="Dodaj"></form>
  37. </form>


Na początku sprawdzasz czy wszystkie dane z formularza zostały wysłane. Potem zabezpieczasz zmienne. Następnie dodajesz je do bazy danych (Nie wiem gdzie masz pole category_id, w tamtym miejscu dodaj zmienną $category która zawiera identyfikator kategorii.

Potem otwierasz formularz, a pętle z kategoriami dajesz dopiero w select!

W tabeli news musisz posiadać pole np. "category_id" i ono będzie zawierać identyfikator kategorii.
benzulli
  1. $query = mysql_query("SELECT newsy.*, id_kategorii FROM newsy JOIN kategorie ON newsy.id_kategorii = kategorie.id order by id desc limit 0,5");
  2. while($rekord = mysql_fetch_array($query))


Coś takiego już mam, tylko wyświetla mi samo id, lecz jeżeli dam newsy.id_kategorii = kategorie.tytul to wtedy na stronie nie pojawiają się żadne newsy. Chciałbym uzyskać, że newsy.id_kategorii = kategorie.tytul, tylko nie wiem jak :/
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.