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





Grupa: Zarejestrowani
Postów: 6 380
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:08