Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]pomoc przy zadaniu, czy jest ktoś w stanie zrobić i wytłumaczyć co i jak powinno być w tym
loooki92
post 23.09.2015, 13:02:23
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.09.2015

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


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();
/*
Go to the top of the page
+Quote Post
mar1aczi
post 23.09.2015, 13:15:18
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


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.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
KsaR
post 23.09.2015, 13:17:33
Post #3





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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

Ten post edytował KsaR 23.09.2015, 13:18:04


--------------------
Go to the top of the page
+Quote Post
loooki92
post 23.09.2015, 16:23:09
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.09.2015

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


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
Go to the top of the page
+Quote Post
Pyton_000
post 23.09.2015, 16:32:44
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


tobie wystarczy md5()
Go to the top of the page
+Quote Post
redeemer
post 23.09.2015, 16:37:05
Post #6





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


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ć.


--------------------
Go to the top of the page
+Quote Post
KsaR
post 23.09.2015, 16:47:13
Post #7





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Ano, nie doczytalem tego 32. tongue.gif
Kierowalem sie powtarzalnoscia.


--------------------
Go to the top of the page
+Quote Post
loooki92
post 23.09.2015, 17:12:18
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 23.09.2015

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


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];


Ten post edytował loooki92 23.09.2015, 17:02:13
Go to the top of the page
+Quote Post
thek
post 23.09.2015, 19:31:48
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 04:50