Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Tatuator handpoke

Plaja de nudisti in Grecia?

Mufa microusb a telefonului mobil...

"Ciudatenii" control pasa...
 Impamantare

Apple maps pe Windows 10

Sfarsitul woke-ismului si al core...

Renovare completa + pompa de cald...
 Libre Office nu vad liniile

Modalitați amuzante și ...

O disparitie de ani buni, Acces D...

Mancarea e scumpa
 Parere achiziționare BMW G20

Schimbarea bateriei moderne la VA...

Rostschreck Lidl

Si noi suntem Florin Piersic? / J...
 

Eroare la rularea scriptului

- - - - -
  • Please log in to reply
30 replies to this topic

#1
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012
deci am urmatorul cod, ma voi referi la liniile 16-21, desi ar fi trebuit sa se opreasca bucla pana ce ¤i ia valoarea 12 vad ca continua pana la 15 si nu inteleg de ce
<?php
function check_user_details($user, $password, $file){
  $file_handle = fopen($file, 'r');
  while(!feof($file_handle)){
	   $content = fgets($file_handle, 400);
	   $compared_username = '';
	   $compared_password = '';
	   //obtinem usernameul din fisier
	   for($i = 0; $i <= strlen($content); $i++){
		  if($content[$i] === ' '){
			 break;
		  }
		  $compared_username .= $content[$i];
	  }
	 //obtinem parola din fisier
	 for($i = $i + 1; $i <= strlen($content); $i++){
		if($content[$i] === ' '){
			break;
		}
	   $compared_password .= $content[$i];
	 }
	//comparam rezultatele
	if($user === $compared_username && $password === $compared_password){
		$returned_value = TRUE;
		break;
	 } else {
		$returned_value = FALSE;
	 }
   }
  fclose($file_handle);
  return $returned_value;
}



#2
trackback

trackback

    Active Member

  • Grup: Members
  • Posts: 1,394
  • Înscris: 04.08.2011
In primul rand nu inteleg unde ai eroarea.
In al doilea rand, liniile 6 - 21 se puteau scrie: list($compared_username,$compared_password)=explode(' ',$content,2);

#3
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012

View Posttrackback, on 04 noiembrie 2012 - 23:01, said:

In primul rand nu inteleg unde ai eroarea.
In al doilea rand, liniile 6 - 21 se puteau scrie: list($compared_username,$compared_password)=explode(' ',$content,2);
Mie imi da eroare asta
Notice: Uninitialized string offset: 15 in D:\cristi\New folder\nett xampp\xampp\htdocs\project\functii\file_functions\logare.php on line 17
Notice: Uninitialized string offset: 15 in D:\cristi\New folder\nett xampp\xampp\htdocs\project\functii\file_functions\logare.php on line 20

pornind de la premiza ca userul =cristi si parola cu parola
si fisierul de unde le compara contine doar
cristi parola


Edited by MDCristi, 04 November 2012 - 23:06.


#4
trackback

trackback

    Active Member

  • Grup: Members
  • Posts: 1,394
  • Înscris: 04.08.2011
Trebuie sa mergi cu i pana la strlen(content)-1.

#5
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012

View Posttrackback, on 04 noiembrie 2012 - 23:08, said:

Trebuie sa mergi cu i pana la strlen(content)-1.
pai de ce? nu ar fi trebuit sa conteze valoarea lui strlen($content) caci eu i-am pus conditia  sa opreasca bucla cand apare primul caracter nul.

Edited by MDCristi, 04 November 2012 - 23:14.


#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostMDCristi, on 04 noiembrie 2012 - 23:10, said:

pai de ce?

0-based indexing. Aşa se face peste tot în informatică.

#7
trackback

trackback

    Active Member

  • Grup: Members
  • Posts: 1,394
  • Înscris: 04.08.2011
$s = "ana".
$s[0] = 'a';
$s[1] = 'n';
$s[2] = 'a';
strlen($s) = 3;
$s[3] -> nu exista.

#8
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012
pai stati putin chiar daca as fi pus conditia sa se opreasca bucla la i=100, n-ar fi trebuit sa se opreasca cand intalneste primul caracter nul(liniile 17-19)?
adica candn am apelat fgets nu am stocat in $content un string de 399 de caractere?

Edited by MDCristi, 04 November 2012 - 23:21.


#9
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostMDCristi, on 04 noiembrie 2012 - 23:17, said:

pai stati putin chiar daca as fi pus conditia sa se opreasca bucla la i=100, n-ar fi trebuit sa se opreasca cand intalneste primul caracter nul(liniile 17-19)?
adica candn am apelat fgets nu am stocat in $content un string de 399 de caractere?
Caracterul \0 (NUL) nu este expus de către PHP runtime-ului scriptului.

E păstrat doar intern, în reprezentarea sa C.

#10
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012
deci cand eu apelez $variabile = fgets(..) el nu imi seteaza un string de cate caractere i-am zis eu ci doar imi baga caracterele pana la primul char nul, deci de asta are $content 15?

#11
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostMDCristi, on 04 noiembrie 2012 - 23:29, said:

deci cand eu apelez $variabile = fgets(..) el nu imi seteaza un string de cate caractere i-am zis eu ci doar imi baga caracterele pana la primul char nul, deci de asta are $content 15?
Nu ştiu ce date ai tu acolo, dar nu, PHP nu se lasă încurcat de \0, el citeşte fie cât îi spui tu, fie până la \n sau EOF.

EOF nu e acelaşi lucru ca \0.

Unele editoare adaugă \0 automat la sfârşit, s-ar putea ca PHP să îl ignore într-o astfel de situaţie. Încearcă să deschizi fişierul în mod binar, vezi ce se întâmplă atunci (nu ştiu).

<insider_note>

Quote

400
Eficient e să citeşti deodată cât pune kernelul sistemului în RAM, 4096 sau ceva de genul. PHP foloseşte oricum memory-mapped files, d-aia n-are rost să te încurci cu mărimi gen "400".
</insider_note>

Edited by OriginalCopy, 04 November 2012 - 23:54.


#12
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012
n-ai inteles ce vreau eu sa zic, daca eu am un fisier de forma
ceva
altceva
inca ceva

si eu fac variabila $variabila =fgets($handel, 400)
asta insemna  ca $variabila va fi pe rand egal cu
ceva+395 de caractere goale
altceva + 392 de caractere nule
inca ceva + 389 de caractere nule

dar acum m-am prins de cum e treaba

#13
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012
man tot nu intelegi ce vreau eu sa zic, dac eu ii zic sa citeasca 400 de bytes(exemplu) eu vad totusi ca nu-mi returneaza un string de 399 de caractere

#14
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostMDCristi, on 04 noiembrie 2012 - 23:59, said:

man tot nu intelegi ce vreau eu sa zic, dac eu ii zic sa citeasca 400 de bytes(exemplu) eu vad totusi ca nu-mi returneaza un string de 399 de caractere
fread().

și/sau faci padding, cu str_pad().

Edited by OriginalCopy, 05 November 2012 - 00:06.


#15
trackback

trackback

    Active Member

  • Grup: Members
  • Posts: 1,394
  • Înscris: 04.08.2011
Defapt ii zici sa citeasca maxim 400 bytes din ce-i dai tu.

#16
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Oricum algoritmul e anapoda. Ori nu-ţi pasă de performanţă, ci de cod mai compact, şi foloseşti file() şi apoi explode(). Ori nu mai citeşti parola şi treci la următoarea linie.

Eu nici n-aş face aşa, aş salva datele direct într-un array PHP, ca dicţionar, şi n-aş mai fi nevoit să caut nimic.

#17
MDCristi

MDCristi

    Member

  • Grup: Members
  • Posts: 494
  • Înscris: 05.01.2012

View PostOriginalCopy, on 05 noiembrie 2012 - 00:14, said:

Oricum algoritmul e anapoda. Ori nu-ţi pasă de performanţă, ci de cod mai compact, şi foloseşti file() şi apoi explode(). Ori nu mai citeşti parola şi treci la următoarea linie.

Eu nici n-aş face aşa, aş salva datele direct într-un array PHP, ca dicţionar, şi n-aş mai fi nevoit să caut nimic.
pai si cand inregistrez un user? Ii pun valorile respectivesi in array, dar dupa rularea scriptului s-au dus, deci tot la lucrul cu fisiere revin(sau poate fac vreo functie ce scrie in fisierul cu array-ul). Performanta si compactitatea nu reprezinta un interes prentru mine in momentul de fata, vreau sa-mi fac eu toate functiile, sa ma folosesc doar de constructe si functiile de baza astfel incat dupa ce mi-am facut eu totul sa le folosesc pe alea puse la dispozitie de ei(asa intelg cu e faza). Structura fisierului se va schimba mult(nu va ramane de genul user parola) de asta ma "incapatanez" sa  merg pe algoritmul asta anapoda.

Edited by MDCristi, 05 November 2012 - 00:27.


#18
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Uite funcţie neanapoda, fără greşeli de logică, neperformantă, şi cu loc de extindere:

		 1 <?php
		 2 function check_user_details($user, $password, $file) {
		 3	   $data = file($file);
		 4	   foreach($data as $line) {
		 5			   list($u, $p) = explode(' ', rtrim($line));
		 6			   if($u == $user) {
		 7					   return $p == $password;
		 8			   }
		 9	   }
		10	   return FALSE;
		11 }


Dacă ai face cu PHP nativ, ai folosi:

file_put_contents('database.php', '<?php return '.var_export($data,TRUE));

încărcarea bazei de date:

$data = require 'database.php';


View PostMDCristi, on 05 noiembrie 2012 - 00:26, said:

pai si cand inregistrez un user? Ii pun valorile respectivesi in array, dar dupa rularea scriptului s-au dus
Deci nu s-au dus.

Edited by OriginalCopy, 05 November 2012 - 00:46.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate