Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Porównanie tablicy z danymi w formularzu
Forum PHP.pl > Forum > Przedszkole
mefistofeles
W tablicy $gat[], przechowuje nazwy kategorii (jeden,cztery)

Chciałbym sprawdzić czy nazwa przechowywana w

$gat[0];
$gat[1];
$gat[2];
(...)

Pasuje do kategorii z tego formularza:

  1. <select style='height:450px;' name='category[]' multiple='multiple'>";
  2. echo "<option value='0' class='pole'>Jeden</option>";
  3. echo "<option value='8' class='pole'>Dwa</option>";
  4. echo "<option value='21' class='pole'>Trzy</option>";
  5. echo "<option value='25' class='pole'>Cztery</option>";
  6. echo "</select>


a jeśli pasuje to, żeby odpowiednie pole zamieniło mi na:

  1. echo "<option selected value='21' class='pole'>Trzy</option>";



Jak to najprościej zrobić?
Jakbym miał znaleźć jedną konkretną kategorie i podmienić selecta to ok, ale tutaj nie wiem ile nazw kategorii zawiera $gat[] i jakimi pętlami
to połączyć, żeby wszystko działało niezależnie od ilości kategorii.

Proszę o pomoc.

Wykrywacz
Bierzesz foreach
i w ifie przyrównujesz do wartości z formularza jak są równe to echujesz czy co tam potrzebujesz.
mefistofeles
Zrobiłem tak jak mówisz, ale nie wiem jak podmienić to co jest w selectach:


  1.  
  2. foreach ($konkgat as &$value) {
  3.  
  4.  
  5. if preg_match_all($value, $content, $wynik)
  6.  
  7. {
  8.  
  9. echo $wynik;
  10.  
  11. }
  12.  
  13.  
  14.  
  15. }
  16.  
  17.  
  18. echo "<option value='0' class='pole'>jeden</option>";
  19. echo "<option value='8' class='pole'>dwa</option>";
  20. echo "<option value='21' class='pole'>trzy</option>";
  21. echo "<option value='2' class='pole'>cztery</option>";



Skoro optiony mam wyświetlane w taki sposób, że każda linia to osobne echo, to jak to zrobić żeby to działało ?
Wszystkie optiony zapisać pod jedną zmienną $content bez echo, przelecieć preg_match i wyświetlić poprostu tą zmienną za pomocą 1 instrukcji echo ?
Wykrywacz
Nie do końca czaje co chcesz zrobić, jeżeli chcesz bez przeładowywania strony dynamicznie coś zmieniać w tym wszystkim, to ja bym tym optionom nadał id, i ich wartości podmieniał przez JS.

Jeżeli nie o to ci chodzi to musisz bardziej łopatologicznie napisać w co chcesz zrobić bo nie czaje
mefistofeles
No wyświetlam formularz w ten sposób:

  1. <select style='height:450px;' name='category[]' multiple='multiple'>";
  2. echo "<option value='0' class='pole'>A</option>";
  3. echo "<option value='8' class='pole'>B</option>";
  4. echo "<option value='21' class='pole'>C</option>";
  5. echo "<option value='2' class='pole'>D</option>";
  6. echo "<option value='3' class='pole'>E</option>";
  7. echo "</select>";


I za pomocą tego:



  1. foreach ($konkgat as &$value) {
  2. //echo $value;
  3.  
  4. if preg_match_all($value, $content, $wynik)
  5.  
  6. {
  7.  
  8. echo $wynik;
  9.  
  10. }
  11.  
  12.  
  13.  
  14. }


Chce zamienić wiersz w którego kategoria zgadza się z ta ze zmiennej (preg_match), ale żeby to działało to cały formularz muszę mieć zapisany w tej zmiennej tak, a potem go wyświetlać
za pomocą echp $wynik ?
Wykrywacz
Czyli chcesz wyświetlić tylko te elementy formularza które są == $get[$i]

Czyli jeżeli masz w $get[0] = 21; i powiedźmy w $get[1] = 8;
To chciałbymś wyświetlić

<select style='height:450px;' name='category[]' multiple='multiple'>";
echo "<option value='8' class='pole'>B</option>";
echo "<option value='21' class='pole'>C</option>";
echo "</select>";

O to ci chodzi? czy się nie rozumiemy? smile.gif
mefistofeles
W $get[0] mogę mięć np A,

więc jeśli jest a to ma mi zamienić pole formularza w którym jest A

z:

<option value='8' class='pole'>A</option>";

na:


<option selected value='8' class='pole'>A</option>";

a resztę optionów ma wypisać bez zmian.
Wykrywacz
....
Po co ci ten preg_match ? to raz.
Te dane formularza generujesz sobie czy klepiesz z łapy?
Obliczenia robisz po przeładowaniu, czyli czy chcesz ponowne zaznaczenie mieć po przeładowaniu category[], czy chcesz mieć odpowiednią podpowiedź przy pierwszym generowania poprzez porównanie z tym czymś z tej twojej tablice $gat

Bo naprawdę nie wiem już po tym co ci napisałem w czym jeszcze masz problem, a angażując się w twój problem chciałbym ci pomóc go zakończyć.
mefistofeles
Dane formularza są zawsze takie same, tzn około 30 kategorii.

Preg_match ma mi sprawdzić czy to co jest w tablicy pasuje do którejś kategorii, a jeśli tak to ta
kategoria ma zostać automatycznie wybrana za pomocą SELECTED (może pasować kilka kategorii)
Oczywiści chce mieć to przy pierwszym generowaniu skryptu, odrazu.

Załóżmy, że mam zapisany cały formularz w zmiennej, nie jak miałem na początku wyświetlany za pomocą echo.
Sprawdzam czy dana kategoria pasuje, ale jak dodać to SELECTED w odpowiednim miejscu ?

  1. $formularz="<select style='height:450px;' name='category[]' multiple='multiple'>
  2. <option value='0' class='pole'>Akcja</option>
  3. <option value='8' class='pole'>Animowane</option>
  4. <option value='21' class='pole'>Anime</option>
  5. </select>"


Jak podmienić tylko tą część która pasuje do danej kategrii.
Jeśli w tablicy gatunek jest np. gatunek anime, to chce zamienić:

<option value='21' class='pole'>Anime</option>

na:

<option selected value='21' class='pole'>Anime</option>

Mam nadzieje, że wszystko jest już zrozumiałe smile.gif
Wykrywacz
Ja bym to zrobił za pomocą JS.

JS wywołujesz w body przy onload.

W js bierzesz sobie sobie formularz i pętlą for jedziesz po jego wszystkich optionach i tu już jak wiesz jak zrobić jak wynik będzie ci się zgadzał to poprostu nadajesz temu elementowi wartość select.

I wydaje mi się to sensowne, tym bardziej że nie odpowiedziałeś mi nadal czy te 30 optionów klepiesz z ręki czy wyświetlasz jako wyniki z pętli.
mefistofeles
Napisałem wcześniej: dane formularza są zawsze takie same, tzn około 30 kategorii (optionów).
Co do js to bez sensu.
Po co mam użyuwać js questionmark.gif
Przecież wszystkie skrypty będą się wykonywały podczas 1 odpalenia skryptu,także po co jakieś body onload itp ?
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.