• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z operacjami na plikach PHP

Object Storage Arubacloud
0 głosów
232 wizyt
pytanie zadane 29 stycznia 2019 w PHP przez zerakot Obywatel (1,870 p.)
edycja 29 stycznia 2019 przez zerakot

Witam,

Mam problem ze skryptem logowania przez plik .txt, ponieważ kiedy porównuję $StareDane z $wynik to nawet bez sprawdzania wychodzi False. $wynik robię na "wwww" a w pliku Ja.txt jest zawartość "wwww", ale nie działa.

KOD:

<body>

<form method="post">
	<div id="menu">
		Nazwa:      <input type="text" name="nazwa"></input>
			<br/><br/>
		Hasło:      <input type="text" name="haslo"></input>
			<br/><br/>
		<input type="submit" value="Zaloguj"></index>
	</div>
</form>

	<?php
		
		
	if ($_SERVER['REQUEST_METHOD'] === 'POST')
	{
		$nazwa = $_POST['nazwa'];
		$haslo = $_POST['haslo'];
		$wynik = $nazwa.$haslo;
		$fp = fopen("Ja.txt", "r");
		$StareDane = fread($fp, filesize("Ja.txt"));
		
		if(isset($nazwa) && isset($haslo))
		{
			
			if(trim($StareDane) == trim($wynik))
			{
				echo "test";
			}else{echo "test2";}
		}
	}	
	?>
</body>

 

komentarz 29 stycznia 2019 przez efiku Szeryf (75,160 p.)
Ten sposób jest mocno niepraktyczny i tak nie powinieneś bawić się z hasłami... i nie ma prawa działać.

Do zabawy z hasłami lepiej używać funkcji password_hash i password_verify, a takie dane trzymać (na upartego w pliku txt) ale w postaci array i zserializowane (serialize).

Wtedy używasz tylko funkcji unserialize + file_get_contents lub serialize + file_put_contents  i masz tablicę. Baza to nośnik więc można łatwo zmienić z plików na coś innego.

http://php.net/manual/en/spl.files.php
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
Myślę, że łatwiej będzie to zrobić za pomocą MYSQL

2 odpowiedzi

0 głosów
odpowiedź 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)

Zrób prosty test:

echo "Wynik: ".$StareDane." oraz ".$wynik."<br>";

Dodaj to zaraz po warunku if(isset...

Wyjdzie dlaczego nie działa.

komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
No i wynik: Wynik: wwww oraz wwww
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
No i pod spodem tekst "test" a więc warunek się zgadza - czyli true.
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
No, ale "False" czyli po prostu zaprzecza i wykonuje kod else. A to był ten if: if(trim($StareDane) == trim($wynik)) { echo "test"; }else{echo "test2";}
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
Kod else jest wykonywany jeżeli to co jest podane w formularzu jest niezgodne z tym co znajduje się w pliku. Wszystko działa poprawnie.
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
No ale w formularzu jest "wwww" i w pliku "wwww", a w porównaniu wychodzi, że one nie są takie same.
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
Są takie same, PHP poprawnie uruchamia "echo test" jeżeli dajesz wwww i w pliku jest wwww (niezależnie czy dasz to w nazwe czy w haslo bo tak czy siak są łączone w jeden). Tak samo w przypadku podania nieprawidłowej wartości jest odpalana druga opcja.

W jaki sposób porównujesz, że wychodzi Ci, że nie są takie same?
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
W Nazwa: ww

W Hasło: ww

 

I jak napiszę echo $wynk;

to wychodzi "wwww" ,

A jak napiszę echo $StareDane to też wychodzi "wwww".
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)

No w ten sposób działa ten skrypt, bierze Nazwa + Hasło i skleja w jeden, tak więc:

Nazwa = ww

Hasło = ww

Wynik tego to: wwww.

a potem porównuje z zawartością pliku Ja.txt w której jest także zapisane "wwww".

Sprawdź czy nie robisz jakiejś literówki, brak nawiasu etc.

komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
Jeśli Pan może, proszę wypróbować ten kod i przekonać się, że takowy nie działa
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)

To jest cały kod: (proszę nie zapomnieć o zrobieniu pliku Ja.txt)

 

<!DOCTYPE HTML>
<html lang= "pl">
<head>
<meta charset = "utf-8" />
<title> Zaloguj</title>
<meta name="description" content= test2 />
<meta name= "keywords"content="Cytaty.pl" />
	<meta http-equiv="X-UA-Compatible" content= "IE=edge,chrome=1" />

</head>
<body>

<form method="post">
	<div id="menu">
		Nazwa:      <input type="text" name="nazwa"></input>
			<br/><br/>
		Hasło:      <input type="text" name="haslo"></input>
			<br/><br/>
		<input type="submit" value="Zaloguj"></index>
	</div>
</form>

	<?php
		
		
	if ($_SERVER['REQUEST_METHOD'] === 'POST')
	{
		$nazwa = $_POST['nazwa'];
		$haslo = $_POST['haslo'];
		$wynik = $nazwa.$haslo;
		$fp = fopen("Ja.txt", "r");
		$StareDane = fread($fp, filesize("Ja.txt"));
		
		if(isset($nazwa) && isset($haslo))
		{
			echo "Wynik: ".$StareDane." oraz ".$wynik."<br>";
			if(trim($StareDane) == trim($wynik))
			{
				echo "test";
			}else{echo "test2";}
		}
	}	
	?>
</body>
</html>

 

komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)

Dziwna sprawa, sprawdziłem. Tylko o dziwno (PHP 7.2) poprawnie puszcza warunek, choć sprawdzając var_dump($StareDane, $wynik) napis pochodzący z pliku jest o jeden większy niż ten sklejony od użytkownika.

Wygląda na to, że trim() nie do końca usuwa "spacje" lub dzieje się coś co powoduje dodanie znaku białego na końcu.

Tutaj bardziej szczegółowo i może lepiej wyjaśnione dlaczego tak się dzieje:

https://stackoverflow.com/questions/18299896/php-trim-and-space-not-working

 

Ja akurat obszedłem to w inny sposób:

 $StareDane = fread($fp, filesize("test.txt")-1);

Nie jest to może rozwiązanie nadto poprawne (czyt. eleganckie) lecz działa.

komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
W jakim miejscu w kodzie to wstawić?
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
Wszystko jest tak samo jak było jedynie na koniec, gdy mamy rozmiar pliku odejmujemy od niego 1.

Wtedy zarówno wprowadzany napis jak i ten z pliku są sobie równe.

Liczę na naj :)
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
Dostanie pan naj, ale kod działa jak wcześniej. Jakby pan mógł wkleić ten kod do siebie i sprawdzić dlaczego i wysłać mi pana kod z tą zmianą, ponieważ u mnie nic się nie zmieniło.

 

I w filesize napisał pan test.txt, a mój plik to zaloguj.txt
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
Tak wygląda to w moim wypadku: https://wklejaj.pl/23470

~ odpalane na PHP 7.2
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
Zaraz sprawdzę kod, ale jeśli mogę wiedzieć to co robi funkcja clearstatcache()
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)

W zasadzie również powinna być w komentarzu, użyłem jej w ramach testu. Jednak nie spełniła swojego zadania a używa się jej do czyszczenia bufora plików (clearstatcache).

komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
Niestety, u mnie ten kod nic nie zmienił. U pana działa?
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
Jak najbardziej, może czas zaktualizować PHP?
komentarz 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
A w jaki sposób?
komentarz 29 stycznia 2019 przez Tpk Nałogowiec (40,100 p.)
To już zależy od posiadanego oprogramowania, czy jest to np. XAMPP czy inne.

Przykładowo: https://blog.zyjespox.com/it/webdev/71-aktualizacja-pakietu-xampp-bez-straty-danych
0 głosów
odpowiedź 29 stycznia 2019 przez zerakot Obywatel (1,870 p.)
Dziękuję wszystkim za poświęcony czas, ale zrobię to przez MSQL.

Podobne pytania

0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 21 października 2020 w C i C++ przez milosz123 Użytkownik (720 p.)
0 głosów
3 odpowiedzi 224 wizyt
pytanie zadane 26 maja 2016 w PHP przez Jahumen Nowicjusz (190 p.)

92,630 zapytań

141,491 odpowiedzi

319,862 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...