Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzanie czy dany rekord istnieje w bazie
Forum PHP.pl > Forum > Przedszkole
kafar610
Witam
Mój skrypt tworzy token który jest przypisywany do odpowiedniego pliku, token ma być oryginalny (i tu się zaczynają schody) a więc muszę sprawdzić czy wygenerowany token nie jest przypadkiem w bazie,jesli jest to ma sie wygenerować ponownie a jak jest to ma się zapisać, wszystko musi być w pętli bo mam multiupload plikow.
Jak dotąd stoje przy tym
  1. while(true)
  2. {
  3. // losuj nowy token. Tu nie wiemy, czy zostanie wylosowany taki co byl juz w bazie
  4.  
  5. // sprawdz czy wylosowany jest juz w bazie
  6. $czyTokenIstniejeWBazie = mysqli_query($connect ,"SELECT * FROM brazki WHERE token = '$token';");
  7. // jesli go nie ma, to przerywamy, bo mamy odpowiedni
  8. if($czyTokenIstniejeWBazie == false)
  9. break;
  10. // jesli jest w bazie, to petla wykona sie jeszcze raz
  11. }

z góry dzięki za pomoc
Pozdrawiam Darek
nospor
Z mysql jako takim to ma sredni związek. PRzenosze, bo masz braki w ewidentnych podstawach funkcji do obslugi baz danych
kafar610
takie coś jeszcze wymyśliłem, niby bledow nie wywala ale nie wiem czy to jest dobrze ...
  1. <?php
  2. if (isset($_POST['submit'])) {
  3. /**
  4.   * @author Kafar
  5.   * @copyright 2015
  6.   */
  7.  
  8. //raportowanie bledow php
  9. ini_set('display_errors', 'on');
  10.  
  11.  
  12. //definicja stalych
  13. require_once("stale.php");
  14. require_once("function.php");
  15.  
  16. $img = $_FILES['image'];
  17.  
  18. //walidacja start
  19. if ((empty($image))) {
  20.  
  21. echo "Nie wstawiłes zdjecia";
  22.  
  23. }
  24.  
  25. //walidacja end
  26. //wykoananie skryptu
  27. if ((!empty($image))) {
  28.  
  29. foreach ($img['tmp_name'] as $key => $tmp_name) {
  30.  
  31. $image = $_FILES['image']['name'][$key];
  32. $image_type = $_FILES['image']['type'][$key];
  33. $image_size = $_FILES['image']['size'][$key];
  34.  
  35.  
  36. if (($image_type == 'image/gif') || ($image_type == 'image/jpeg') || ($image_type == 'image/pjpeg') || ($image_type == 'image/png')) {
  37.  
  38. if (($image_size > 0) && ($image_size <= GW_MAXFILESIZE)) {
  39.  
  40. // Przenoszenie plików do docelowego katalogu.
  41. $target = GW_LOKALIZACJA . $image;
  42.  
  43.  
  44. //hash pliku
  45. $filename = $_FILES['image']['tmp_name'][$key];
  46. $md5file = md5_file($filename);
  47. echo $md5file;
  48. //hash pliku
  49.  
  50.  
  51. //pobranie rozszerzenia
  52. $odczyt = pathinfo($image);
  53. $ext = $odczyt['extension'];
  54. //pobranie rozszerzenia
  55.  
  56. //info pliku
  57. $rozmiar = round($img['size'][$key]/1024) . " KB";
  58. list($width, $height) = getimagesize($filename);
  59. $wymiary = $width ." x ". $height;
  60. //info pliku
  61. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  62. or die('Brak połączenia z serwerem MySQL');
  63.  
  64. echo 'Połączenie nawiązane<br />';
  65. // dodajemy rekord do bazy
  66. // petla wykonuje sie dopoki nie wygenerujemy unikalnego tokenu
  67. //while(true)
  68. //{
  69. $token = gentoken(12);
  70. // losuj nowy token. Tu nie wiemy, czy zostanie wylosowany taki co byl juz w bazie
  71.  
  72. // sprawdz czy wylosowany jest juz w bazie
  73. $loguj="select token from obrazki where token='$token'";
  74. $rekordy = mysqli_query($connect,$loguj);
  75. if(mysqli_num_rows($rekordy)==0)
  76. {
  77. //co jak nie istnieje
  78. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], GW_LOKALIZACJA . $token . "." . $ext)) {
  79.  
  80.  
  81. //var_dump($czyTokenIstniejeWBazie);
  82. // tutaj juz mamy unikalny token, wiec dodajmy do bazy
  83.  
  84. $ins = "INSERT INTO obrazki VALUES (0,NOW(),'$md5file' , '$rozmiar' , '$wymiary' , '$token' , '$ext')";
  85.  
  86. $query = mysqli_query($connect, $ins);
  87.  
  88. if ($query)
  89. {
  90. echo 'Dane zostały wpisane do bazy <br />';
  91. }
  92. else
  93. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  94.  
  95. $zapytanie = mysqli_query($connect ,"SELECT id FROM obrazki ORDER BY id DESC LIMIT 1");
  96.  
  97. $rekord = mysqli_fetch_array($zapytanie);
  98.  
  99. $last_id = $rekord['id'];
  100.  
  101. echo 'id obrazka to:' . $last_id . '<br />';
  102.  
  103. echo 'token: ' . $token . '<br />';
  104. echo 'Nazwa: ' . $img['name'][$key] . '<br/>';
  105. echo 'Rozmiar: ' . $rozmiar . '<br/>';
  106. echo 'Rozszerzenie pliku ' . $ext . "<br />";
  107. echo '<img src="' . GW_LOKALIZACJA . $token . "." . $ext . '" width="300px" heith="300px" alt="image" /></p><br />';
  108. echo $width;
  109. echo $height;
  110. echo 'Link do obrazka: kafar.nazwa.pl/wrzucfote.pl/'. GW_LOKALIZACJA . $token . "." . $ext;
  111. ?>
  112. <form>
  113. <input onclick="this.form.txt.select();" type="button" value="zaznacz kod">
  114. <textarea style="resize: none;" name="txt" cols="50" rows="4"><?php echo 'http://kafar.nazwa.pl/wrzucfote.pl/' . GW_LOKALIZACJA . $token . "." . $ext;?> </textarea>
  115. <input type="button" value="Losowa strona" onclick="window.open('getObraz.php');" />
  116. </form>
  117. <?php
  118.  
  119. }
  120. }
  121. else
  122. {
  123. $token = gentoken(12);
  124. //jeżeli login istnieje w bazie
  125. }
  126.  
  127. //$czyTokenIstniejeWBazie = SELECT COUNT(login) FROM users WHERE login = '$login'
  128. //$czyTokenIstniejeWBazie = mysqli_query($connect ,"SELECT * FROM obrazki WHERE token = '$token';");
  129. // jesli go nie ma, to przerywamy, bo mamy odpowiedni
  130. //if($czyTokenIstniejeWBazie == false)
  131. //break;
  132. // jesli jest w bazie, to petla wykona sie jeszcze raz
  133. //}
  134.  
  135. mysqli_close($connect);
  136. }
  137. else
  138. echo "Obrazek nie moze być wiekszy niż 5 mb";
  139. }
  140. else
  141. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  142. }
  143. }
  144. }
  145. //wykoananie skryptu
  146. ?>


to moze inaczej, zrobiłem coś takiego
  1. <?php
  2. if (isset($_POST['submit'])) {
  3. /**
  4.   * @author Kafar
  5.   * @copyright 2015
  6.   */
  7.  
  8. //raportowanie bledow php
  9. ini_set('display_errors', 'on');
  10.  
  11.  
  12. //definicja stalych
  13. require_once("stale.php");
  14. require_once("function.php");
  15.  
  16. $img = $_FILES['image'];
  17.  
  18. //walidacja start
  19. if ((empty($image))) {
  20.  
  21. echo "Nie wstawiłes zdjecia";
  22.  
  23. }
  24.  
  25. //walidacja end
  26. //wykoananie skryptu
  27. if ((!empty($image))) {
  28.  
  29. foreach ($img['tmp_name'] as $key => $tmp_name) {
  30.  
  31. $image = $_FILES['image']['name'][$key];
  32. $image_type = $_FILES['image']['type'][$key];
  33. $image_size = $_FILES['image']['size'][$key];
  34.  
  35.  
  36. if (($image_type == 'image/gif') || ($image_type == 'image/jpeg') || ($image_type == 'image/pjpeg') || ($image_type == 'image/png')) {
  37.  
  38. if (($image_size > 0) && ($image_size <= GW_MAXFILESIZE)) {
  39.  
  40. // Przenoszenie plików do docelowego katalogu.
  41. $target = GW_LOKALIZACJA . $image;
  42.  
  43.  
  44. //hash pliku
  45. $filename = $_FILES['image']['tmp_name'][$key];
  46. $md5file = md5_file($filename);
  47. echo $md5file;
  48. //hash pliku
  49.  
  50.  
  51. //pobranie rozszerzenia
  52. $odczyt = pathinfo($image);
  53. $ext = $odczyt['extension'];
  54. //pobranie rozszerzenia
  55.  
  56. //info pliku
  57. $rozmiar = round($img['size'][$key]/1024) . " KB";
  58. list($width, $height) = getimagesize($filename);
  59. $wymiary = $width ." x ". $height;
  60. //info pliku
  61. $connect = mysqli_connect(HOST, USER, PASSWORD, NAZWA_BAZY, PORT)
  62. or die('Brak połączenia z serwerem MySQL');
  63.  
  64. echo 'Połączenie nawiązane<br />';
  65. // dodajemy rekord do bazy
  66. // petla wykonuje sie dopoki nie wygenerujemy unikalnego tokenu
  67. //while(true)
  68. //{
  69. $token = gentoken(1); // losuj nowy token. Tu nie wiemy, czy zostanie wylosowany taki co byl juz w bazie
  70.  
  71. // sprawdz czy wylosowany jest juz w bazie
  72. //$result = mysqli_query($connect, "SELECT * FROM obrazki WHERE token = '$token'");
  73. // echo "nie ma"; //$czyTokenIstniejeWBazie = mysqli_query($connect ,"SELECT * FROM obrazki WHERE token = '$token';");
  74. // jesli go nie ma, to przerywamy, bo mamy odpowiedni
  75. //if(mysqli_num_rows($result))
  76. //echo "jest";
  77. //break;
  78. $result = mysqli_query($connect, "SELECT * FROM obrazki WHERE token = '$token'");
  79. if (mysqli_num_rows($result)) {
  80. echo "Jest";
  81. $token = gentoken(1);
  82. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], GW_LOKALIZACJA . $token . "." . $ext)) {
  83.  
  84.  
  85. $ins = "INSERT INTO obrazki VALUES (0,NOW(),'$md5file' , '$rozmiar' , '$wymiary' , '$token' , '$ext')";
  86.  
  87. $query = mysqli_query($connect, $ins);
  88.  
  89. if ($query)
  90. {
  91. echo 'Dane zostały wpisane do bazy <br />';
  92. }
  93. else
  94. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  95.  
  96. $zapytanie = mysqli_query($connect ,"SELECT id FROM obrazki ORDER BY id DESC LIMIT 1");
  97.  
  98. $rekord = mysqli_fetch_array($zapytanie);
  99.  
  100. $last_id = $rekord['id'];
  101.  
  102. echo 'id obrazka to:' . $last_id . '<br />';
  103.  
  104. echo 'token: ' . $token . '<br />';
  105. echo 'Nazwa: ' . $img['name'][$key] . '<br/>';
  106. echo 'Rozmiar: ' . $rozmiar . '<br/>';
  107. echo 'Rozszerzenie pliku ' . $ext . "<br />";
  108. echo '<img src="' . GW_LOKALIZACJA . $token . "." . $ext . '" width="300px" heith="300px" alt="image" /></p><br />';
  109. echo $width;
  110. echo $height;
  111. echo 'Link do obrazka: kafar.nazwa.pl/wrzucfote.pl/'. GW_LOKALIZACJA . $token . "." . $ext;
  112. ?>
  113. <form>
  114. <input onclick="this.form.txt.select();" type="button" value="zaznacz kod">
  115. <textarea style="resize: none;" name="txt" cols="50" rows="4"><?php echo 'http://kafar.nazwa.pl/wrzucfote.pl/' . GW_LOKALIZACJA . $token . "." . $ext;?> </textarea>
  116. <input type="button" value="Losowa strona" onclick="window.open('getObraz.php');" />
  117. </form>
  118. <?php
  119.  
  120. }
  121. mysqli_close($connect);
  122. } else {
  123. echo "Nie ma";
  124.  
  125.  
  126. // jesli jest w bazie, to petla wykona sie jeszcze raz
  127. //}
  128. var_dump($result);
  129. // tutaj juz mamy unikalny token, wiec dodajmy do bazy
  130.  
  131. if (move_uploaded_file($_FILES['image']['tmp_name'][$key], GW_LOKALIZACJA . $token . "." . $ext)) {
  132.  
  133.  
  134. $ins = "INSERT INTO obrazki VALUES (0,NOW(),'$md5file' , '$rozmiar' , '$wymiary' , '$token' , '$ext')";
  135.  
  136. $query = mysqli_query($connect, $ins);
  137.  
  138. if ($query)
  139. {
  140. echo 'Dane zostały wpisane do bazy <br />';
  141. }
  142. else
  143. echo 'Błąd przy dodawaniu rekordów do bazy <br />';
  144.  
  145. $zapytanie = mysqli_query($connect ,"SELECT id FROM obrazki ORDER BY id DESC LIMIT 1");
  146.  
  147. $rekord = mysqli_fetch_array($zapytanie);
  148.  
  149. $last_id = $rekord['id'];
  150.  
  151. echo 'id obrazka to:' . $last_id . '<br />';
  152.  
  153. echo 'token: ' . $token . '<br />';
  154. echo 'Nazwa: ' . $img['name'][$key] . '<br/>';
  155. echo 'Rozmiar: ' . $rozmiar . '<br/>';
  156. echo 'Rozszerzenie pliku ' . $ext . "<br />";
  157. echo '<img src="' . GW_LOKALIZACJA . $token . "." . $ext . '" width="300px" heith="300px" alt="image" /></p><br />';
  158. echo $width;
  159. echo $height;
  160. echo 'Link do obrazka: kafar.nazwa.pl/wrzucfote.pl/'. GW_LOKALIZACJA . $token . "." . $ext;
  161. ?>
  162. <form>
  163. <input onclick="this.form.txt.select();" type="button" value="zaznacz kod">
  164. <textarea style="resize: none;" name="txt" cols="50" rows="4"><?php echo 'http://kafar.nazwa.pl/wrzucfote.pl/' . GW_LOKALIZACJA . $token . "." . $ext;?> </textarea>
  165. <input type="button" value="Losowa strona" onclick="window.open('getObraz.php');" />
  166. </form>
  167. <?php
  168.  
  169. }
  170. mysqli_close($connect);
  171. }
  172. }
  173. else
  174. echo "Obrazek nie moze być wiekszy niż 5 mb";
  175. }
  176. else
  177. echo "Przesłany plik nie jest obrazekiem!!! <br /> Dostępne rozszerzenia: .gif, .jpeg, .pjpeg, .png ";
  178. }
  179. }
  180. }
  181. //wykoananie skryptu
  182. ?>

skrypt początkowo ładnie chodzi, ale gdy już jest więcej tokenów w bazie to je powtarza, jak mam to zrobić aby tego uniknąć.
Pomoże ktoś? wiem ze petle musze zastosowac ale nie za bardzo wiem jak...
salfunglandyare
Może coś takiego:
  1. function getToken($num){
  2. return md5(microtime().$num);
  3. }
  4. //...
  5. $i = 0;
  6. do{
  7. $token = getToken($i);
  8. $result=mysql_query("select count(*) as ilosc from obrazki where token = '$token'");
  9. $data=mysql_fetch_assoc($result);
  10. $i++;
  11. } while($data['ilosc']>0);
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.