Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP System News'ów - problemy
Kam1k
post 1.06.2017, 14:42:56
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 12.02.2016
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Tomplus
post 1.06.2017, 18:44:10
Post #2





Grupa: Zarejestrowani
Postów: 1 835
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
plej
post 1.06.2017, 19:25:51
Post #3





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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ą.
Go to the top of the page
+Quote Post
Tomplus
post 2.06.2017, 05:39:56
Post #4





Grupa: Zarejestrowani
Postów: 1 835
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


W sumie dalem mu to samo, tylko chciałbym aby zaczął uczyć się obsługi manuala PHP.
Go to the top of the page
+Quote Post
Kam1k
post 2.06.2017, 08:17:40
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 12.02.2016
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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

Ten post edytował Kam1k 2.06.2017, 07:55:55
Go to the top of the page
+Quote Post
plej
post 2.06.2017, 17:47:41
Post #6





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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.


Go to the top of the page
+Quote Post
Kam1k
post 5.06.2017, 08:12:29
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 12.02.2016
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 16:37