[HTML/SQL] System newsów - linkowanie

Piszę stronę internetową i mam problem z pewnym zagadnieniem.

Mam bazę danych SQL, a w niej są zamieszczone newsy/artykuły i inne.

Na stronie głównej wyświetliłem najnowsze artykuły

iamioaace.jpg

W jaki sposób można automatycznie zrobić linka (przekierowanie) do całego artykułu, wiedząc że jest on w bazie sql? Mam pola: id (primarykey), tytul, text, data, autor.

Niestety nie znalazłem tutoriali dotyczących linkowania. Z tego co zauważyłem, to często strony na końcu adresu mają, np. index.php?id=1…, lecz nie wiem jak to ugryźć :slight_smile:

Chyba znasz PHP skoro operujesz na bazie danych? A z linkiem to sprawa banalna…

W tabeli stwórz pole z opcją “AUTO_INCREMENT” - poszukaj gdzieś na ten temat… Jak pobierasz przez php nagłówki z najnowszymi tytułami to pobieraj też ich numer ze wspomnianego pola i w linku dajesz tą końcówkę index.php?id=TU MA BYC NUMER. W pliku index.php dajesz warunek if(isset($_GET[‘id’])) jeżeli spełnia to pobierasz treść art. i wrzucasz w HTML.

Jeżeli nie masz pojęcia o czym mówie to polecam kurs http://webhosting.pl/Kurs.PHP…Wstep.do.programowania.w.popularnym.jezyku.skryptowym

O linkowaniu masz tam na 9 stronie.

Pole id ma auto_increment, zapomniałem o tym napisać :slight_smile:

Czy możesz mi pokazać na przykładzie, w jaki sposób zaimplementować taką funkcję? PHP dopiero próbuję się uczyć od niedawna na gotowych skryptach, które później modyfikuje :wink:

Kod dla newsów (dla artów jest identyczny)

core.php - zawiera dane do logowania na stronie.

w pliku index.php jest funkcja <?php include (‘scripts/news.php’) ?>

<?php include ('core.php') ?>

<?

$link=mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,20");


while($wiersz=mysql_fetch_array($link))


{

        echo '

'; echo $wiersz[‘title’]; echo ’

'; if (isset($_GET[‘id’])) echo ’

'; echo 'Autor: ‘; echo $wiersz[‘user’]; echo ’ |’; echo ’ Data: '; echo $wiersz[‘date’]; echo ’

'; echo ’
'; echo $wiersz[‘text’]; echo ’
'; echo ’

'; echo 'Źródło: '; echo $wiersz[‘source’]; echo ’

'; echo ’ '; } mysql_close($connection); ?>

[/code]

Dzięki za tutorial, później jeszcze poczytam :slight_smile:

Trochę dziwny ten kod… Wygląda że pobiera 20 newsów i jeżeli jest zmienna $_GET to wyświetla dodatkowo resztę danych.

<?php include ('core.php') ?>

<?

if (isset($_GET['id']))

{

$link=mysql_query("SELECT * FROM news WHERE id = $_GET['id']");

echo '

'; echo $wiersz[‘title’]; echo ’

'; echo ’

'; echo 'Autor: ‘; echo $wiersz[‘user’]; echo ’ |’; echo ’ Data: '; echo $wiersz[‘date’]; echo ’

'; echo ’
'; echo $wiersz[‘text’]; echo ’
'; echo ’

'; echo 'Źródło: '; echo $wiersz[‘source’]; echo ’

'; echo ’ '; } else { $link=mysql_query(“SELECT title, id FROM news ORDER BY id DESC LIMIT 0,20”); while($wiersz=mysql_fetch_array($link)) { echo ’

'; echo ‘’.$wiersz[‘title’].’’; //dodawanie hiperłącza do arta. echo ’

'; } } [/code]

Coś takiego ale dawno nie pisałem w php i może być sporo błędów. Ale mechanikę masz…

Musze na dziś kończyć więc dopiero jutro będę mógł coś dopisać.

Dodane 01.05.2010 (So) 22:22

A i uważaj na zagnieżdżenia w echo czyli ’ " " ’ bo nie pamiętam jak to było i może coś wywalić.

@wszerad, skoro “id” było primary key - to chyba musiało być unikalne :x

a co do tworzenia linka, to np.:

echo 'KLIK';[/code]




zaś wyświetlanie (tutaj plik pokaz.php)

[code]<?php require ‘core.php’; if(isset($_GET[‘id’])){ $id=(int)$_GET[‘id’]; $link=mysql_query(“SELECT * FROM news WHERE id=’$id’”); while($wiersz=mysql_fetch_array($link)){ echo $wiersz[‘text’]; } } ?>

O teraz zauważyłem że nie było “while($wiersz=mysql_fetch_array($link))” przy spełnieniu warunku. Co do PK to nie jestem pewien czy masz racje, ta opcja określa tylko co będzie głównym polem do identyfikacji i chyba nie musi mieć opcji AUTO_INCREMENT ani niepowtarzalnej wartości. A to czy będzie w tym czy oddzielnym pliku to już sprawa autora.

Ok super :slight_smile: Linkowanie już działa, jeszcze posiedzę nad wyświetlaniem newsa, bo wyświetla mi się tylko tytuł, a tekst i inne elementy już nie. Po przelinkowaniu wyświetlają się odpowiednie tabelki, ale nie ma treści :slight_smile: Troszkę posiedzę i może coś wyjdzie :wink:

<?

require 'core.php';

$id = $_GET['id'];


if (isset($_GET['id'])) {

    $link = mysql_query("SELECT * FROM news WHERE $id ");

    echo '

'; echo $wiersz[‘title’]; echo ’

'; echo ’

'; echo 'Autor: ‘; echo $wiersz[‘user’]; echo ’ |’; echo ’ Data: '; echo $wiersz[‘date’]; echo ’

'; echo ’
'; echo $wiersz[‘text’]; echo ’
'; echo ’

'; echo 'Źródło: '; echo $wiersz[‘source’]; echo ’

'; echo ’ '; } else { $link = mysql_query(“SELECT title, id FROM news ORDER BY id DESC LIMIT 0,20”); while ($wiersz = mysql_fetch_array($link)) { echo ’

'; echo ‘’ . $wiersz[‘title’] . '’; //dodawanie hiperłącza do arta. echo ’

'; echo $wiersz[‘text’]; } } mysql_close($connection); ?>

[/code] – Dodane 02.05.2010 (N) 10:30 – Gotowe :slight_smile: Bardzo dziękuję za pomoc :slight_smile: Oto cały kod

[code]<? require ‘core.php’; $id = $_GET[‘id’]; if (isset($_GET[‘id’])) { $link = mysql_query(“SELECT * FROM news WHERE id=’$id’”); while ($wiersz = mysql_fetch_array($link)) { echo ’

'; echo $wiersz[‘title’]; echo ’

'; echo ’
'; echo $wiersz[‘text’]; echo ’
'; echo ’

'; echo 'Autor: ‘; echo $wiersz[‘user’]; echo ’ |’; echo ’ Data: '; echo $wiersz[‘date’]; echo ’

'; echo ’

'; echo 'Źródło: '; echo $wiersz[‘source’]; echo ’

'; } } else { $link = mysql_query(“SELECT user, date, text, source, title, id FROM news ORDER BY id DESC LIMIT 0,20”); while ($wiersz = mysql_fetch_array($link)) { echo ’

'; echo ‘’ . $wiersz[‘title’] . '’; //dodawanie hiperłącza do arta. echo ’

'; echo ’
'; echo $wiersz[‘text’]; echo ’
'; echo ’

'; echo 'Autor: ‘; echo $wiersz[‘user’]; echo ’ |’; echo ’ Data: '; echo $wiersz[‘date’]; echo ’

'; echo ’

'; echo 'Źródło: '; echo $wiersz[‘source’]; echo ’

'; echo ’ '; } } mysql_close($connection); ?>

Cóż, polecam więc lekturę manuala. Pole będące kluczem głównym z natury rzeczy jest jednocześnie UNIQUE i NOT NULL - ale jak nie wierzysz, to zrób sobie prostą testową tabelę z jednym polem będącym PRIMARY KEY i spróbuj dodać jakąś dublującą się wartość albo null i zobacz co się stanie :wink:

A może coś Ci się pomieszało z FOREIGN KEY ? Tak czy owak, coś Ci się pomieszało.

Co do AUTO_INCREMENT to zgadza się, że nie musi być (ale gdzie musi?). AI nie ma tu w zasadzie nic do rzeczy - autonumerowanie jest tylko dla wygody. Jak wiesz, ustawiony AI w niczym nie przeszkadza w nadaniu własnej wartości (poza numeracją) …a sam licznik AI też można modyfikować. Samo więc AI nie jest gwarantem unikalności.

Efrin , proszę poprawić temat na bardziej konkretny, obrazujący problem używając opcji EDYTUJ