Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Ce parere aveti de viteza/ modul ...

Love Lies Bleeding - 2024

Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...
 Receptie ciudata, in functie de t...

Donez medicamente renale ptr pisica

Ce componenta e asta si ce ziceti...

Dupa 20 ani de facultate, am uita...
 Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...
 Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio
 

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

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

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