Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błędne oznaczanie kodów
Forum PHP.pl > Forum > Przedszkole
siusiak1000
Witam,
mam pewien problem. Posiadam skrypt pobierania za sms i jest w nim jeden problem. Gdy ktoś wyśle sms to normalnie przychodzi do niego kod zwrotny, który musi wpisać na stronie. Lecz przy wpisywaniu od razu po zatwierdzeniu oznacza go jako błędy kod dostępu. Sprawdzając w bazie kod zostaje oznaczony jako wykorzystany. Najdziwniejsze jest to, że u większości wszystko działa poprawnie i można pobrać dany plik.


  1. function check_code($code)
  2. {
  3. $res = database_query("SELECT msg_id FROM messages WHERE msg_code = '$code'");
  4. if(database_error())
  5. {
  6. printf("ERROR\nProblem z baza danych podczas weryfikacji kodu:".database_error());
  7. }
  8. if(database_next_row($res))
  9. return false;
  10. return true;
  11. }



  1. //wygeneruj kod, sprawdz, czy jest unikalny.
  2. $code = code_generate($config_code_length);
  3. while(!check_code($code))
  4. $code = code_generate($config_code_length);
  5.  
  6. //zapisz kod, nowa wiadomosc w bazie danych
  7. database_query("INSERT INTO messages(msg_orig,msg_dest,msg_text,msg_code,msg_smsid,msg_code_value) VALUES ('$_sms_orig','$_sms_dest','$_sms_msg','$code',$_sms_id,".sms_value($_sms_dest).")");
  8. if(database_error())
  9. {
  10. printf("ERROR\r\nProblem z baza danych podczas zapisywania wiadomosci:".database_error());
  11. }


oraz plik codecheck.inc

  1. function code_check($_code)
  2. {
  3. $codeDate = date("Y-m-d H:i:s", strtotime("-30 days",time()));
  4. $res = database_query("SELECT * FROM messages WHERE msg_code = '".database_escape_string($_code)."' AND msg_tm > '".$codeDate."' AND msg_code_used IS NULL");
  5. if(database_error()) return false;
  6. $row = database_next_row($res);
  7. if(!$row)
  8. {
  9. return Array("code"=>-1, "value"=>0);
  10. }
  11. return Array("code"=>$row["msg_id"], "value"=> $row["msg_code_value"], "sms_text"=> $row["msg_text"]);
  12. }
javafxdev
a gdzie używasz funkcji code_check()? widzę tylko użycie check_code.
siusiak1000
W innym osobnym pliku.

Kod poniżej:

  1. //w wypadku bledu podlaczenia - blad fatalny
  2. if(!code_connect())
  3. $fatalerror = "Blad polaczenia z baza danych. System chwilowo niedostepny. Przepraszamy.";
  4.  
  5. if(isset($_POST["code"]))
  6. {
  7. //pobierz kod z zapytania HTTP
  8. $code = $_POST["code"];
  9. if(!isset($code) && strlen($code)>0)
  10. {
  11. $codeerror = "Bledny kod dostepu. (db)";
  12. }
  13. else
  14. {
  15. //sprawdz kod w bazie
  16. $coderes = code_check($code);
  17. if(!$coderes)
  18. {
  19. $fatalerror = "Blad polaczenia z baza danych. System chwilowo niedostepny. Przepraszamy. (sql)";
  20. }
  21. else
  22. {
  23. //jak identyfikator kodu mniejszy od zera, to kod jest bledny
  24.  
  25. if($coderes['code'] < 0 || $_POST['nr'] != trim(explode(".",$coderes['sms_text'])[1]) )
  26. {
  27. $codeerror = "Bledny kod dostepu.";
  28. }
  29. else
  30. {
  31. //poprawny kod. zapisz informacje w sesji i bazie
  32. code_mark($coderes["code"]);
  33.  
  34. //pobieranie pliku
  35. $filename = '../../ewydanianowyfolder/EwyDaniA/PliKIPeDeef/' . $_POST['file'];
  36. $fileinfo = pathinfo($filename);
  37. $sendname = $fileinfo['filename'] . '.' . strtoupper($fileinfo['extension']);
  38.  
  39. header('Content-Type: application/pdf');
  40. header("Content-Disposition: attachment; filename=\"$sendname\"");
  41. header('Content-Length: ' . filesize($filename));
  42. readfile($filename);
  43. }
  44. }
  45. }
  46. }



Dziwne to jest... Wcześniej na operze oznaczało mi kod jako użyty a teraz na chrome, firefoxie, operze, IE nie ma tego problemu, lecz inni użytkownicy dalej zgłaszają problemy...
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.