Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z explode
Oklejek
post 10.10.2012, 18:42:38
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 30.01.2012

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


Witam, mam taki kod:
Plik users.ini:
  1. "nick" "haslo" "sqrnp" "a"

  1. $tablica = file(users.ini);
  2. for ($i=0; $i<count($tablica); $i++)
  3. {
  4. $tekst = preg_replace('/"/', '[;spacja]', $tablica[$i]);
  5. $t = explode('[;spacja]',$tekst);
  6. $nick = $t[1];
  7. $haslo = $t[3];
  8. $flagidostepu = $t[5];
  9. $flagikonta = $t[7];
  10. $nowe = '"'.$nick.'" "'.$haslo.'" "'.$flagidostepu.$_POST['klasa'].'" "'.$flagikonta.'"';
  11. if($nick == $nick2) $linia = $i;
  12. }

Wyrzuca mi błędy:
Notice: Undefined offset: 1 in C:\xampp\htdocs\sklep\config2.php on line 795

Notice: Undefined offset: 3 in C:\xampp\htdocs\sklep\config2.php on line 796

Notice: Undefined offset: 5 in C:\xampp\htdocs\sklep\config2.php on line 797

Notice: Undefined offset: 7 in C:\xampp\htdocs\sklep\config2.php on line 798
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CTRL
post 10.10.2012, 18:47:27
Post #2





Grupa: Zarejestrowani
Postów: 133
Pomógł: 8
Dołączył: 23.09.2011
Skąd: Stromiec

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


Jaki kod jest w tych liniach które XAMPP pokazuje jako winne?
zacznij od 'users.ini'
Nie jestem też pewien czy file() zwróci tablicę...
Jeśli już nie możesz użyć bazy danych to obczaj YAML (dla php jest bibilioteka Spyc)

Ten post edytował CTRL 10.10.2012, 18:50:10


--------------------
Go to the top of the page
+Quote Post
bostaf
post 10.10.2012, 18:53:53
Post #3





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


W tablicy $t nie ma indeksów 1, 3, 5, i 7, do których odwołujesz się w liniach 795, 796, 797 i 798 w pliku sklep/config2.php.
Go to the top of the page
+Quote Post
Oklejek
post 10.10.2012, 18:57:55
Post #4





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 30.01.2012

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


To jakim cudem przypisuje do zmiennych $nick, $haslo itd. dane?
795 linia to 6 tego kodu i odpowiednio następne...
Go to the top of the page
+Quote Post
b4rt3kk
post 10.10.2012, 19:10:01
Post #5





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Być może niektórym przypisuje, a niektórym nie, upewnij się czy aby na pewno każdy obrót pętli zwraca zamierzone wartości.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
tr!ckle
post 11.10.2012, 14:24:29
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 12.05.2009

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


Poza tym nie lepiej zamiast preg_replace zrobić coś takiego?:

  1. //w petli
  2. $tekst = trim($tablica[$i], '"');
  3. $t = explode('" "', $tekst);


IMO szybciej i czytelniej (nie trzeba indeksować co druga wartość).
Poza tym w tym przypadku jeśli już upierasz sie przy replace, to użyj str_replace. Nie potrzebujesz używać wolniejszego preg_replace aby podmienić cudzysłowy na inny string.
Jeśli natomiast masz nieokreśloną odległość między słowami, to imo wygodniej użyć preg_split zamiast replace i explode.

Dodatkowo jak chcesz mieć pewność, że nie będzie błędów offsetu możesz skorzystać z funkcji next i current albo najzwyczajniej sprawdzać czy $t[x] nie jest puste.
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: 14.08.2025 - 01:33