Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][skrypt] Prosze o sprawdzenie logiczności i błędów, oraz o propozycje
Forum PHP.pl > Forum > Przedszkole
thomson89
Poniżej prosty skrypt, pokazujący kiedy ostatnio byleś na stronie. Proszę o sprawdzenie:
- poprawności ze świata relnego
- poprawności logicznej
- poprawności językowej (php)
Oraz o ewentualne propozycje rozbudowy.
  1. <?php
  2. function ostatnio()
  3. {
  4.   if(!isset($_COOKIE['kiedy'])){
  5.      $teraz = date("H:i");
  6.      setcookie("kiedy", $teraz);
  7.      return $_COOKIE['kiedy'];
  8.   }
  9.   else {
  10.      //ustawianie nowego czasu
  11.      $teraz = date("H:i");
  12.      $ostatnio = $_COOKIE['kiedy'];
  13.      //zmiana godziny na sekundy
  14.      $minelo = explode(':', $ostatnio);
  15.      $godz = $minelo[0];
  16.      $min = $minelo[1];
  17.      $godz*60*60;
  18.      $min*60;
  19.      $sek1 = $godz+$min;
  20.      //to samo z czasem teraz
  21.      $teraz_cz = explode(':', $teraz);
  22.      $godz = $teraz_cz[0];
  23.      $min = $teraz_cz[1];
  24.      $godz*60*60;
  25.      $min*60;
  26.      $sek2 = $godz+$min;
  27.      //obliczanie ile czasu temu byles
  28.      $sek_temu = $sek2-$sek1;
  29.      if($sek_temu>60){
  30.         $sek_temu/60;
  31.         $min_temu = explode(',', $sek_temu);
  32.         $tresc = "Ostatnio tu byleś".$min_temu[0]." minut temu i ".$min_temu[1]." sekund.";
  33.        
  34.      }
  35.      if($min_temu[0]>60){
  36.         $min_temu[0]/60;
  37.         $godz_temu = explode(',', $min_temu[0]);
  38.         $tresc = "Ostatnio tu byleś".$godz_temu[0]." godzin temu, ".$godz_temu[1]."minut i".$min_temu[0]." sekund.";
  39.      }
  40.      setcookie("kiedy", $teraz);
  41.      return $tresc;
  42.      
  43.   }
  44. }
  45. ?>


I wywołujemy, dołączając plik z funckjami i wywołując:
  1. <?php
  2. $cos = ostatnio();
  3. echo $cos;
  4. ?>
Maxik
Dokładnie się nie przygladałem, ale zamiast date użyłbym unixowego znacznika czasu, prościej obliczać.
Crozin
Skrypt ten polegnie, gdy ostatnio byłbym wczoraj (inny dzień). Jak już wspomniano wcześniej - lepiej będzie Ci operować na dacie w formacie UNIXowym (time" title="Zobacz w manualu PHP" target="_manual).

I co to za zadanie: Ostatnio byłeś tu 6 minut temu i 12 sekund.
Chyba: Ostatnio byłeś tutaj 6 minut i 12 sekund temu (chociaż i tak lepiej zapisać 6 minut temu - po co sekundowa dokładność?)
Rafal Filipek
1)
Kod
<?php
function spr(){
    setcookie('test',1);
    return $_COOKIE['test'];
}
var_dump(spr());
?>

gwarantuje ci ze jak odpalisz ten skrypt pierwszy raz to bedziesz mial blad w return $_COOKIE['test']; bo bez przeladowania nie bedzie takiego ciastka

2) twoja funkcja w zaleznosci od warunku zwraca albo $_COOKIE albo caly komunikat, dziwne.
3) w php nie ma funkcji leży_jerzy_na_wieży() wieć staraj się też pisać swoje skrypty stosując angielskie nazwy zmiennych, funkcji itp.
4) nierozumiem czemu sobie utrudniasz tak z tymi datami i czasami. czemu nie przechowujesz timestamp cookies ? zobacz, to co twój skrypt robi od 9 do 46 linijki
Kod
<?php
$now = time();
$last = time() - rand(5000, 10000);
$time = getdate($now-$last);
if($time['hours']-1>0){
    echo 'Ostatnio byłeś tutaj '.($time['hours']-1).' godzin, '.$time['minutes'].' minut, '.$time['seconds'].' sekund temu';
}else{
    echo 'Ostatnio byłeś tutaj '.$time['minuts'].' minut, '.$time['seconds'].' sekund temu';
}
?>

tylko trzeba -1 od godzin bo liczy od 0.
thomson89
Dziekuję.
SzamanGN
Nie jestem ekspertem od języka polskiego, ale ja bym napisał w linii 39 pierwszego kodu:
  1. <?php
  2. $tresc = 'Ostatnie odwiedziny były ';
  3. if ($godz_temu[0]>4) $tresc.=$godz_temu[0].' godzin, ';
  4. if ($godz_temu[0]>1 && $godz_temu[0]<5) $tresc.=$godz_temu[0].' godziny, ';
  5. if ($godz_temu[0]==1) $tresc.=$godz_temu[0].' godzinę, ';
  6. if ($godz_temu[1]>4) $tresc.=$godz_temu[1].' minut, ';
  7. if ($godz_temu[1]>1 && $godz_temu[1]<5) $tresc.=$godz_temu[1].' minuty, ';
  8. if ($godz_temu[1]==1) $tresc.=$godz_temu[1].' minutę, ';
  9. if ($min_temu[0]>4) $tresc.=$min_temu[0].' sekund ';
  10. if ($min_temu[0]>1 && $min_temu[0]<5) $tresc.=$godz_temu[0].' sekundy ';
  11. if ($min_temu[0]==1) $tresc.=$min_temu[0].' sekundę ';
  12. $tresc.='temu.';
  13. ?>


A tak dalej, to:
Jak rozwiążesz problem wspomniany wyżej (jeżeli to będzie dłużej niż 1 doba)?
Dlaczego nie używasz time (łatwiej)?
Czy to jest aż tak ważne aby pokazać dokładną różnicę czasu?
Czy nie lepiej napisać: Ostatnio odwiedziłeś tą stronę DD-MM-YYYY o HH:MM (formatu daty i czasu chyba nie trzeba tłumaczyć)?
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.