Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] Dziwne działanie przycisku <button>
Forum PHP.pl > Forum > Przedszkole
glizda1125
Witam

Mam następujący problem:
  1. <?php
  2. <form method="post">
  3. <button type="submit" name="but1" value="val1">Przycisk</button>
  4. </form>
  5. ';
  6. echo "wynik= $_POST[but1]";
  7. ?>

Jeśli odpale to w IE i kliknę na przycisk wyświetli mi
Przycisk czyli to co jest pomiedzy znacznikami <button></button>
A pod operą wyświetli val1 czyli waretość value

Chcę aby w jednym formularzu było wiele przycisków o takiejsamej wartości wyświetlanej na przycisku ale przekazujących różne wartości za pomocą POST.
tzn.
  1. <?php
  2. <form method="post">
  3. <button type="submit" name="but1" value="val1">Przycisk</button><br />
  4. <button type="submit" name="but1" value="val2">Przycisk</button>
  5. </form>
  6. ';
  7. echo "wynik= $_POST[but1]";
  8. ?>


zeby w zależności jaki przycisk klikne przesyłał mi wartość val1 lub val2 a nie Przycisk, czyli tak jak w operze.

Czy jest to możliwe czy w dobrą stronę idę? questionmark.gif
minou
Kod
<input type="submit" name="nazwa" value="Treść 1">
<input type="submit" name="nazwa" value="Treść 2">


Koniecznie o tej samej wartości atrybutu name.

A w php łapiesz to tak:
Kod
<?
if ($_POST[nazwa]=="Treść 1"){
    //wykonuje co tam chcesz
}
elseif ($_POST[nazwa]=="Treść 2"){
    //wykonuje co tam chcesz
}
Shili
Która opera? Na mojej 9.24 wyświetla się wszystko dobrze.

Tylko jedna uwaga - może to powoduje błąd.
$_POST['name'] - to powinno być w uszach, czyli
  1. <?php
  2. echo 'wynik= '.$_POST['but1'];
  3. ?>
(najwydajniej)
glizda1125
Edytowałem posta i pozamieniał mi troche kod. Teraz juz poprawiłem to może będziecie wiedzieli blizej oco mi chodzi.

Chce zrobic cos takiego zeby bylo kilka przyciskow z wyswietlanym takim samym tekstem na nich (np Usuń).
Np mamy tabele z lista produktów i chce aby przy kazdym z nich był przycisk usuń i w zależności przy jakim produkcie bym kliknal usun to by przakazywalo np id tego produktu metodą POST.

  1. <?php
  2. <form method="post">
  3. <button type="submit" name="but1" value="val1">Przycisk</button><br />
  4. <button type="submit" name="but1" value="val2">Przycisk</button>
  5. </form>
  6. ';
  7. echo "wynik= $_POST[but1]";
  8. ?>

Po kliknieciu pierwszego przycisku zeby wyświetlalo mi wartość val1 a drugiego val2
W operze wlasnie tak sie dzieje w IE zamiast val1 i val2 wyswietla Przycisk
Shili
bo IE wysyła innerHTML.

Możesz podmienić to innerHTML przez js, z tym że prawdopodobnie będzie to widoczne na ułamek sekundy.
Kod
onclick="this.innerHTML=\'val1\';"


To oczywiście trzeba ustawić przy każdym buttonie z innymi wartościami winksmiley.jpg
Userzy IE przeważnie js nie wyłączają, ale przy wyłączeniu wszystko się posypie.
glizda1125
Cytat(Shili @ 4.06.2008, 21:42:25 ) *
Userzy IE przeważnie js nie wyłączają, ale przy wyłączeniu wszystko się posypie.


A nie ma metody bardziej uniwersalnej?
nospor
Dla kazdego usera tworz formularz z twoim przyciskiem i pole ukrytym (hidden). W value tego pola trzymaj id usera do skasowania. Wciskając przycisk, wysle sie tylko to hidden z danego forma co byl przycisk.
Shili
Przeczytaj sobie specyfikację microsoftu: http://msdn.microsoft.com/en-us/library/ms535211(VS.85).aspx
Oni po prostu jak zwykle obrali sobie inną drogę.
glizda1125
Cytat(nospor @ 4.06.2008, 21:57:12 ) *
Dla kazdego usera tworz formularz z twoim przyciskiem i pole ukrytym (hidden). W value tego pola trzymaj id usera do skasowania. Wciskając przycisk, wysle sie tylko to hidden z danego forma co byl przycisk.


Na taki sam pomysł też wpadlem.
Męczy mnie to, że jak bede mial np do wyswietlenia kilkadziesiat albo wiecej pozycji i do kazdej bedzie:
  1. <form method="post">
  2. <input type="hidden" name="nazwa" value="wartosc">
  3. <input type="submit" name="Przycisk">
  4. </form>

to czy plik nie zrobi sie bardzo duzy i nie bedzie dlugo ladowal. Z tego właśnie względu zacząłem szukać innego rozwiązania czy nie da sie wszystkiego zamiescic w jednym formularzu i dlatego napisałem tego posta.

Jak byście mieli jakies pomysły to piszcie.

P.S. Dzieki za zainteresowanie
Shili
Nie nie powinien. Sam plik html to wcale nie taka duża sprawa, jakby się mogło wydawać. Zrób z polem hidden i sprawdź ile waży wygenerowana strona - powinna wzrosnąć o jakieś około 5kB-10kB, może ciut więcej, może mniej przy 100 dodanych formularzach.
nospor
wszystko dlatego, ze sie uczepiles tego <button>
jakbys uzyl jak Bog przykazal <input type="submit" ...
albo poprostu linka to bys sie nie musial tak bawic.
glizda1125
Cytat(nospor @ 4.06.2008, 22:23:52 ) *
wszystko dlatego, ze sie uczepiles tego <button>
jakbys uzyl jak Bog przykazal <input type="submit" ...
albo poprostu linka to bys sie nie musial tak bawic.


Button uczepiłem sie dlatego że:
1. Chciałem żeby na przycisku wyświetlał mi np Usuń a przekazywał wartość np 1
  1. <input type="submit" name="Przycisk" value="1">

Przekazuje to co wyświetla czyli 1
A za pomocą <button> mozna było osiagnąć to co chciałem ale niestety nie na wszystkich przeglądarkach.
2. Nie chciałem używać linka bo chciałem żeby dane były przesyłane metodą POST a nie GET zawsze to ładniej wygjąda i nikt nie bedzie ci majstrował w linku.
3. W przykazaniech nie ma nic na temat przesyłania danych pomiędzy stronami tongue.gif
Jeśli sie myle to mnie poprawcie.
nospor
Cytat
i nikt nie bedzie ci majstrował w linku.
ale w post mozna ci rownie dobrze majstrowac co i w linku. Takze akurat ten Twoj argument jest kiepski winksmiley.jpg

Cytat
Przekazuje to co wyświetla czyli 1
Tu mnie masz.

A myslales o masowym usuwaniu? Robisz przy kazdym userze checkbox. na dole wszystkiego jeden przycisk "Usun". Usuwa tylko tych userow, ktorzy mieli wcisnietego checkboxa.
Checkboxom nadajesz nazwe tablicową, np: name="user[]". Dla checkboxa dla value nadajesz id usera. Dzieki temu w php pod zmienna $_POST['user'] bedziesz mial tablice id userow, ktorych zaznaczyles
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.