Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze skryptem
Forum PHP.pl > Forum > PHP
Salur
Witam, mam problem ze skryptem dodawania/usuwania/edytowania newsów na stronie wink.gif
A więc tak, skrypt wyswietlam w panelu z folderu /pages.
Gdy kliknę dodaj wyswietla sie białe tło.
Dodam jeszcze że głowna strona dodawania newsów to : localhost/panel/index.php?s=admin

Kod:
Kod
<?
session_start();
if(isset($_POST['pass'])) //Haslo przechowujemy w sesjach
{
        if($_POST['pass']=='haselko')
        {
        $_SESSION['admin']='ok';
        }
}
if((!isset($_SESSION['admin']) || $_SESSION['admin']!='ok') && $_GET['admin']!='wyloguj')
{
echo '<form method="POST" action="admin.php?main=admin">
        <p align="center">
        Niestety nie jestes zalogowany.<br> Proszę podac haslo:<br>
        <input type="password" name="pass" size="20"><br>
        <input type="submit" value="OK"></p>
</form>';
}
if(isset($_GET['admin']) && $_GET['admin']=='wyloguj')
{
$_SESSION['admin']='';
echo 'Nastapilo wylogowanie!<br> Przejdz do <a href="/index.php">strony glownej</a>...';
}
if($_SESSION['admin']=='ok')
{
$uchwyt=mysql_connect('xxxx','root','xxxxx')
        or die('Nieudane polaczenie z baza danych...');
mysql_select_db('news')
        or die('Nie udalo sie wybrac bazy danych...');
        
        echo '<b>Newsy:</b><br>';
        $link=mysql_query('SELECT * FROM news ORDER BY id desc');
        while($wiersz=mysql_fetch_array($link))
        {
        echo '<b>'.$wiersz['tytul'].'</b>';
        echo ' - ';
        echo $wiersz['data'];
        echo ' - ';
        echo '<a href="?s=admin.php?newsy=edytuj&id='.$wiersz['id'].'">Edytuj</a>';
        echo ' - ';
        echo '<a href="?s=admin.php?newsy=usun&id='.$wiersz['id'].'">Usun</a>';
        echo "<br>\n";
        }
        echo '<b>Dodaj newsa:</b><br>';
        echo '<form method="POST" action="?s=admin.php?newsy=dopisz">
                                Tytul:<br>
                                <input type="text" name="tytul" size="64"><br>
                                Tresc:<br>
                                <textarea rows="5" name="tresc" cols="42"></textarea><br>
                                <input type="submit" value="DODAJ">
        </form>';
        if(isset($_GET['newsy']) && $_GET['newsy']=='edytuj' && isset($_GET['id']))
        {
        $id=$_GET['id'];
        $link=mysql_query("SELECT * FROM news WHERE id='$id'");
        $wiersz=mysql_fetch_array($link);

        echo '<b>Edytuj newsa:</b><br>';
        echo '<form method="POST" action="?s=admin.php?newsy=wyedytuj&id='.$wiersz['id'].'">
                                Tytul:<br>
                                <input type="text" name="tytul" size="64" value="'.$wiersz['tytul'].'"><br>
                                Tresc:<br>
                                <textarea rows="5" name="tresc" cols="42">'.$wiersz['tresc'].'</textarea><br>
                                <input type="submit" value="EDYTUJ">
        </form>';
}
elseif(isset($_GET['newsy']) && $_GET['newsy']=='dopisz')
{
        $tytul=$_POST['tytul'];
        $tresc=$_POST['tresc'];
        $data=date('d.m.Y, H:i');

        mysql_query("INSERT INTO news VALUES(0,'$tytul','$tresc','$data')");
        echo 'Pomyslnie dodalem newsa o tytule: <b>'.$tytul.'</b> i o treści: <b>'.$tresc.'</b> z datą'.$data.'.';

}
elseif(isset($_GET['newsy']) && $_GET['newsy']=='wyedytuj' && isset($_GET['id']))
{
        $tytul=$_POST['tytul'];
        $tresc=$_POST['tresc'];
        $id=$_GET['id'];

        mysql_query("UPDATE news SET tytul='$tytul' tersc='$tresc' WHERE id='$id'");
        echo 'Pomyslnie wyedytowalem newsa! <br> Jego nowy tytul to: <b>'.$tytul.'</b>, a tresc: <b>'.$tresc.'</b>';

}
elseif(isset($_GET['newsy']) && $_GET['newsy']=='usun' && isset($_GET['id']))
{
        $id=$_GET['id'];

        mysql_query("DELETE FROM news WHERE id='$id'");
        echo 'Pomyslnie usunalem newsa numer '.$id.'!';

}
?>

<?
}
?>
Turson
Biała strona mówi jasno, włącz raportowanie błędów. Temat: Jak poprawnie zadac pytanie
Forti
1. włącz wyświetlanie błędów.

na początku pliku index.php daj:



2. Ten kod jest brzydki.

  1. elseif(isset($_GET['newsy']) && $_GET['newsy']=='dopisz')
  2. {
  3. $tytul=$_POST['tytul'];
  4. $tresc=$_POST['tresc'];
  5. $data=date('d.m.Y, H:i');
  6.  
  7. mysql_query("INSERT INTO news VALUES(0,'$tytul','$tresc','$data')");
  8. echo 'Pomyslnie dodalem newsa o tytule: <b>'.$tytul.'</b> i o treści: <b>'.$tresc.'</b> z datą'.$data.'.';
  9.  
  10. }


dlaczego w VALUES masz 0? Usuń do insert i zobacz czy wyświetla tobie echo. Następnie włącz wyświetlanie błędów i sprawdź co się dzieje.


edit: o Turson mnie ubiegł wink.gif
Salur
Po włączeniu raportowania błędów nic nie wywala, jedynie to:
Screen

Gdy wchodzę w zakładkę np. edytuj nic się nie pokazuje:

Screen


//

Usunąłem i nie wyswietla z echo.
Turson
Wklej w google tekst komunikatu a zobaczysz milion odpowiedzi
Salur
Powiem Ci ze chyba to nie tego wina bo jak skrypt wrzucę do głownego katalogu to wszystko działa, co prawda wywala NOTICE ale działa.
SpiritCode
Cytat
mysql_query("INSERT INTO news VALUES(0,'$tytul','$tresc','$data')");


Radziłbym zwrócić na to uwagę.
sprawdź czy nie duplikujesz rekordu o id = 0. wink.gif
Salur
Przy kliknięciu na EDYTUJ przy danym newsie prawidłowo rozpoznaje id.
Kod
localhost/panel/admin.php?newsy=edytuj&id=5
SpiritCode
Spoko ale zacząłeś o dodawaniu newsa i tym, że dodanie newsa wyświetla Ci białą stronę.

Z tego co widzę formularz dodawania newsa obsługuje ten fragment skryptu:
  1. elseif(isset($_GET['newsy']) && $_GET['newsy']=='dopisz')
  2. {
  3. $tytul=$_POST['tytul'];
  4. $tresc=$_POST['tresc'];
  5. $data=date('d.m.Y, H:i');
  6.  
  7. mysql_query("INSERT INTO news VALUES(0,'$tytul','$tresc','$data')");
  8. echo 'Pomyslnie dodalem newsa o tytule: <b>'.$tytul.'</b> i o treści: <b>'.$tresc.'</b> z datą'.$data.'.';
  9.  
  10. }


A ten fragment ewidentnie próbuje dodać do bazy rekord o ID 0 (zakładając, że pierwsza kolumna to id a tak zapewne jest).
Dodatkowo dobrym nawykiem jest sprawdzanie czy istnieją dane klucze w tablicy $_POST ale tu już się czepiam tongue.gif
Salur
Czyli co radzisz zrobić?

Jesli plik admin.php (czyli odpowiadające za newsy) jest w głównym katalogu na serwerze wszystko działa (dodawanie, usuwanie, edytowanie).
SpiritCode
Zmienić inserta

Dodaj kolumny(te które uzupełnisz czyli tytuł, treść i datę). ID powinno samo się uzupełnić jeśli dałeś mu atrybut AI.
Przykładowo:
  1. mysql_query("INSERT INTO news(tytul, tresc, data) VALUES('$tytul','$tresc','$data')");


edit: Teraz dopiero przeczytałem Twojego posta. Daj znać czy to coś pomoże. Jeśli nie to znajdzie się inne rozwiązanie wink.gif
Forti
Przecież JA ci napisałęm wyżej na co masz zwrócić uwagę. CZYTAJ co się do Ciebie piszę, kolego.

Jakie kolumny ma tabela news w bazie danych? Ma 4 i pierwsza z nich to ID? Zakład o 100, że duplikujesz ID 0 i dlatego nic nie robi.
Ten plik admin.php próbujesz gdzieś include? Jeżeli tak to duplikujesz session_start();. Turson Ci to juz napisałem.

Naucz się czytać ze zrozumieniem skoro chcesz brać się za programowanie. 90% tej pracy to czytanie - udowodnione już nie jednokrotnie.
SpiritCode
Forti ma rację. Trzeba umieć czytać wink.gif
Salur
Gdy dodałem to:
  1. <?php
  2. ?>
  3. <?PHP include 'admin.php'; ?>


Teraz nic się nie wyświetla.
SpiritCode
Jeżeli w skrypcie includujesz skrypt nie musisz dodatkowo w includowanym dodawać session_start(); bo sesję rozpoczyna skrypt nadrzędny jeśli to w nim zapiszesz.
Ale na dobrą sprawę drugi session_start w tym przypadku jest ignorowany.
Tylko po co?
Salur
Ja tego nie chce includować, tylko sprawdziłem czy to coś da.

Daje link do panelu na stronie, zobaczycie jak to działa.
STRONA

Hasło to : test
Forti
Twoja strona wogole nie działa.

Zrobiłeś to z tym insert do bazy? Aby nie dodawało tego 0 ;]
Salur
Literówka była, juz działa.

//Edit
Tak, zrobiłem ale nadal o samo.
SpiritCode
Jeżeli nie chcesz includować to tego nie rób wink.gif

Wróć do tego co miałeś gdzie działał ci formularz chociaż.

noticem o session_start się nie przejmuj. Jeśli uważasz, ze powinna tam być inicjalizacja sesji to dodaj zamień

w admin.php na


Notice powinien się nie pojawiać.
Salur
Notice się już nie pokazuje wink.gif lecz nadal nic nie działa ;[

Jakieś propozycje?
SpiritCode
Literówka? wink.gif
Formularz podania hasła wysyłał nam hasło do ?main=admin zamiast ?s=admin

edit: Masz źle ustawione atrybuty action. Zmień w formularzu dodania action na:
  1. action = "index.php?s=admin&newsy=dopisz"


a w formularzu podania hasła:
  1. action = "index.php?s=admin"
Salur
Raczek literówek tu nie ma , bo skrypt działa gdy jest w głównym katalogu, a jak chce zeby był w zakładce w to juz nie działa wink.gif Więc skrypt jako skrypt działa.
SpiritCode
Słuchaj. Nie wiem gdzie teraz masz ten skrypt ale zamieniłem sobie action tak jak napisłem wyżej i zalogowało mnie a potem udało mi się dodać newsa bez problemy wink.gif
Pamiętaj, że jeśli w skrypcie dajesz odwołanie do pliku
Kod
"index.php"


to on tego index.php szuka w katalogu w którym się znajduje
Salur
Problem rozwiązany! Dziekuję Ci SpiritCode wink.gif

Miałes rację, była wina źle ustawionego action.

SpiritCode
Do usług biggrin.gif
com
SpiritCode
Cytat
Radziłbym zwrócić na to uwagę.
sprawdź czy nie duplikujesz rekordu o id = 0.


zakładając że to pole jest auto_icrement, a na pewno jest, bo kolega się uczy wiec jak radzą w kursach tak ustawił, to id się automatycznie zwiększy i ustawi na takie jakie wskazuje obecnie licznik ai, wiec nie wprowadzaj tu ludzi w błąd jak sam o tym nie masz pojęcia. Oczywiście można zrobić tak jak zaproponowałeś, ale to co było ustawione nie było błędem, a jedynie wygodą, żeby nie przepisywać wszystkich kolumn niepotrzebnie. No i Forti przegrałeś swój zakład, podstawy, podstawy, podstawy wink.gif
SpiritCode
com Aż sprawdziłem.
Masz rację. Zwracam honor wink.gif
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.