Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zapisywanie wartości do bazy danych
Gregoire
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.05.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Gregoire 20.05.2010, 15:17:37
Go to the top of the page
+Quote Post
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.05.2010

Ostrzeżenie: (0%)
-----


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

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:57