Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [MySQL] Księga gości ze zdjęciem
Forum PHP.pl > Forum > Przedszkole
szachmat
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?





Pyton_000
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ł.
nospor
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.
szachmat
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ł.

viking
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.
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.