Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]zdjęcia z różnymi nazwami plików
Forum PHP.pl > Forum > Przedszkole
olszam
mam kłopot ze zrobieniem formularza na zdjęcie tzn mam w pełni sprawnie działający formularz ale nie wiem jak zrobić by nie wrzucał do serwera zdjęcia które mają taką samą nazwę i nie dodawał rekordu do bazy.
  1. <?php
  2. require 'polacz.php';
  3. mysql_query("SET NAMES utf8");
  4. mysql_query("SET CHARACTER SET utf8");
  5. mysql_query("SET collation_connection = utf8_polish_ci");
  6. ?>
  7. <form enctype="multipart/form-data" action="zdjpodium.php" method="POST">
  8. <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
  9. obrazek: <input name="nazwapliku" type="file" />
  10. <br/>
  11. <?php
  12. for ($i=1; $i<=3; $i++)
  13. {
  14. echo 'Miejsce '.$i.': <select name="idzawodnik'.$i.'">';
  15. $sql2 = "SELECT * FROM zawodnik";
  16. $rezultat1 = mysql_query($sql2);
  17. while ($Wiersz1 = mysql_fetch_array($rezultat1))
  18. {
  19. echo '<option value="'.$Wiersz1['idzawodnik'].'">'.$Wiersz1['imiezawodnik'].' '.$Wiersz1['nazwiskozawodnik'].'</option>';
  20. }
  21. echo '</select><br />';
  22. }
  23. ?>
  24. <br />
  25. dane zawody:
  26. <select name="iddanezawody">
  27. <?php
  28. $sql4 = "SELECT * FROM danezawody";
  29. $rezultat3 = mysql_query($sql4);
  30. while ($Wiersz3 = mysql_fetch_array($rezultat3))
  31. {
  32. echo '<option value="'.$Wiersz3['iddanezawody'].'">'.$Wiersz3['iddanezawody'].'</option>';
  33. }
  34. ?>
  35. </select><br />
  36. <textarea name="opis">opis</textarea><br />
  37. <input type="submit" name="dodaj" value="dodaj zdjecie" />
  38. </form>
  39. <?php
  40.  
  41. if (!empty($_POST)){
  42. $uploaddir = 'test/';
  43. $uploadfile = $uploaddir . basename($_FILES['nazwapliku']['name']);
  44. echo '<pre>';
  45.  
  46. if (move_uploaded_file($_FILES['nazwapliku']['tmp_name'], $uploadfile))
  47. {
  48.  
  49.  
  50. if(isset($_POST['dodaj'])){
  51. $nazwapliku = $_FILES['nazwapliku']['name'];
  52. $opis = $_POST['opis'];
  53. $zawodnik1 = $_POST['idzawodnik1'];
  54. $zawodnik2 = $_POST['idzawodnik2'];
  55. $zawodnik3 = $_POST['idzawodnik3'];
  56. $danezawody = $_POST['iddanezawody'];
  57. if($nazwapliku && $opis && $danezawody)
  58. {
  59. $sql="INSERT INTO danezdjecia SET nazwapliku='$nazwapliku', opis='$opis', iddanezawody='$danezawody'";
  60. $ins = mysql_query($sql);
  61. $id = mysql_insert_id();
  62. if($ins && $zawodnik1 && $zawodnik2 && $zawodnik3 && $id)
  63. {
  64. echo "Rekord został dodany poprawnie";
  65. $sql1="INSERT INTO zdjecia SET idzawodnik='$zawodnik1', iddanezdjecia='$id'";
  66. $sql12="INSERT INTO zdjecia SET idzawodnik='$zawodnik2', iddanezdjecia='$id'";
  67. $sql123="INSERT INTO zdjecia SET idzawodnik='$zawodnik3', iddanezdjecia='$id'";
  68. $ins1 = mysql_query($sql1);
  69. $ins2 = mysql_query($sql12);
  70. $ins3 = mysql_query($sql123);
  71. if($ins1 && $ins2 && $ins3)
  72. {
  73. echo "<br/>Rekord 2 został dodany poprawnie";
  74. }
  75. else
  76. {
  77. echo "Błąd nie udało się dodać 2 rekordu: ";
  78. }
  79.  
  80. }
  81. else
  82. {
  83. echo "Błąd nie udało się dodać nowego rekordu: ";
  84. }
  85. }
  86. }
  87.  
  88. echo "File is valid, and was successfully uploaded.\n";
  89. }
  90. else
  91. {
  92. echo "Possible file upload attack!\n";
  93. }
  94.  
  95. echo 'Here is some more debugging info:';
  96. print_r($_FILES);
  97.  
  98. print "</pre>";
  99. }
  100. ?>
prowseed
Przed move_uploaded_file() zrob sobie select do bazy i sprawdz czy istnieje nazwapliku = $_FILES['nazwapliku']['name'] . Daj to w duzym if'ie i koniec.
maviozo
Ponownie zachęcam do spróbowania PDO, który po pierwsze załatwia sprawy z najprostszymi zabezpieczeniami sql injection itp. to jeszcze możesz poprzez zastosowanie try{} catch (PDOException $e){} za pomocą jednego zapytania wstawić rekord do bazy, albo uzyskać informację, że nazwa jest już użyta. Warunkiem jednak jest by kolumna z nazwą pliku była unique, chociaż to i tak wydaje się być rozsądne.
olszam
zrobiłem coś takiego ale nadal nie wychodzi gdzie błąd tkwi?

  1. <?php
  2. require 'polacz.php';
  3. mysql_query("SET NAMES utf8");
  4. mysql_query("SET CHARACTER SET utf8");
  5. mysql_query("SET collation_connection = utf8_polish_ci");
  6. ?>
  7. <form enctype="multipart/form-data" action="zdjdanezawodykopia.php" method="POST">
  8. <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
  9. obrazek: <input name="nazwapliku1" type="file" />
  10. <br/>
  11. dane zawody:
  12. <select name="iddanezawody">
  13. <?php
  14. $sql4 = "SELECT * FROM danezawody WHERE faza='0'";
  15. $rezultat3 = mysql_query($sql4);
  16. while ($Wiersz3 = mysql_fetch_array($rezultat3))
  17. {
  18. echo '<option value="'.$Wiersz3['iddanezawody'].'">'.$Wiersz3['iddanezawody'].'</option>';
  19. }
  20. ?>
  21. </select><br />
  22. <textarea name="opis">opis</textarea><br />
  23. <input type="submit" name="dodaj" value="dodaj zdjecie" />
  24. </form>
  25. <?php
  26. if (!empty($_POST)){
  27. $uploaddir = 'test/';
  28. $uploadfile = $uploaddir . basename($_FILES['nazwapliku1']['name']);
  29. echo '<pre>';
  30. if(mysql_num_rows(mysql_query("SELECT * FROM danezdjecia where nazwapliku='".htmlspecialchars($_FILES['nazwapliku1']['name']."'")))){
  31. echo 'proszę zmienić nazwe pliku';
  32. }
  33. else{
  34. if (move_uploaded_file($_FILES['nazwapliku1']['tmp_name'], $uploadfile))
  35. {
  36. if(isset($_POST['dodaj'])){
  37. $nazwapliku = $uploaddir.$_FILES['nazwapliku1']['name'];
  38. $opis = $_POST['opis'];
  39. $danezawody = $_POST['iddanezawody'];
  40. if($nazwapliku && $opis && $danezawody)
  41. {
  42. $sql1="INSERT INTO danezdjecia SET nazwapliku='$nazwapliku', opis='$opis', iddanezawody='$danezawody'";
  43.  
  44. $ins = mysql_query($sql1);
  45. if($ins)
  46. {
  47. echo "Rekord został dodany poprawnie";
  48. }
  49. else {
  50. echo "Błąd nie udało się dodać nowego rekordu: ";
  51. }
  52. }
  53. }
  54. echo "File is valid, and was successfully uploaded.\n";
  55. }
  56. }
  57. echo 'Here is some more debugging info:';
  58. print_r($_FILES);
  59.  
  60. print "</pre>";
  61. }
  62. ?>


////////////////

dobra nie trzeba już znalazłem błąd tam w tym długim if-ie musiałem wstawić w odpowiednie miejsce $uploaddir
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.