Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: shell_exec i wyniki w select htmla
Forum PHP.pl > Forum > PHP
Aquarius
witam,
od wczoraj próbuję rozgryźć jak dokonać tego aby wyniki z wykonania funkcji shell_exec wstawić w pętli w formularzu <select><option>, niestety w kilkudziesięciu kombinacjach jakie wykonałem otrzymuję albo puste pole albo sam napis: Array
funkcja shell_exec zwraca wynik w postaci kilku (zawsze więcej niż 1) linii kończących się znakiem: \n
(sprawdzone, w logu dimension.log są zawsze zapisane linie)

  1. $cmd = trim(shell_exec("skrypt -i plik 2>&1 | grep dimension | awk '{print $0}' > dimension.log"));
  2. $dim = preg_split('/[\n]+/', $cmd);
  3. //$dim = explode("\n", $dim);
  4. foreach($dim as $line) {
  5. $select = "<option value='.$line.'>'.$line.'</option>";
  6. }


w takiej postaci otrzymuję w polu select jedno puste drugie '..'
gdzie popełniłem błąd? a może się nie da? może powinienem koniecznie zapisywać wyniki do pliku i wtedy pobrać wyniki z pliku? ale przecież czy to nie to samo?
nospor
Po pierwsze:
nie: $select = "<option value='.$line.'>'.$line.'</option>";
a: $select = "<option value='$line'>$line</option>";
Naucz się operować tekstem w php - to naprawdę proste

Po drugie:
print_r($dim); co wyswietla?
Aquarius
rzeczywiście apostrofy niepotrzebne, print_r() wyświetla:
  1. Array ( [0] => )
nospor
To jeszcze:
print_r($cmd);
Aquarius
nie zwraca nic, pusto
nospor
No to już wiesz gdzie leży problem. Teraz tam go szukaj. a na przyszłość postaraj się wpierw samemu zrobić tak prostą analizę sytuacji.
Aquarius
no tak, tylko dlaczego wyniki do dimension.log lądują bez problemowu?
nospor
> dimension.log
No bo przekierowujesz cały wynik na plik więc ci na ekran nic nie idzie. A jak nie idzie ci na ekran to nie idzie ci też do php.
Aquarius
ach... ślepota ze mnie, najpierw wysłałem wynik do pliku żeby sprawdzić czy składnia jest ok a potem zapomniałem to usunąć, dziękuję pięknie, rzeczywiście teraz działa jak należy smile.gif

no i wracam z jeszcze jednym problemem, nie będę oczywiście zakładał nowego tematu tylko podczepię się tutaj
otóż tym razem mam następujący problem, mam dwie pętle, (mało ważne, ale wyciągnięte z tej samej komendy shell_exec), chciałbym żeby do każdego elementu z drugiej pętli przypisana była nazwijmy to umownie zmienna $key która będzie miała wartości odpowiednio (w kolejności) z pierwszej pętli

próbowałem w ten sposób, ale wychodzi mi wielkie nic:
  1. $dimension = trim(shell_exec("skrypt -i plik 2>&1 | grep dimension"));
  2. $did = trim(shell_exec("skrypt -i plik 2>&1 | grep dimension | awk '{print $2}'"));
  3. $res = '';
  4. foreach($dimension as $did => $line) {
  5. $res .= "<option value='"substr($did, 1, 3)"'>".trim($line)."</option>";
  6. }


potrzebna jest druga pętla foreach? jeżeli to jak to mniej więcej wygląda?

teraz myślę że może niezbyt jasno się wyraziłem, miałoby to wyglądać mniej więcej tak:
komenda1 zwraca: biały, czerwony, niebieski
komenda2 zwraca: kwadrat, trójkąt, prostokąt

i teraz zamiast porządkowych numerów zmiennych poprzez użycie:
  1. foreach($line as $key => $wynik)

które wyświetli:
  1. <option value='1'>kwadrat</option>
  2. <option value='2>trójkąt</option>
  3. <option value='3'>prostokąt</option>


chciałbym otrzymać:
  1. <option value='biały'>kwadrat</option>
  2. <option value='czerwony'>trójkąt</option>
  3. <option value='niebieski'>prostokąt</option>
nospor
  1. foreach($dimension as $k => $v) {
  2. $res .= "<option value='$v'>".$did[$k]."</option>";
  3. }
Aquarius
piękne dzięki smile.gif w tym samym czasie kiedy odpisałeś ja załatwiłem to w nieco inny sposób (jak to łatwo idzie pominąć takie szczegóły), u mnie akurat poszło to załatwić innym sposobem, jako że dane były wyciągane z tej samej komendy której wynik ma zawsze taką samą postać na początku - skorzystałem z wbudowanej funkcji substr() wycinając z poprzednio wykorzystanej zmiennej $line
ale pewnie to co podałeś przyda się dla potomnych
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.