Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z systemem newsów
Forum PHP.pl > Forum > PHP
jasiek65
Otóż chciałem zrobić jak najprostszy system newsów i znalazłem ten artykuł
Więc zrobiłem wszystko jak tam jest napisane utworzyłęm tabele i reszte.
sprawdzam skrypt a tu nie działa
sprawdzałem po kolei pliki za pomocą tej funkcji
  1. ini_set('display_errors' , 'On');



dodaj html:

  1. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  2.  
  3. <title>Dodaj newsa</title>
  4. </head>
  5. <h2>Dodawanie newsa:</h2>
  6. <form action="dodaj.php" method=post>
  7. tytuł: <input type="text" name="tytul">
  8. <br/><br/>skrót: </br><textarea name="skrot" rows="7" cols="50"></textarea>
  9. <br/><br/>treść: </br><textarea name="tresc" rows="20" cols="50"></textarea>
  10. <br/><br/><input type="submit" value="Dodaj"></form>
  11. </body>
  12. </head>


Dodaj php:
  1. <?php
  2. mysql_connect('localhost', 'nazwa_uzytkownika' , 'haslo_uzytkownika');
  3. mysql_select_db("newsy");
  4. $query = mysql_query("insert into newsy values('', '$tytul', '$skrot', '$tresc', now() )");
  5. echo 'Dziękujemy za dodanie newsa';
  6. ?>

taki błąd

Kod
Notice: Undefined variable: tytul in D:\WebServ\wwwroot\htdocs\dodaj.php on line 5

Notice: Undefined variable: skrot in D:\WebServ\wwwroot\htdocs\dodaj.php on line 5

Notice: Undefined variable: tresc in D:\WebServ\wwwroot\htdocs\dodaj.php on line 5




news.php

  1. <?php
  2. mysql_connect('localhost', 'nazwa_uzytkownika' , 'haslo_uzytkownika');
  3. mysql_select_db("newsy");
  4. $query = mysql_query("select * from newsy where id='$id'");
  5. $rekord = mysql_fetch_array($query);
  6. $tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];
  7. echo $tekst;
  8. ?>


Kod
Notice: Undefined variable: id in D:\WebServ\wwwroot\htdocs\news.php  on line 5



z tego co wywnioskowałem to błąd połączenia z bazą
jak mam to naprawić?
prosze o pomoc


aha wypełniłem dane sql jak się dowiem jak naprawić skrypt to zrobie plik config.php i tam dam dane bazy
tehaha
a z czego wywnioskowałeś, że to problem z połączeniem? undefined variable, to po tłumaczeniu znaczy: niezdefiniowana zmienna, mogłeś to sobie nawet w Google wpisać, używasz zmiennych $tytul, $skrot i $tresc, a skad je bierzesz? przecież skrypt nie wie skąd są te zmienne, a jeżeli Ci to działa to tylko dlatego, że masz włączone global registers, jeżeli przesyłasz dane postem, to musisz się do nich odwołać:
  1. $tytul = $_POST['tytul'];
jasiek65
w dodaj.php zmieniłęm to ale np w
news.php

  1. <?php
  2. ini_set('display_errors' , 'On');
  3. mysql_connect('localhost', 'login' , 'hasło');
  4. mysql_select_db("newsy");
  5. $query = mysql_query("select * from newsy where id='$id'");
  6. $rekord = mysql_fetch_array($query);
  7. $tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];
  8. echo $tekst;?>

co zrobić?
tehaha
a skąd się bierze $id? najlepiej zwracaj na to uwagę bo potem wrzucisz stronę na prawdziwy serwer i się nagle okaże, że nic nie działa, bo na praktycznie wszystkich serwerach global registers jest na off
jasiek65
wszystkie musze opisywać?
tehaha
tak, na żadnym normalnym serwerze to nie będzie działać i lepiej rób to od razu, bo potem będzie trudniej poprawiać cały skrypt
jasiek65
czyli id czemu ma się równać ?


$id =
tehaha
to zależy skąd ona pochodzi jeżeli przesyłasz ją przy pomocy url czyli np. index.php?id=4 to odwołasz się do niej:
  1. $id = $_GET['id'];
, jeżeli przesyłasz ją przy pomocy formularza to w zależności od ustawionej metody przesyłania odwołujesz się tablicą $_POST lub $_GET
jasiek65
wyciągam ją z bazy sql
tehaha
jak z bazy wyciągasz jak nie ma wcześniej żadnego zapytania
jasiek65
id int(11)

myślałem ze przeczytałeś artykuł ja jestem zielony z mysql

  1. id int(11) Nie Przeglądaj różne wartości Zmień Usuń Podstawowy Jednoznaczny Indeks Pełny tekst
  2. tytul tinytext latin1_swedish_ci Nie Przeglądaj różne wartości Zmień Usuń Podstawowy Jednoznaczny Indeks Pełny tekst
  3. skrot text latin1_swedish_ci Nie Przeglądaj różne wartości Zmień Usuń Podstawowy Jednoznaczny Indeks Pełny tekst
  4. tresc text latin1_swedish_ci Nie Przeglądaj różne wartości Zmień Usuń Podstawowy Jednoznaczny Indeks Pełny tekst
  5. DATA datetime Nie
tehaha
chodzi o to, że w tutaj:
  1. <?php
  2. ini_set('display_errors' , 'On');
  3. mysql_connect('localhost', 'login' , 'hasło');
  4. mysql_select_db("newsy");
  5. $query = mysql_query("select * from newsy where id='$id'");
  6. $rekord = mysql_fetch_array($query);
  7. $tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];
  8. echo $tekst;?>

w zapytaniu sql w warunku WHERE użyłeś zmiennej $id, a nie masz jej wcześniej zdefiniowanej dlatego dostajesz notice
jasiek65
to jak ją zdefiniować ?
tehaha
a w jaki sposób przesyłasz ją do skryptu? a to zapytanie pobiera Ci cokolwiek? zrób:
  1. <?php
  2. ini_set('display_errors' , 'On');
  3. mysql_connect('localhost', 'login' , 'hasło');
  4. mysql_select_db("newsy");
  5. $query = mysql_query("select * from newsy where id='$id'");
  6. echo $query;
  7. $rekord = mysql_fetch_array($query);
  8. $tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];
  9. echo $tekst;?>
jasiek65
Kod
Notice: Undefined variable: id in \news.php  on line 10
Resource id #3


zmienna nadal nie zdefiniowana a newsów też mi nie pobiera z bazy
tehaha
to może inaczej: co Ty właściwie chcesz zrobić tym zapytaniem? napisałeś zapytanie: "Wybierz rekordy z wszystkich kolumn tabeli newsy, gdzie id = $id", no to skoro chcesz pobrać newsy przypisane do konkretnego numeru ID, to to ID musi skądś pochodzić. A jeżeli chcesz tym zapytaniem pobrać wszystkie newsy to robisz:
  1. $query = mysql_query("select * from newsy");
a potem pętlą while odbierasz wyniki
jasiek65
od tego jest przecież
  1. $tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];


ja chcę zrobić jak najprostszy system newsów oparty o sql

Kod
Wymagania
Newsy będą opierały się na bazie MySQL, więc musisz posiadać serwer z dostępem do takowej. Oprócz tego nic specjalnego nam nie będzie potrzebne.

Projekt
Przed zabraniem się do pisania, powinniśmy stworzyć ogólny projekt skryptu, dzięki temu od początku będziemy wiedzieli jak wszystko ma wyglądać. No więc na stronie głównej będą wyświetlane początki trzech ostatnich newsów i link 'czytaj więcej' po którego kliknięciu użytkownik zostanie przeniesiony do pełnej treści newsa. News będzie składał się z tytułu, treści i daty utworzenia.

Zaczynamy!

Baza danych
Zanim zaczniemy pisać kod, stworzymy bazę danych. Jak już wspomniałem będzie to baza MySQL. Otwieramy więc phpmyadmina i tworzymy bazę - nazwijmy ją 'newsy', następnie w tej bazie stwórzmy tabelę z pięcioma polami (w nawiasach podaję typ): id (int, opcja: auto_increment i indeks), tytul (tinytext), skrot (text), tresc (text) i data (datetime) - tabelę również nazywamy 'newsy'. Oki, tabela jest gotowa, ale żeby było widać efekty w czasie pisania musimy mieć już kilka gotowych newsów. Dodaj więc ręcznie kilka newsów.

Tworzymy pliki
Oki, baza już jest, teraz stwórz katalog, gdzie będą wszystki pliki skryptu i nadaj mu nazwę 'newsy'. W tym katalogu utwórz cztery pliki: include.php, news.php, dodaj.php, dodaj.htm. Gdy wszystko jest gotowe możemy przejść do tego, co programiści lubią najbardziej - kodzenia!

Piszemy kod!
Zaczniemy od wypełnienia pliku include.php. Ma on za zadanie wyświetlenie trzech ostatnich newsów. Otwórz więc ten plik i wpisz taki kod:

<?php
mysql_connect('localhost', 'nazwa_uzytkownika' , 'haslo_uzytkownika');
mysql_select_db("newsy");
$query = mysql_query("select * from newsy order by data desc limit 0,3");
while($rekord = mysql_fetch_array($query))
{
$tekst .= '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[2].'<br/><a href="news.php?id='.$rekord[0].'">czytaj wiecej...</A>';
}
echo $tekst;
?>

Odpal ten plik na swoim komputerze (musisz mieć PHP i MySQL) oczywiście zamień: nazwa_uzytkownika na twój nick do MYSQL (ten sam jest do phpmydmina), a haslo_uzytkownika na haslo do mysql(te samo jest do phpmyadmina). Powinny Ci się pojawić trzy najnowsze newsy i link czytaj więcej. Przeanalizujmy teraz ten kod:

Na początku łączymy się z bazą i wybieramy bazę newsy oraz zaznaczamy 3 ostatnie rekordy w odwróconej kolejności układane według 'data' z tabeli newsy. Następnie je wyświetlamy(najpierw zapisuje wszystko do jednej zmiennej, a potem dopiero wyświetlam, powodem jest szybkość działania skryptu). W linku 'czytaj więcej' zmienna 'id' identyfikuje news.

Zabierzmy się teraz za plik news.php. Odpowiada on za wyświetlenie treści całego newsa i otwiera się po kliknięciu linka 'czytaj więcej'. Otwórz wieć plik i wklep taki kod:

<?php
mysql_connect('localhost', 'nazwa_uzytkownika' , 'haslo_uzytkownika');
mysql_select_db("newsy");
$query = mysql_query("select * from newsy where id='$id'");
$rekord = mysql_fetch_array($query);
$tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];
echo $tekst;
?>
Spróbuj teraz kliknąć link 'czytaj więcej' - powinien pojawić się cały news. Tak jak ostatnio przeanalizujemy kod.

Na początku tak samo łączymy się z bazą i wybieramy bazę danych. Następnie zaznaczamy rekord, którego 'id' jest takie samo jak tego newsa, którego link 'czytaj więcej' kliknęliśmy. Następnie zapisujemy tekst do zmiennej i wyświetlamy ją.

Teraz otwórzmy plik dodaj.htm. Stworzymy w nim formularz, dzięki któremu będziemy mogli w łatwy sposób dodawać newsy. Wpisz więc w nim taki kod:

<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">

<title>Dodaj newsa</title>
</head>
<body>
<h2>Dodawanie newsa:</h2>
<form action="dodaj.php" method=post>
tytuł: <input type="text" name="tytul">
<br/><br/>skrót: </br><textarea name="skrot" rows="7" cols="50"></textarea>
<br/><br/>treść: </br><textarea name="tresc" rows="20" cols="50"></textarea>
<br/><br/><input type="submit" value="Dodaj"></form>
</body>
</head>
Jest to zwykły formularz w HTML'u i nie będę go wyjaśniał. Ważne jest tylko to, że właściwość 'name' w polach formularza to jest też nazwa zmiennej, która przechowuje wartość pola. W formularzu nie ma pól 'id' i 'data' ponieważ będą one uzupełniane automatycznie.

Czas teraz na ostatni plik. Jest to skrypt obsługujący formularz dodaj.htm. Otwórz plik dodaj.php i wpisz kod:

<?php
mysql_connect('localhost', 'nazwa_uzytkownika' , 'haslo_uzytkownika');
mysql_select_db("newsy");
$query = mysql_query("insert into newsy values('', '$tytul', '$skrot', '$tresc', now() )");
echo 'Dziękujemy za dodanie newsa';
?>
Prosty skrypt. Na początku jak zawsze łączymy się z bazą i wybieramy odpowiednią bazę. W następnej linijce za pomocą polecenia 'insert' dodajemy do tabeli newsy odpowiednie wartości: pierwsze pole (id) zostawiamy puste, ponieważ tworząc bazę zaznaczyliśmy opcje auto_uzupełniania, w następnym polu wpisujemy wartość zmiennej 'tytul' z formularza, w następnym wartość 'skrot', a w następnym 'tresc', na samym końcu do ostatniego pola (data) wpisujemy wartość funkcji now() - czyli aktualny czas. Na końcu skryptu wyświetlamy tekst. GOTOWE;)

Jak widzisz prosty system newsów jest wręcz banalny do napisania. Jak widzisz system jest naprawdę bardzo prosty i zachęcam Cię żebyś go trochę rozbudował, będzie to dobra lekcja PHP.

tehaha
ok teraz jak dałeś artykuł to widzę : "W linku 'czytaj więcej' zmienna 'id' identyfikuje news."
czyli w tym kodzie na samej górze musisz dać :
  1. $id = $_GET['id'];
ponieważ tablicy $_GET używa się do odbierania zmiennych przesyłanych za pomocą url
jasiek65
dalej jest napisane że zmienna id niezidentyfikowana


czyli jak to całe ma być poprawnie?
tehaha
najlepiej tak:
  1. <?php
  2. ini_set('display_errors' , 'On');
  3. mysql_connect('localhost', 'login' , 'hasło');
  4. mysql_select_db("newsy");
  5. if(isset($_GET['id']))
  6. {
  7. $id = mysql_real_escape_string($_GET['id']);
  8. $query = mysql_query("select * from newsy where id='$id'");
  9. $rekord = mysql_fetch_array($query);
  10. $tekst = '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[3].'<br/><br/>'.$rekord[4];
  11. echo $tekst;
  12. }
  13. ?>
jasiek65
Pusto
tehaha
eh, bo to jest podstrona newsa, i zadziała jeśli wejdziesz na nią z linku zawierającego zmienną id, zrobiłeś tam sobie podstronę z tymi 3 ostatnimi newsami i każdy ma link "czytaj więcej" zawierający id, jak z tego linku wejdziesz to przesyłasz w url zmienną id, którą odbierasz tablicą $_GET = "Spróbuj teraz kliknąć link 'czytaj więcej' - powinien pojawić się cały news. Tak jak ostatnio przeanalizujemy kod."

najlepiej jakbyś sobie znalazł jakiś lepszy kurs, bo ten słaby jest, żadnego wytłumaczenia co jak działa i skąd się bierze....
jasiek65
w start.php tam gdzie mam
  1. <?php
  2. ini_set('display_errors' , 'On');
  3.  
  4. mysql_connect('localhost', 'root' , '');
  5. mysql_select_db("newsy");
  6. $query = mysql_query("select * from newsy order by data desc limit 0,3");
  7. while($rekord = mysql_fetch_array($query))
  8. {
  9. $tekst .= '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[2].'<br/><a href="news.php?id='.$rekord[0].'">czytaj wiecej...</A>';
  10. }
  11. echo $tekst;
  12. ?>






Kod
Notice: Undefined variable: tekst in \start.php  on line 11



zidentyfikowałem zmienną ale dalej to samo
tehaha
a tak?
  1. <?php
  2. ini_set('display_errors' , 'On');
  3.  
  4. mysql_connect('localhost', 'root' , '');
  5. mysql_select_db("newsy");
  6. $query = mysql_query("select * from newsy order by data desc limit 0,3");
  7. while($rekord = mysql_fetch_array($query))
  8. {
  9. $tekst .= '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[2].'<br/><a href="news.php?id='.$rekord[0].'">czytaj wiecej...</A>';
  10. echo $tekst;
  11. }
  12.  
  13. ?>
jasiek65
pusto
tehaha
pusto bo pewnie się z bazą nie połączyć,mysql_connect() mas trzeci parametr pusty, nie wpisałeś hasła:
  1. <?php
  2. ini_set('display_errors' , 'On');
  3.  
  4. mysql_connect('localhost', 'root' , '') or die("nie udało się połączyć z bazą.");
  5. mysql_select_db("newsy");
  6. $query = mysql_query("select * from newsy order by data desc limit 0,3");
  7. while($rekord = mysql_fetch_array($query))
  8. {
  9. $tekst .= '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[2].'<br/><a href="news.php?id='.$rekord[0].'">czytaj wiecej...</A>';
  10. echo $tekst;
  11. }
  12.  
  13. ?>
jasiek65
nie działa pusto a jak jest zero rekordów do bazy to może być to tym spowodowane?
tehaha
smile.gif tak jak nie ma rekordów w bazie to zapytanie niczego nie pobierze
jasiek65
ale dodaje i nic w czym tkwi bład?
tehaha
używając funkcji mysql_num_rows(), dowiesz się czy zostały zwrócone rekordy, jeżeli wyświetli się 0 to prawdopodobnie nie ma nic w tabeli , oczywiście zakładając, że połączyłeś się z bazą.
  1. <?php
  2. ini_set('display_errors' , 'On');
  3.  
  4. mysql_connect('localhost', 'root' , '') or die("nie udało się połączyć z bazą.");
  5. mysql_select_db("newsy");
  6. $query = mysql_query("select * from newsy order by data desc limit 0,3");
  7. while($rekord = mysql_fetch_array($query))
  8. {
  9. $tekst .= '<b><h3>'.$rekord[1].'</h3></b>'.$rekord[2].'<br/><a href="news.php?id='.$rekord[0].'">czytaj wiecej...</A>';
  10. echo $tekst;
  11. }
  12.  
  13. ?>
jasiek65
czyli już wiemy w czym tkwi błąd ale to co jest złego w bazie albo w dodaj.php

  1. <?php
  2. $tytul = $_POST['tytul'];
  3. $skrot = $_POST['skrot'];
  4. $tresc = $_POST['tresc'];
  5. mysql_connect('localhost', 'nazwa_uzytkownika' , 'haslo_uzytkownika');
  6. mysql_select_db("newsy");
  7. $query = mysql_query("insert into newsy values('', '$tytul', '$skrot', '$tresc', now() )");
  8. echo 'Dziękujemy za dodanie newsa';
  9. ?>



czy coś z bazą?
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.