Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zapisywanie wartości do bazy danych
Forum PHP.pl > Forum > Przedszkole
Gregoire
Witam,

Jaki czas temu udało mi się napisać skrypt, który aktualizował dwie tabele w bazie danych odnośnie monitorowania ściągnięć plików.
jedna tabela zbiera ilości ściągnięć danego pliku
druga historie wszystkich ściągnięć: czas z jakiego serwera itp.

Skrypt działał przez długo czas poprawnie ale niestety nagle przestał. oto ten skrypt:
  1. <?php
  2. $plik = $_GET['plik']; //pobiera nazwę pliku, który użytkownik chce pobrać
  3. $baza_ip = '127.0.0.1'; //adres bazy danych
  4. $baza_uzytkownik = 'nazwa'; //nazwa użytkownika bazy
  5. $baza_haslo = 'haslo'; //hasło dla danego użytkownika bazy
  6. $baza = 'baza'; //nazwa bazy glównej
  7. $baza_zrodlo1 = 'dr_sciagnieteile'; //tabela, w której są zapisywane wpisy o ilości pobrań
  8. $baza_zrodlo = 'dr_sciagnietekto' ;
  9. $folder_z_plikami = 'sciezka/'; //tutaj będą znajdować się pliki do pobrania
  10. //sprawdzam czy zmienna plik jest pusta, jeżeli jest pusta nie wywołuję
  11. //dalej kodu tylko informuję o błędzie.
  12. //sprawdzam czy zmienna plik jest pusta, jeżeli jest pusta nie wywołuję
  13. //dalej kodu tylko informuję o błędzie.
  14. //...
  15.  
  16. if ($plik != '')
  17. {
  18. //sprawdzam czy podany plik istnieje na serwerze
  19. if (!file_exists($folder_z_plikami . $plik))
  20. {
  21. //jeżeli plik nie istnieje to nie wykonuję dalszych operacji tylko
  22. //wyświetlam informację o błedzie
  23. print "Podany plik: $plik nie istnieje";
  24. }
  25. else
  26. {
  27. @$db = mysql_connect($baza_ip, $baza_uzytkownik, $baza_haslo);
  28. /*
  29.   Powyższym kodem łączę się z bazą danych mySQL korzystając ze
  30.   stałych zdefiniowanych na początku skryptu. Znak małpy przed zmienną
  31.   $db konieczny jest ze względu na możliwość wystąpienia błędu, który jeżeli
  32.   i tak zaistnieje to i tak zostanie znaleziony za chwilę.
  33.   */
  34. if ($db) //sprawdzam czy zostaliśmy połączeni z bazą
  35. { //Jeżeli tak wykonujemy poniższe czynności
  36. mysql_select_db($baza); //ustawiam nazwę bazy danych
  37.  
  38. //sprawdzam czy w tabeli $baza_zrodlo istnieje nazwa naszego pliku
  39. $result = mysql_query("SELECT * FROM $baza_zrodlo1 WHERE nazwapliku='$plik' ");
  40. //sprawdzam ile razy występił wpis o nazwie pliku w $plik
  41. $num = mysql_num_rows($result);
  42.  
  43. if($num >= 1) //jeżeli występuje jeden plik, lub więcej o tej nazwie to...
  44. {
  45. //...poberam do zmiennej $ile ilość pobrań danego pliku <- w tym miejscy
  46. mysql_select_db($baza); //wybieram bazę
  47. function IleRazyPobrano($plik, $baza, $baza_zrodlo1)
  48. {
  49. //wybieram bazę
  50. //wysyłam zapytanie do bazy o liczbę ściągnięć
  51. $ilerazy = mysql_query("SELECT iloscpobran FROM $baza_zrodlo1 WHERE nazwapliku = '$plik'");
  52. //pobieram wynik w komórki, którą otrzymałem w zmiennej $ilerazy
  53. $wynik = mysql_fetch_row($ilerazy);
  54. //zwracam pierwszy wynik ponieważ zmienna $wynik jest typu array
  55. return $wynik[0];
  56. }
  57. // korzystam ze skryptu "pobrano.php"
  58. $ile = IleRazyPobrano($plik, $baza, $baza_zrodlo1);
  59. $nowy = $ile+1; // dodaję jedno pobranie
  60.  
  61.  
  62. //Tutaj rozpoczyna się już właściwie pobieranie pliku
  63.  
  64.  
  65. header('Pragma: no-cache'); //ustawiamy: aby zawartość nie była cache'owana,
  66. header('Content-Transfer-Encoding: binary'); //zawartość wysyłanego pliku jest binarna,
  67. header('Content-type: application/xls'); //aplikacja odpowiedzialna za plik,
  68. header("Content-Disposition: attachment; filename=$plik"); //nazwa pliku,
  69. header("Location: http://adres strony/$plik"); //zródło pliku.
  70.  
  71. //koniec części odpowieadającej za pobieranie
  72.  
  73. //wysyłam do bazy prośbę o uaktualnienie wpisu ilości pobrań
  74. $czas=date("Y.m.d - G:i:s, D");//'{$_SERVER['REMOTE_ADDR']}', '$hostname', '$plik' , '{$_SERVER["HTTP_REFERER"]}', '{$_SERVER["HTTP_USER_AGENT"]}'
  75. $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  76. mysql_query("Insert INTO $baza_zrodlo VALUES ('', '$czas')");
  77. $rezultat = mysql_db_query("gregoire", $query);
  78. mysql_query("update $baza_zrodlo1 set iloscpobran=$nowy where nazwapliku='$plik'");
  79.  
  80. // wysyłanie mail' z info o sciagnieciu
  81. if ($plik == "konkretny_plik.pdf") {
  82. $tresc = "Sciagnieto Twoj abstrakt \"{$plik}\" .\r\n\r\nCzas: ".$czas."\r\nHost: ".$hostname." (".$_SERVER['REMOTE_ADDR'].")\r\nZ łącza: ".$_SERVER["HTTP_REFERER"]."\r\npo raz:".$nowy."\r\n ";
  83. mail( "adres@tlen.pl", "OD", $tresc, "From: tytuł<adres@tlen.pl>\r\n" );
  84. }
  85. }
  86.  
  87. else // jeżeli nie znaleziono pliku w tabeli o tej nazwie to...
  88. {
  89. //wysyłamy prośbę o dodanie pliku z wartością 1 ściągnięcia
  90. mysql_query("insert into $baza_zrodlo1 values ('$plik', 1)");
  91. $czas=date("Y.m.d - G:i:s, D");
  92. $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  93. mysql_query("insert into $baza_zrodlo values ('', '$czas', '{$_SERVER['REMOTE_ADDR']}', '$hostname', '$plik' , '{$_SERVER["HTTP_REFERER"]}', '{$_SERVER["HTTP_USER_AGENT"]}')");
  94.  
  95.  
  96. if ($plik == "konkretny_plik.pdf") {
  97. $tresc = "Sciagnieto Twoj abstrakt \"{$plik}\" .\r\n\r\nCzas: ".$czas."\r\nHost: ".$hostname." (".$_SERVER['REMOTE_ADDR'].")\r\nZ łącza: ".$_SERVER["HTTP_REFERER"]."\r\npo raz:".$nowy."\r\n ";
  98. mail( "adres@tlen.pl", "Doktoranci Info", $tresc, "From: tytuł<adres@tlen.pl>\r\n" );
  99. }
  100. //Poniższe wysyłanie jest identyczne jak w przypadku powyższym
  101. header('Pragma: no-cache');
  102. header('Content-Transfer-Encoding: binary');
  103. header('Content-type: application/xls'); //aplikacja odpowiedzialna za plik,
  104. header("Content-Disposition: attachment; filename=$plik"); //nazwa pliku,
  105. header("Location: http://adres strony"); //zródło pliku.
  106. //koniec wysyłania
  107. }
  108. mysql_close($db); //kończę połącznie z bazą danych
  109. }
  110. else
  111. {
  112. //jeżeli nie można połączyć się z bazą mySQL wyświetl komunikat o błędzie
  113. print "Błąd: Nie mogę połączyć się z bazą danych";
  114. }
  115. }
  116. }
  117. else
  118. {
  119. //jeżeli zostały wysłane złe dane do skryptu wyświetl błąd
  120. print "Błąd wywołania skryptu!!!";
  121. }
  122. ?>

najdziwniejsze jest to, że jedna tabela z ilością ściągnięć cały czas jest aktualizowana. Problem jest z tą drugą.
nie zapisuję mi wartości do niej tak jakby komenda "insert" nie działała. nawet mail jest wysyłany.

przejrzałem historię i wynika z niej, że błąd prawdopodobnie pojawił się po zmianie z php4 na php5. Czy możliwe, żeby zmieniła się składnia komendy "insert"?questionmark.gif
Uprawnienia użytkownika są ustawione na full za pomocą MYSQL Administrator. Ja już nie mam pomysłu.
co mogło się stać.

Bardzo proszę o pomoc.

dziękuję przepraszam jeśli jestem w złym dziale ale jestem tu nowy.
Pilsener
Jak można tak pisać skrypt? Wykonujesz masę operacji a nawet nie sprawdzasz, czy cokolwiek wykonało się poprawnie! Skąd teraz mamy wiedzieć, gdzie masz błąd? Na początek:
  1. if(mysql_query($zapytanie)){
  2. //odbieramy dane z bazy
  3. }else{
  4. //lub wyświetlamy błąd
  5. }


Prawie każda funkcja zwraca coś lub FALSE, jeśli wykonanie czegoś nie powiodło się - należy z tego korzystać. Nie można tak pisać kodu w nadziei, że zadziała.
Gregoire
Dziękuję bardzo...

jak już pokazało gdzie go boli to łatwo było znaleźć lekarstwo...

dzięki wielkie jeszcze raz...

p.s. jestem totalnym amatorem stąd te głupie błędy...
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.