Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]pomoc przy zadaniu
Forum PHP.pl > Forum > Przedszkole
loooki92
Witam, mam problem z poniższym zadaniem. Dostałam kilka zadań ale z tym jednym nie mam kompletnie pojęcia jak się za nie zabrać. Znajdzie się ktoś na tyle wyrozumiały zeby je zrobić i możliwie jak najdokładniej skomentował?

Napisz funkcję, która:
- zbierze możliwe informacje o użytkowniku z $_SERVER
- na ich podstawie utworzy ich stosunkowo unikalny identyfikator (maks 32 znaki) i go zwróci
/function userUniqId(){

}
$userId=userUniqId();
/*
mar1aczi
Zacznij od tego: http://php.net/manual/en/reserved.variables.server.php
Wyszukaj, które dane z tej tablicy odnoszą się do użytkownika i można z nich skorzystać do wygenerowania unikalnego identyfikatora.
KsaR
Hm.
Możesz pobrać np.
  1. $userAgent=$_SERVER['HTTP_USER_AGENT'];
  2. $ip=$_SERVER['REMOTE_ADDR'];


I zahashować je jakimś algorytmem który zrobi to jak najbardziej unikalnie.
Np.

  1. echo hash_hmac('sha512', $userAgent, $ip); # $ip jako sól biggrin.gif

Jednak nie mam pewnosci czy o takie cos chodzilo tongue.gif
loooki92
Zrobiłam jednak coś takiego:

  1. $agent = "X".$_SERVER['HTTP_USER_AGENT'];
  2. $przegladarka = array('Internet Explorer' => 'MSIE', 'Mozilla Firefox' => 'Firefox'
  3. ,'Opera' => 'Opera', 'Chrome' => 'Chrome');
  4.  
  5. foreach ($przegladarka as $nazwa => $id)
  6. if (strpos($agent, $id)) $przegladarka = $nazwa;
  7. echo "Twój IP: <b>".$_SERVER['REMOTE_ADDR']."</b><BR>";
  8. echo "Przegladarka: <b>".$przegladarka."</b><BR>";


Pokazuje mi teraz moje IP oraz przeglądarke z jakiej korzystam tylko teraz jak zrobić ten uniwersalny identyfikator? php.gif
Pyton_000
tobie wystarczy md5()
redeemer
Cytat(Pyton_000 @ 23.09.2015, 17:32:44 ) *
tobie wystarczy md5()


Cytat
(maks 32 znaki)
Tak naprawdę to już jest podpowiedź jakiego hashowania użyć.
KsaR
Ano, nie doczytalem tego 32. tongue.gif
Kierowalem sie powtarzalnoscia.
loooki92
Czyli mniej więcej taki kod powinien być już ok? :

  1. $userAgent= "X".$_SERVER['HTTP_USER_AGENT'];
  2. $ip=$_SERVER['REMOTE_ADDR'];
  3. $przegladarka = array('Internet Explorer' => 'MSIE', 'Mozilla Firefox' => 'Firefox'
  4. ,'Opera' => 'Opera', 'Chrome' => 'Chrome');
  5. $hash = md5($userAgent);
  6.  
  7. foreach ($przegladarka as $nazwa => $id)
  8. if (strpos($userAgent, $id)) $przegladarka = $nazwa;
  9. echo "Twój IP: <b>".$_SERVER['REMOTE_ADDR']."</b><BR>";
  10. echo "Przegladarka: <b>".$przegladarka."</b><BR>";
  11. echo ($hash);


Zrobię to tak jak jest wyżej, a teraz mam kolejne pytanie, a w zasadzie prośbę o sprawdzenie:
Treść:
funkcja, która przyjmie jako parametr, wynik funkcji stringRepeat i
- sprawdzi czy string zawiera napis 'koniecznie' i umieści wynik tego sprawdzenia
w zmiennej $stringExist o typie boolean
- policzy ilość wystąpięń stringu podanego jako parametr $newString i umieści wynik
w zmiennej $stringCount o typie int

Zrobiłam coś takiego ale nie do końca jestem przekonana co do poprawności.

Z góry dziękuje za pomoc

  1. function stringExistCount($multipliedString, $newString)
  2. {
  3. if (strpos($multipliedString, "koniecznie") === true)
  4. {
  5. $stringExists = True;
  6. }
  7. else
  8. {
  9. $stringExists = False;
  10. }
  11. $stringCount = substr_count($multipliedString, $newString);
  12. return array($stringExists, $stringCount);
  13. }
  14. $multipliedString = str_repeat('koniecznie', 20);
  15. $result = stringExistCount($multipliedString, 'koniecznie');
  16. echo $result[1] ? 'true ' : 'false ';
  17. echo $result[1];
thek
Ogólnie podejście dobre, choć zapomniałaś, że indeksowanie tablicy jest od 0, a nie 1. No i można nieco sprawę zoptymalizować przyjmując pewne wartości domyślne. Funkcję masz jednak wykonaną w miarę poprawnie ( poza sprawdzeniem wystąpienia... sprawdź co i kiedy zwraca ta funkcja)i to o czym wspominam to już nieco "czepialstwo". Ogólnie można też zamiast posługiwać się w wyniku indeksem tablicy asocjacyjnej, by wiadomo było czym są 0 i 1 indeks wyniku. Stąd bardziej optymalne jest moim zdaniem wyrzucenie osobnych zmiennych (choć to pogwałcenie założeń zadania wink.gif ) i od razu posłużenie się tablicą. W efekcie powstanie nam:
  1. function stringExistAndCount($search, $newString) {
  2. $result = ['stringExists' => false, 'stringCount' => 0]; /* wartości domyślne */
  3. if (strpos($search, "koniecznie") !== false) {
  4. $result['stringExists'] = true;
  5. };
  6. $result['stringCount'] = substr_count($search, $newString);
  7. return $result;
  8. }

A teraz pytanie jakie możesz zadać nauczycielowi, by go zaskoczyć wink.gif Czemu gdy wywołamy funkcję w postaci stringExistAndCount('alalalala', 'ala') wynik będzie ['stringExists' => false, 'stringCount' => 2] a nie przykładowo ['stringExists' => false, 'stringCount' => 4] wink.gif Jeśli tego sama nie wiesz, to sprawdź jak działa substr_count.
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.