Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP System News'ów - problemy
Forum PHP.pl > Forum > PHP
Kam1k
Witam, od razu mówię, że cały system NEWS nie jest mój, autorem jest drax. Jednak temat na innym forum nie jest wspierany od kilku lat, ja postanowiłem zobaczyć jak to wszystko działa, nanoszę poprawki i estetykę, jednak nie wszystko działa jak powinno. Od razu mogę także powiedzieć, że moja wiedza na poziomie PHP jest podstawowa. Serwer postawiony na XAMPP, MySQL, Apache etc.

Jednak co do tematu. Problem jest tak, że wyskakują błędy takie jak:

Kod
Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\news\admin.php on line 110
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\news\admin.php on line 112


Ogólnie baza danych jest postawiona jako kamik_news w phpMyAdmin, jednak ten cały Panel Administracyjny nie do końca działa - niby news dodaje, ale już w bazie go nie dodaje.

Tak jak mówiłem jest tu coś, jednak dużo do poprawki i razem z Wami chciałbym to poprawić tak aby to działało, tak aby ktoś z takiego systemu mógł korzystać, tylko trzeba wiele poprawek. Niektóre już naniosłem, ponieważ PHP poszło do przodu i niektóre zmienne jak mysql na mysqli trzeba było pozmieniać - jednak to amatorka to co robię

Liczę na Waszą pomoc (z tego względu że są ograniczenia co do liczby znaków w poście będę musiał troszke podublować odpowiedzi tak aby to wszystko było zgrane z tematem)


Plik config.php
  1. <?php
  2.  
  3. function connect() {
  4.  
  5. $mysqli_server = "localhost";
  6. $mysqli_admin = "root";
  7. $mysqli_pass = "haslo";
  8. $mysqli_db = "kamik_news";
  9.  
  10. @mysqli_connect($mysqli_server, $mysqli_admin, $mysqli_pass)
  11. or die('Blad polaczenia.');
  12.  
  13. @mysqli_select_db($mysqli_db)
  14. or die('Bledna baza danych.');
  15. }
  16.  
  17. ?>


Plik functions.php
  1. <?php
  2.  
  3. function showNews()
  4. {
  5. $sql1 = mysqli_query('SELECT * FROM news ORDER BY id DESC');
  6. while($news = mysqli_fetch_assoc($sql1))
  7. {
  8. $id = $news['id'];
  9.  
  10. $sql2 = mysqli_query('SELECT id FROM comments WHERE post_id=$id');
  11. $nr = mysqli_num_rows($sql2);
  12.  
  13. '<h2>'.$news['tytul'].'</h2>
  14. <h3>'.$news['data'].'</h3>
  15. <p> '.$news['tresc'].'</p>
  16.  
  17. <p align=\'right\'><a href=\'news.php?id='.$news['id'].'
  18.  
  19. \'>Komentarze ['.$nr.']</a>';
  20. }
  21. }
  22.  
  23. ?>


Plik form.php
  1. <?php
  2. #wygląd formularza
  3. #pole z nickiem musi mieć name="name"
  4. #pole z tekstem musi mieć name="message"
  5. #akcja do której formularz prowadzi musi być 'action="'.$adres.'&amp;kom=dodaj"'
  6. '<h4>Skomentuj</h4>
  7. <form action="'.$adres.'&amp;kom=dodaj" method="post">
  8. <label for="name">Nick (wymagane)</label>
  9. <input id="name" name="name" value="Nick" type="text" size="32" />
  10. <label for="message">Wiadomość</label>
  11. <textarea id="message" name="message" rows="10" cols="20" size="255"></textarea>
  12. <input class="button" type="submit" value="Dodaj" />
  13. </form>'
  14. ;
  15. ?>


Plik comment.php
  1. <?php
  2.  
  3. # Plik reprezentuje ogólny wygląd komentarzy. To co jest między {} po while oznacza wygląd jednego komentarza.
  4. #zmienne:
  5. # $nr - Liczba komentarzy
  6. # $adres - adres strony do kotwicy
  7. # $kome['id'] - id komentarza
  8. # $kome['data'] - data dodania komentarza
  9. # $kome['tresc'] - treść komentarza
  10. # $kome['ip'] - IP osoby która komentuje
  11.  
  12. echo '<h4>'.$nr.' wpisów</h4>';
  13. while($kome = mysqli_fetch_assoc($sql2)) {
  14. '<fieldset><legend><a name="comment'.$kome['id'].'" href="'.$adres.'#comment'.$kome['id'].'">'.$kome['autor'].'</a> Pisze:</legend><br/><small>'.$kome['data'].'</small><p>'.$kome['tresc'].'</p></fieldset>';
  15.  
  16. }
  17.  
  18. ?>



Plik news.php
  1. <?php
  2.  
  3. require ('config.php');
  4. $adres = $_SERVER['REQUEST_URI'];
  5. $a = $_GET['kom'];
  6. $id = $_GET['id'];
  7. if(empty($id))
  8. {
  9. header('Location: index.php'); # Przekierowanie, kiedy zmienna $_GET['id'] jest pusta
  10. }
  11. $sql1 = mysqli_query("SELECT * FROM news WHERE id=$id LIMIT 1");
  12. $sql2 = mysqli_query("SELECT * FROM comments WHERE post_id=$id");
  13. $nr = mysqli_num_rows($sql2);
  14. $news = mysqli_fetch_assoc($sql1);
  15.  
  16. echo'<h2>'.$news['tytul'].'</h2>
  17. <h3>'.$news['data'].'</h3>
  18. <p> '.$news['tresc'].'</p>
  19. <p align="right"><a href="news.php?id='.$news['id'].'">Komentarze ['.$nr.']</a>';
  20.  
  21. if(isset($a) && $a == 'dodaj')
  22. {
  23. $nazwa = substr(mysqli_real_escape_string(htmlspecialchars($_POST['name'])),0,32);
  24. $msg = substr(mysqli_real_escape_string(htmlspecialchars($_POST['message'])),0,255);
  25. $data = date("F j, Y , g:i a");
  26. $ip=$_SERVER['REMOTE_ADDR'];
  27. if(empty($_POST['name']) && ($_POST['message']))
  28. {
  29. echo'Wpisz nick i wiadomość';
  30. }
  31. elseif(empty($_POST['name']))
  32. {
  33. echo'Wpisz nick';
  34. }
  35. elseif(empty($_POST['message']))
  36. {
  37. echo'wpisz wiadmość';
  38. }
  39. if(!empty($_POST['name']) && ($_POST['message']))
  40. {
  41. $sql = mysqli_query("INSERT INTO comments VALUES (0,'$id','$nazwa','$data','$msg','$ip')");
  42. }
  43.  
  44. if($sql)
  45. {
  46. header('Location: news.php?id='.$id.'');
  47. }
  48. else echo mysqli_error();
  49. }
  50. if($nr == 0)
  51. {
  52. echo 'Brak komentarzy.<br />';
  53. }
  54. else
  55. {
  56. include 'templates/comment.php';
  57. }
  58.  
  59. include 'templates/form.php';
  60.  
  61. ?>


Plik admin.php
  1. <?php
  2. error_reporting (E_ALL ^ E_NOTICE);
  3.  
  4. ///////////////////////////////////////////////////////////////////////////////////////
  5.  
  6. $user = 'test';
  7. $haslo = 'test';
  8. $cookie = hash(sha512, $haslo);
  9.  
  10. ///////////////////////////////////////////////////////////////////////////////////////
  11.  
  12. $a = $_GET['id'];
  13. $b = $_GET['nr'];
  14. $c = $_GET['co'];
  15. $d = $_GET['n'];
  16.  
  17. ///////////////////////////////////////////////////////////////////////////////////////
  18.  
  19. if($_GET['action']=="logout") {
  20.  
  21. setcookie("login", 0, time());
  22.  
  23. } elseif($_GET['action']=="login") {
  24.  
  25. if ($_POST['username']== $user&&$_POST['password']==$haslo) $_SESSION['login']=$cookie;
  26. if (isset($_POST['zapamietaj'])) setcookie("login", $cookie, time()+60*60*24*31, NULL, NULL, NULL, TRUE); header('Location: admin.php'); exit;
  27. }
  28.  
  29. ///////////////////////////////////////////////////////////////////////////////////////
  30.  
  31. if ($_SESSION['login'] != $cookie AND $_COOKIE['login'] != $cookie) {
  32.  
  33. die('<html>
  34. <head>
  35. <meta charset="UTF-8">
  36. <title>System newsów</title>
  37. </head>
  38. <body class="log">
  39. <fieldset class="login"><form method="POST" action="?action=login">
  40. <label for="username">Nazwa użytkownika</label><input type="text" id="username" name="username" size="20" />
  41. <label for="password">Hasło</label><input id="password" name="password" type="password" size="20" />
  42. <label for="zapamietaj">Zapamiętaj logowanie</label><input id="zapamietaj" name="zapamietaj" type="checkbox"/>
  43. <input type="submit" value="Loguj">
  44. </form>
  45. </fieldset></body></html>');
  46. }
  47.  
  48. ///////////////////////////////////////////////////////////////////////////////////////
  49.  
  50. require ('config.php');
  51.  
  52. echo'<div style="width:800px;margin:20px auto;"><div style="float:left;"><a href="admin.php?id=dodaj">Dodaj Newsa</a><br><a href="admin.php?id=pokaz">Zarządzaj Newsami</a><br><a href="admin.php?action=logout">Wyloguj</a></div><div style="float:right;">';
  53.  
  54. ///////////////////////////////////////////////////////////////////////////////////
  55.  
  56. if (isset($a) && $a == 'add') {
  57.  
  58. $tytul = $_POST['tytul'];
  59. $tresc = $_POST['tresc'];
  60. $data = date ("F j, Y , g:i a");
  61.  
  62. mysqli_query("INSERT INTO news VALUES(0,'$tytul','$tresc','$data')");
  63. echo '<fieldset><legend>Udana Akcja</legend>Pomyślnie dodałem newsa o tytule: <b>'.$tytul.'</b> i o treści: <b>'.$tresc.'</b></fieldset>';
  64.  
  65. } elseif(isset($a) && $a=='usun' && isset($b)) {
  66.  
  67. $sql = mysqli_query("DELETE FROM news WHERE id='$b'");
  68. $sql = mysqli_query("DELETE FROM comments WHERE post_id='$b'");
  69. if($sql)echo '<fieldset><legend>Udana Akcja</legend>Pomyślnie usunąłem newsa numer '.$b.' oraz komentarze do niego!</fieldset>';
  70. else echo '<fieldset><legend>Akcja Nie udana</legend>Nie udało się usunąć newsa<br> '.mysql_error().'</fieldset>';
  71.  
  72. }
  73.  
  74. ///////////////////////////////////////////////////////////////////////////////////////
  75.  
  76. if (isset($a) && $a == 'dodaj') {
  77.  
  78. echo '<fieldset><legend>Dodaj Newsa</legend>';
  79. echo '<form method="POST" action="admin.php?id=add">
  80. <label for="tytul">Tytuł:</label><input id="tytul" type="text" name="tytul" size="64"><br>
  81. <label for="tresc">Tresć:</label><textarea id="tresc" rows="5" name="tresc" cols="42"></textarea><br>
  82. <input type="submit" value="Dodaj"></form></fieldset>';
  83. }
  84.  
  85. ///////////////////////////////////////////////////////////////////////////////////////
  86.  
  87. if (isset($a) && $a=='edytuj' && isset($b))
  88. {
  89. $link=mysqli_query("SELECT * FROM news WHERE id='$b'");
  90. $wiersz=mysqli_fetch_array($link, MYSQL_ASSOC);
  91.  
  92. echo '<fieldset><legend>Edytuj Newsa</legend><br>';
  93. echo '<form method="POST" action="admin.php?id=wyedytuj&amp;nr='.$wiersz['id'].'">
  94. <label for="tytul">Tytuł:</label><input id="tytul" type="text" name="tytul" size="64" value="'.$wiersz['tytul'].'"><br>
  95. <label for="tresc">Tresć:</label><textarea id="tresc" rows="5" name="tresc" cols="42">'.$wiersz['tresc'].'</textarea><br>
  96. <input type="submit" value="Edytuj">
  97. </form></fieldset>';
  98. }
  99.  
  100. ///////////////////////////////////////////////////////////////////////////////////////
  101.  
  102. if(isset($a) && $a=='pokaz') {
  103.  
  104. echo '<fieldset><legend>Lista Newsów:</legend><br>';
  105. $link=mysqli_query('SELECT * FROM news ORDER BY id desc');
  106.  
  107. while($wiersz=mysqli_fetch_array($link, MYSQL_ASSOC)) {
  108.  
  109. $numer = $wiersz['id'];
  110. $sql = mysqli_query("SELECT id FROM comments WHERE post_id='$numer'");
  111. $nr = mysql_num_rows($sql);
  112. echo $wiersz['tytul'].' - '.$wiersz['data'].'| <a href="admin.php?id=edytuj&amp;nr='.$wiersz['id'].'">Edytuj</a> | <a href="admin.php?id=usun&amp;nr='.$wiersz['id'].'">Usuń</a> | <a href="admin.php?id=komentarze&amp;nr='.$numer.'">Zarządzaj Komentarzami['.$nr.']</a><br>';
  113. }
  114.  
  115. } elseif(isset($a) && $a=='komentarze' && isset($b)) {
  116.  
  117. $sql = mysqli_query("SElECT * FROM comments WHERE post_id='$b'");
  118.  
  119. while($wiersz = mysqli_fetch_assoc($sql)) {
  120. echo'<fieldset><legend>'.$wiersz['id'].'. Autor: '.$wiersz['autor'].' Data:'.$wiersz['data'].'</legend><p><strong>IP:</strong> '.$wiersz['ip'].'</p><p>'.$wiersz['tresc'].'</p><p><a href="admin.php?id=komentarze&amp;co=usun&amp;n='.$wiersz['id'].'">Usuń Komentarz </a></p></fieldset>';
  121. }
  122.  
  123. } elseif(isset($a) && $a=='komentarze' && isset($c) && $c=='usun' && isset($d)) {
  124.  
  125. $sql = mysqli_query("DELETE FROM comments WHERE id='$d'");
  126.  
  127. if($sql)
  128. echo '<fieldset><legend>Udana Akcja</legend>Pomyślnie usunąłem komentarz!</fieldset>';
  129. else
  130. echo'<fieldset><legend>Akcja Nie udana</legend>'.mysql_error().'</fieldset>';
  131.  
  132. } elseif(isset($a) && $a=='wyedytuj' && isset($b)) {
  133.  
  134. $tytul=$_POST['tytul'];
  135. $tresc=$_POST['tresc'];
  136.  
  137. $sql = mysqli_query("UPDATE news SET tytul='$tytul' tresc='$tresc' WHERE id='$b'");
  138.  
  139. if($sql)
  140. echo '<fieldset><legend>Udana Akcja</legend>Pomyślnie wyedytowałem newsa! <br> Jego nowy tytuł to: <b>'.$tytul.'</b>, a treść: <b>'.$tresc.'</b></fieldset>';
  141. else echo '<fieldset><legend>Akcja Nie udana</legend>Nie udało się edytować newsa<br> '.mysql_error().'</fieldset>';
  142. }
  143.  
  144. echo'</div></div>';
  145.  
  146. ?>


Czekam na waszą pomoc - łatki, poprawki, rozwiązywanie problemów, tak aby to pięknie funkcjonowało smile.gif
To będzie też dobry temat dla tych co szukają takiego systemu, odświeżonego z tego roku wink.gif
Tomplus
Zamiast wrzucać tuzin skryptów, to wystarczyło umieścić fragment kodu gdzie jest błąd, a błąd jest tylko w skrypcie admin.php w linii 110.
Jednakże sugerując się resztą kodu. Pewnie gdybyś w funkcji connect() wyłączył @ to miałbyś więcej błędów.
Sprawdź czy połącznie z bazą jest poprawne, a jeżeli nie... to zapraszam do manuala: http://php.net/manual/en/mysqli.query.php pozycja Procedural style
plej
http://php.net/manual/en/mysqli.real-escape-string.php
http://php.net/manual/en/mysqli.query.php


  1. $cos = mysqli_query($poloczenie, $zapytanie);
  2. $cos = mysqli_real_escape_string($polaczenie, $zmienna);


W powyższych linkach masz jak pisać w mysqli. Do niektórych funkcji musisz dodać połączenie z bazą.
Tomplus
W sumie dalem mu to samo, tylko chciałbym aby zaczął uczyć się obsługi manuala PHP.
Kam1k
No dobrze, jednak w admin.php w linii 110 kod jest wg. wzoru, którego podaliście

  1. $link = mysqli_query('SELECT * FROM news ORDER BY id desc');


Zrobiłem zgodnie z manulem nowy config.php

  1. <?php
  2.  
  3. $mysqli = new mysqli("localhost", "root", "haslo", "kamik_news");
  4.  
  5. // Sprawdzam połączenie
  6. if ($mysqli->connect_errno) {
  7. printf("Blad Polaczenia, kod bledu: %s\n", $mysqli->connect_error);
  8. exit();
  9. }
  10.  
  11. $mysqli->close();
  12. ?>


Tak samo, mam błąd gdy chce dodać news'a

  1. Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\news\admin.php on line 69


Jednak wiadomość pokazuje że dodało news'a, a w bazie nie widnieje
plej
jeszcze raz ci dam linka:
http://php.net/manual/en/mysqli.query.php

Procedural style
  1. mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )


tak masz w manualu.

Nie zrobiłeś jak ci mówiliśmy bo masz dalej to samo :
  1. $link = mysqli_query('SELECT * FROM news ORDER BY id desc');


a powyżej z manuala widać że musisz dać 2 parametry. Nawet błąd ci o tym mówi.

wystarczy:
  1. $link = mysqli_query($mysqli, 'SELECT * FROM news ORDER BY id desc');


Teraz widzisz o co chodzi? w zwykłym mysql nie musiałeś podawać połączenia do zapytania, ale w mysqli w niektórych funkcjach musisz.


Kam1k
Pomogło. Jednak pojawił się kolejny błąd

  1. Warning: mysqli_query(): Couldn't fetch mysqli in C:\xampp\htdocs\news\admin.php on line 97


Linia 97:
  1. mysqli_query($mysqli, 'INSERT INTO news VALUES(0, \'$tytul\', \'$tresc\', \'$data\')');


Plus dodatkowo dostaje komunikat zwrotny, że news został dodany - jednak to tylko "goły komunikat", nic nie wchodzi do bazy.
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.