Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zawartość tablicy do zmiennej, oddzielanie "or"
Tomek58
post
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


Witam
Mam nazwy zapisane w pliku .php oddzielone spacją, z których tworzę tablicę.

Kod
$start = 0;
$baza1 = file_get_contents("./data/registeredusers.php");
$baza2 = explode(' ', $baza1);


Dajmy na to że zawartość pliku wygląda tak: nazwa1 nazwa2 nazwa3

Chciałbym zrobić aby zmiennej $test funkcja while przypisała wartości wczytane z pliku w taki sposób:

Kod
$test  = "nazwa1" or "nazwa2" or "nazwa3";


Aby zmienną $test można było potem wstawić do warunku if który sprawdzałby czy nazwa1 lub nazwa2 lub nazwa3 nie są identyczne z danym słowem. Czy da się coś takiego zrobić?


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. <?php
  2. $s = 'nazwa1 nazwa2 nazwa3';
  3. $s = '"'.str_replace(' ', '" or "', $s).'"';
  4. echo $s;
  5. ?>
Go to the top of the page
+Quote Post
Tomek58
post
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


Działa, ale gdy wstawię tą zmienną do warunku, to za każdym razem jest spełniony.

Kod
$baza1 = file_get_contents("./data/registeredusers.php");
$test = '"'.str_replace(' ', '" & $login !== "', $baza1).'"';

if ($test) {}


Mimo to że wartość zmiennej $test to: $login !== "b" & $login !== "c" & $login !== "d"


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
Maxik
post
Post #4





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


Może if(eval($test)){}


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
sowiq
post
Post #5





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Hehe smile.gif
if('"coś" or "coś"') to nie to samo, co if('coś' or 'coś')

Nie oczekuj, że PHP 'domyśli się', co akurat miałeś na myśli smile.gif

Proponuję tak:
  1. <?php
  2. $s = 'nazwa1 nazwa2 nazwa3';
  3. $tab = explode(' ', $s);
  4. $szukany = "nazwa3";
  5. if(in_array($szukany, $tab))
  6.    echo "OK";
  7. else
  8.    echo "NI MA...";
  9. ?>


Ten post edytował sowiq 31.10.2008, 18:20:07
Go to the top of the page
+Quote Post
l0ud
post
Post #6





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Bo tak się nie da. PHP traktuje zawartość zmiennej jako string, a że jest on inny od 0 to warunek zostaje spełniony.

Doraźnym rozwiązaniem tego problemu jest odpowiednie użycie eval:
http://pl2.php.net/manual/pl/function.eval.php

Ale odradzam. Dużo lepiej po prostu wczytać wszystkie loginy do tablicy, a później zrobić warunek:
  1. <?php
  2. if (in_array($login, $array)) {
  3. ?>


prawda, że prościej? smile.gif

http://pl2.php.net/manual/pl/function.in-array.php


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Tomek58
post
Post #7





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


Teraz działa, bo zwraca FALSE, ale wyskakuje błąd:

Kod
[b]Parse error[/b]:  syntax error, unexpected $end in [b]D:\Serwer\a\actions\reg.php(26) : eval()'d code[/b] on line [b]1[/b]


Aha, jeszcze jest jeden bały błąd podczas wczytywania danych do zmiennej $test, bo jako pierwsza wczytuje się literka "a", bez $login !== :

Cytat
"a" & $login !== "b" & $login !== "c" & $login !== "d"


EDIT: Błąd ten wyskakuje po użyciu eval.

Ten post edytował Tomek58 31.10.2008, 18:21:26


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
sowiq
post
Post #8





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


Nie &, tylko && (jeśli masz na myśli AND)
Go to the top of the page
+Quote Post
Tomek58
post
Post #9





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


Dzięki za pomoc. Z użyciem in_array jest dużo prościej smile.gif. Wszystko działa.

Pozdrawiam


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

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 Aktualny czas: 19.08.2025 - 19:50