Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zawartość tablicy do zmiennej, oddzielanie "or"
Forum PHP.pl > Forum > Przedszkole
Tomek58
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ć?
phpion
  1. <?php
  2. $s = 'nazwa1 nazwa2 nazwa3';
  3. $s = '"'.str_replace(' ', '" or "', $s).'"';
  4. echo $s;
  5. ?>
Tomek58
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"
Maxik
Może if(eval($test)){}
sowiq
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. ?>
l0ud
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
Tomek58
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.
sowiq
Nie &, tylko && (jeśli masz na myśli AND)
Tomek58
Dzięki za pomoc. Z użyciem in_array jest dużo prościej smile.gif. Wszystko działa.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.