Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] [MySQL] Księga gości ze zdjęciem, Skrypt PHP problem z modyfikacją "pod kątem blob"
szachmat
post 13.01.2016, 09:15:38
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 3.01.2016

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


Witam,

od kilkunastu dni serfuje po necie w poszukiwaniu startowego skryptu, na którym będę mógł oprzeć swoją przygodę z programowaniem.
Chciałbym stworzyć księgę gości z możliwością dodawania zdjęć.
Znalazłem interesujące mnie rozwiązanie, ale muszę je trochę zmodyfikować pod kątem upload i download "blob" z MySQL.
Poniżej przedstawiam działający skrypt Ojca dyrektora.
Jest to działająca księga gości z możliwością dodawania i usuwania wpisów.

W necie jest wiele innych skryptów księgi gości, również i takich, za sprawą których można dodawać zdjęcia.
Niemniej jednak mnie interesuje poznanie i modyfikacja tego skryptu pod kątem możliwości dodania zdjęcia.


ksiega.php
  1. <?php
  2. include ('config.php');
  3. include ('function.php');
  4.  
  5. $tryby_ukryte = array('dod','update','del','wyloguj');
  6. $wyswietl=true;
  7. if (in_array($_GET['m'],$tryby_ukryte)) $wyswietl=false;
  8.  
  9. if ($wyswietl) echo '<h1> Księga Gości </h1>';
  10.  
  11. if ($_SESSION['admin']=='zalogowany' || ( $_POST['login']==$log_admin && $_POST['password']==$pass_admin))
  12. {
  13. if ($wyswietl) echo '<h2>Witaj '.$log_admin.'! - <a href="ksiega.php?m=wyloguj">Wyloguj</a></h2>';
  14. $_SESSION['admin']='zalogowany';
  15. $admin=true;
  16. } else if($_GET['m']!='wyloguj')
  17. {
  18. if ($wyswietl) echo '<a href="ksiega.php?m=login">Zaloguj</a><br />';
  19. }
  20.  
  21. $cid = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
  22.  
  23. if(!$wyswietl)
  24. {
  25. if (($_GET['m']=='dod' || $_GET['m']=='update' ) && !empty($_POST['osoba']) && !empty($_POST['wpis']))
  26. {
  27. $data = mktime();
  28. $osoba = addslashes(nl2br(htmlentities($_POST['osoba'])));
  29. $wpis = addslashes(nl2br(htmlentities($_POST['wpis'])));
  30. }
  31. if ($_GET['m']=='dod' && !empty($osoba) && !empty($wpis))
  32. {
  33. $sql = 'INSERT INTO '.$tabela.' (id,data,osoba,wpis) VALUES (NULL,'.$data.', \''.$osoba.'\', \''.$wpis.'\')';
  34. mysql_query($sql) or die (mysql_error());
  35. }
  36. if ($_GET['m']=='update' && !empty($osoba) && !empty($wpis) && !empty($_POST['id']))
  37. {
  38. $sql = 'UPDATE '.$tabela.' SET osoba=\''.$osoba.'\', wpis=\''.$wpis.'\' WHERE id='.(int)$_POST['id'];
  39. mysql_query ($sql) or die (mysql_error());
  40. }
  41. if ($_GET['m']=='del' && $admin && is_numeric($_GET['id']))
  42. {
  43. $sql = 'DELETE FROM '.$tabela.' WHERE id='.$_GET['id'];
  44. mysql_query ($sql) or die(mysql_error());
  45. }
  46. if ($_GET['m']=='wyloguj')
  47. {
  48. unset($_SESSION['admin']);
  49. }
  50. header('Location: ksiega.php');
  51. }
  52.  
  53. if ($_GET['m']=='edit' && $admin && is_numeric($_GET['id']))
  54. {
  55. echo '<h3>Edycja</h3>';
  56. $sql = 'SELECT id, osoba, wpis FROM '.$tabela.' WHERE id='.$_GET['id'];
  57. $result = mysql_query ($sql) or die(mysql_error());
  58. $row = mysql_fetch_assoc($result);
  59. formularz($row['id'],$row['osoba'],$row['wpis'],'update');
  60. }
  61.  
  62. if ($wyswietl && $_GET['m']!='edit')
  63. {
  64. view($tabela,$admin);
  65. formularz();
  66. }
  67.  
  68. if ($_GET['m']=='login')
  69. {
  70. zaloguj();
  71. }
  72. ?>


function.php
  1. <?php
  2. function view($tabela,$admin)
  3. {
  4. $sql = 'SELECT id, data, osoba, wpis FROM '.$tabela.' ORDER BY data DESC';
  5. $result = mysql_query ($sql) or die(mysql_error());
  6. $ile = mysql_num_rows($result);
  7.  
  8. echo 'W bazie jest '.$ile. ' wpisów.';
  9.  
  10. while ($row = mysql_fetch_assoc ($result)) //*while - pętla "podczas gdy", assoc - zapisuje wiersz wyników w tab. asoc., $result - wyniki*//
  11. {
  12. echo '<dl><dt>'.date('d M y H:i.s',$row['data']).'<dd><b>'. stripslashes($row['wpis']).', </b> </dd> <i>'.$row['osoba'].'</i>';
  13. if ($admin) echo ' - <a href="ksiega.php?m=edit&amp;id='.$row['id'].'">Edytuj</a> | <a href="ksiega.php?m=del&amp;id='.$row['id'].'">Usuń</a>';
  14. echo '</dt></dl>'."\n"; // formatowanie wyglądu wpisu
  15. }
  16. }
  17.  
  18. function formularz($id=0, $osoba='', $wpis='', $tryb='dod')
  19. {
  20. ?>
  21.  
  22. <br />
  23. <br />
  24. <form method="post" action="ksiega.php?m=<?php echo $tryb;?>">
  25. <table>
  26. <tr><td>Osoba:</td><td>
  27. <input type="text" name="osoba" value="<?php echo $osoba;?>" /></td></tr>
  28. <tr><td>Wpis:</td><td>
  29. <textarea name="wpis" cols="45" rows="4"><?php echo $wpis;?></textarea>
  30. </td></tr>
  31. </table>
  32. <input type="hidden" value="<?php echo $id;?>" name="id"/>
  33. <input type="submit" value="Wyślij"/>
  34. </form>
  35. <br />
  36. <hr />


Od czego by tu zacząć?...
Próbuję go ugryźć. Już mniej więcej wiem, co w trawie piszczy.
Kod oparty jest na trybach, które służą m.in. dodawaniu i wczytywaniu treści bd.

*modyfikowałem tabelę w bd pod kątem blob;
*modyfikowałem formularz pod kątem multipart;
*modyfikowałem cały skrypt pod kątem $zdjecie [lub] 'zdjecie', itp.

opierałem się przy tym na modyfikacji:

  1. $zdjecie = addslashes (fread(fopen)($_POST ['zdjecie'])));



Niestety błąd serwera.

Mam w związku z tym takie pytanie: czy macie jakieś materiały przybliżające mnie choć o krok w stronę poznania interesującego mnie rozwiązania? Czy pliki binarne potrzebują jakiegoś specjalnego zdefiniowania?





Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kayman
post 13.01.2016, 09:24:27
Post #2





Grupa: Zarejestrowani
Postów: 556
Pomógł: 40
Dołączył: 20.07.2012
Skąd: Warszawa

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


http://php.net/manual/en/reserved.variables.files.php
Go to the top of the page
+Quote Post
Pyton_000
post 13.01.2016, 09:27:03
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nie przechowuj plików w bazie...
Lepiej napisz wszystko od początku, bo ten skrypt wygląda jak by go ktoś przez maszynkę do mielenia mięsa puścił.
Go to the top of the page
+Quote Post
nospor
post 13.01.2016, 10:07:42
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ten skrypt jest poprostu STARY. Uzywa przestarzalych metod, jest totalnie podatny na wszelkiego rodzaju ataki. Uczac sie na takim czyms, nabierasz na dzien dobry zlych nawykow.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
szachmat
post 15.02.2016, 10:07:40
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 3.01.2016

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


Dzięki wielkie za podpowiedzi.
Podpowiedź z $_FILES była dobra. Dzięki wielkie.
Co do przechowywanie zdjęć w BD zgoda, ale będę rozważał to przy kolejnym zadaniu (o ile nad tym nie spędzę całego życia, jak doktorek z Dżumy Camusa).
Chciałbym wyrobić sobie jakikolwiek inny nawyk poza // albp /*??*/

Tym razem przedstawiam moda z komentarzami.

MsQL ERROR na ksiega.php i function.php

ksiega.php
  1. <?php
  2. include ('config.php');
  3. include ('function.php');
  4.  
  5. $tryby_ukryte = array('dod','update','del','wyloguj');
  6. $wyswietl=true;
  7. if (in_array($_GET['m'],$tryby_ukryte)) $wyswietl=false;
  8.  
  9. if ($wyswietl) echo '<h1> Księga Gości </h1>';
  10.  
  11. if ($_SESSION['admin']=='zalogowany' || ( $_POST['login']==$log_admin && $_POST['password']==$pass_admin))
  12. {
  13. if ($wyswietl) echo '<h2>Witaj '.$log_admin.'! - <a href="ksiega.php?m=wyloguj">Wyloguj</a></h2>';
  14. $_SESSION['admin']='zalogowany';
  15. $admin=true;
  16. } else if($_GET['m']!='wyloguj')
  17. {
  18. if ($wyswietl) echo '<a href="ksiega.php?m=login">Zaloguj</a><br />';
  19. }
  20.  
  21. $cid = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
  22.  
  23. if(!$wyswietl)
  24. {
  25. /*tryb ładowania do bazy danych, tryb ładowania, jak się robi || na klawiaturze??*/
  26. if (($_GET['m']=='dod' || $_GET['m']=='update' ) && !empty($_POST['osoba']) && !empty($_POST['wpis'] && !empty($_FILES['zdjecie'])) //prawda jeśli, dopisałem $_FILES
  27. {
  28. $data = mktime();
  29. $osoba = addslashes(nl2br(htmlentities($_POST['osoba'])));
  30. $wpis = addslashes(nl2br(htmlentities($_POST['wpis'])));
  31. $zdjecie = addslashes(fread(fopen($_FILES['zdjecie']))); //dopisałem linijkę, zabezpieczenie, czytanie długości, otwieranie
  32. }
  33. /*tryb ładowania 2 ??? zapytanie do sgl czy zostało dodane*/
  34. if ($_GET['m']=='dod' && !empty($osoba) && !empty($wpis)) && !empty($zdjecie) //dodałem && !empty($zdjecie)
  35. {
  36. $sql = 'INSERT INTO '.$tabela.' (id,data,osoba,wpis) VALUES (NULL,'.$data.', \''.$osoba.'\', \''.$wpis.'\', \''.$zdjecie.'\')'; //dodałem \''.$zdjecie.'\'
  37. mysql_query($sql) or die (mysql_error());
  38. }
  39. /*tryb ładowania 3*/
  40. if ($_GET['m']=='update' && !empty($osoba) && !empty($wpis) && !empty($_POST['id'] !empty($_FILES['zdjecie'])) //dodałem !empty($_FILES['zdjecie'])
  41. {
  42. $sql = 'UPDATE '.$tabela.' SET osoba=\''.$osoba.'\', wpis=\''.$wpis.'\', zdjecie=\''.$zdjecie.'\' WHERE id='.(int)$_POST['id']; //dodałem zdjecie=\''.$zdjecie.'\'
  43. mysql_query ($sql) or die (mysql_error());
  44. }
  45. if ($_GET['m']=='del' && $admin && is_numeric($_GET['id']))
  46. {
  47. $sql = 'DELETE FROM '.$tabela.' WHERE id='.$_GET['id'];
  48. mysql_query ($sql) or die(mysql_error());
  49. }
  50. if ($_GET['m']=='wyloguj')
  51. {
  52. unset($_SESSION['admin']);
  53. }
  54. header('Location: ksiega.php');
  55. }
  56.  
  57. if ($_GET['m']=='edit' && $admin && is_numeric($_GET['id']))
  58. {
  59. echo '<h3>Edycja</h3>';
  60. $sql = 'SELECT id, osoba, wpis FROM '.$tabela.' WHERE id='.$_GET['id'];
  61. $result = mysql_query ($sql) or die(mysql_error());
  62. $row = mysql_fetch_assoc($result);
  63. formularz($row['id'],$row['osoba'],$row['wpis'],$row['zdjecie']'update'); // dodałem $row['zdjecie']
  64. }
  65.  
  66. if ($wyswietl && $_GET['m']!='edit')
  67. {
  68. view($tabela,$admin);
  69. formularz();
  70. }
  71.  
  72. if ($_GET['m']=='login')
  73. {
  74. zaloguj();
  75. }
  76. ?>


function.php
  1. <?php
  2. function view($tabela,$admin)
  3. {
  4. $sql = 'SELECT id, data, osoba, wpis, zdjecie FROM '.$tabela.' ORDER BY data DESC'; //dodałem zdjecie
  5. $result = mysql_query ($sql) or die(mysql_error());
  6. $ile = mysql_num_rows($result);
  7.  
  8. echo 'W bazie jest '.$ile. ' wpisów.';
  9.  
  10. while ($row = mysql_fetch_assoc ($result)) //while - pętla "podczas gdy", assoc - zapisane wiersze wyników w tab. asoc., $result - wyniki
  11. {
  12. echo //wyswietl
  13. '<dl><dt>'.
  14. date('d M y H:i.s',$row['data']).
  15. ($row['zdjecie']) // dodałem linie >> TU MOŻE BYĆ BŁĄD
  16. '<dd><b>'.
  17. stripslashes($row['wpis']). //usuwa "/", funckja ochronna. Nie jest rekurencyjny. Jeśli chcesz zastosować tę funkcję do wielowymiarowej tablicy, należy skorzystać z funkcji rekurencyjnej
  18. ', </b> </dd> <i>'.
  19. $row['osoba']. //wiersz, czemu tu nie ma zabezpieczenia?
  20. '</i>';
  21. if ($admin) echo ' - <a href="ksiega.php?m=edit&amp;id='.$row['id'].'">Edytuj</a> | <a href="ksiega.php?m=del&amp;id='.$row['id'].'">Usuń</a>';
  22. echo '</dt></dl>'."\n"; // formatowanie wyglądu wpisu
  23. }
  24. }
  25.  
  26. function formularz($id=0, $osoba='', $wpis='', $zdjecie='', $tryb='dod')
  27. {
  28. ?>
  29.  
  30. <br />
  31. <br />
  32. <form enctype="multipart/form-data" method="post" action="ksiega.php?m=<?php echo $tryb;?>">
  33. <table>
  34. <tr><td>Osoba:</td><td>
  35. <input type="text" name="osoba" value="<?php echo $osoba;?>" /></td></tr>
  36. <tr><td>Wpis:</td><td>
  37. <textarea name="wpis" cols="45" rows="4"><?php echo $wpis;?></textarea>
  38. <tr><td>Zdjęcie:</td><td>
  39. <textarea type="blob", name="zdjecie"<?php echo $zdjecie;?> <!-- dodałem całą linijkę TU MA BYĆ FILE CZY BLOB??-->
  40. </td></tr>
  41. </table>
  42. <input type="hidden" value="<?php echo $id;?>" name="id"/>
  43. <input type="submit" value="Wyślij"/>
  44. </form>
  45. <br />
  46. <hr />
  47.  
  48. <?php
  49. }
  50.  
  51. function zaloguj()
  52. {
  53. ?>
  54. <br />
  55. <br />
  56. <form method="post" action="ksiega.php">
  57. <table>
  58. <tr><td>Login:</td><td><input type="text" name="login" /></td></tr>
  59. <tr><td>Password:</td><td><input type="password" name="password" /></td></tr>
  60. </table>
  61. <input type="submit" value="Wyślij"/>
  62. </form>
  63. <br />
  64. <hr />
  65. <?php
  66. }
  67. ?>


Nie wiem, może coś nie tak z GET, teraz temu będę się przyglądał.



Ten post edytował szachmat 15.02.2016, 10:09:53
Go to the top of the page
+Quote Post
viking
post 15.02.2016, 10:23:00
Post #6





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Zanim jeszcze bardziej w to nie zabrnąłeś przejdź na PDO albo chociaż mysqli. Twoje addslashes + htmlentities niekonieczne jest bezpieczne na wszystkie ataki mysql. Jakim zabezpieczeniem jest fread/fopen? Sprawdzaj typ mime.
WHERE id='.$_GET['id']; - aha. Daj chociaż rzutowanie na int.

Bardziej nowoczesna księga gości.


--------------------
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: 25.07.2025 - 09:47