ugrás a tartalomhoz

Egy form, két submit gomb

gyuri11 · 2013. Júl. 19. (P), 02.44
Sziasztok,

Nézzetek el, hogy az amatőr kérdésemmel ismételten a közösséghez fordulok. A kérdésem a következő:

Adott egy form. A mezőkben különböző adatok, amelyeket most jelenleg GET-el adok át adatbázisból. De mivel 30-40 input mezőről van szó, enyhén szólva is macerás GET-el babrálni, kényelmesebb lenne POST-al. Én mivel lelkes kezdő vagyok, vizuális típus vagyok, ezért megpróbálom szemléltetni az alapfelállást.

<form method="post" action="valami.php">
<input name="1" valus"valami1">
<input name="2" valus"valami2">

<input type="submit" value="Törlés">
<input type="submit" value="Módosítás">
</form>

Tehát egy adott formba tartozó adatok alapján szeretnék vagy törölni, vagy módosítani. Ez mos per pillanat GET-el gyönyörűen működik (ugye ott <button> taget használok. De nagyon átláthatatlan így a kód.

submit gombbal, egy ugyanazon űrlappal át tudom valahogyan adni POST-al az adatokat úgy, hogy a két funkciót meg tudom különböztetni? A válaszokat előre is köszönöm.
 
1

A kérdésed maga nem igazán

Joó Ádám · 2013. Júl. 19. (P), 03.37
A kérdésed maga nem igazán érthető, de talán segít, ha tudod, hogy alapból a POST pont ugyanazt küldi, mint a GET, csak nem az URL-ben, és hogy a <button>-nak is tudsz adni value-t.
21

Csak IE6 alatt nem működik.

tgr · 2013. Júl. 20. (Szo), 13.37
Csak IE6 alatt nem működik.
22

IE6. Rég hallottam már ezt a

bamegakapa · 2013. Júl. 20. (Szo), 14.13
IE6. Rég hallottam már ezt a nevet.

Hacsak nem a kínai piacra dolgozol, nem éri meg foglalkozni vele.

IE6 Countdown

Egyre többen szüntetik meg az IE7 támogatását is. Én mondjuk hagyományos weboldalakat azon még szoktam tesztelni, általában egy rövid conditional stylesheet (inline-block fix meg pár más ráncfelvarrás) és a html5shiv elég ahhoz, hogy az oldal használható legyen, ne legyen szétesve.
24

Azért van különbség aközött,

tgr · 2013. Júl. 20. (Szo), 15.12
Azért van különbség aközött, hogy IE6-ban szétesik a design, meg hogy IE6-ban a mentés gombra kattintva törli a lapot, mert nem tudja az alkalmazásod, hogy melyik gombot nyomták meg. Nem mondom, hogy emiatt ne használj buttont (sőt 3-4 éve se mondtam volna), de azért illik tudni róla, hogy vanegy ilyen buktatója.
25

IE6

Hidvégi Gábor · 2013. Júl. 20. (Szo), 17.58
Szerintem ma Magyarországon rajtam kívül nem nagyon van, aki ügyelne arra, hogy akár jól nézzenek ki, akár jól is működjenek az általa készített weboldalak IE6-on, de még én is túlzásnak tartom, hogy erre a böngészőre bájtokat pazaroljunk, egyszerűen tényleg olyan kevesen használják, ráadásul, ha baj van, elég hamar kiderül úgyis (törlés előtt amúgy is kérdezni szoktunk).
26

Tiltakozom

Pepita · 2013. Júl. 20. (Szo), 23.42
Szerintem ma Magyarországon rajtam kívül nem nagyon van, aki ügyelne arra, hogy akár jól nézzenek ki, akár jól is működjenek az általa készített weboldalak IE6-on
Azért akad, ha nem is 100%-ban... :)
31

Remélem az IE 5-ről sem

bamegakapa · 2013. Júl. 21. (V), 10.31
Remélem az IE 5-ről sem feledkeztek meg, vannak emberek (úgy hallottam), akik ma is Windows 98-at használnak :). Bár telepíthető rá az IE6 (ahogy XP-re a 8), de alapból IE5 érkezett hozzá.
32

Persze

Pepita · 2013. Júl. 21. (V), 23.42
még commodore 16-omat is berúgom néha tesztelni :)
23

hello, mobilrol irok, ezert

Hidvégi Gábor · 2013. Júl. 20. (Szo), 14.29
hello, mobilrol irok, ezert nincs ekezet, bocs
adam edesanyja most hivott, hogy a fiuk a fenti link megnyitasa utan rovidesen horgesek kozepette osszeesett

most szallitjak korhazba, a mentoben masodszor kellett ujraeleszteni

en is rohanok be, hogy elmagyarazzam neki, van workaround!!! igaz, csak js
27

Komoly?!

Pepita · 2013. Júl. 20. (Szo), 23.45
Te Gábor, ha ez vicc akart lenni, akkor nagyon rosszul sült el - nálam.
-10000 WL erkölcsi pont.
28

Én jól szórakoztam :)

Joó Ádám · 2013. Júl. 21. (V), 00.28
Én jól szórakoztam :)
29

Ez azt jelenti, hogy már

Hidvégi Gábor · 2013. Júl. 21. (V), 07.14
Ez azt jelenti, hogy akkor már jobban vagy? : )
33

Menjetek a...

Pepita · 2013. Júl. 21. (V), 23.44
SÖRÖZŐBE! Ott elfér az ilyen, én éppen félig megettem, és nem volt finom.
30

Reméltem, hogy a három

Hidvégi Gábor · 2013. Júl. 21. (V), 07.16
Reméltem, hogy a három felkiáltójel és az utolsó mondat bekapcsolja majd az iróniadetektort.
34

Mostanában

Pepita · 2013. Júl. 21. (V), 23.46
nem túl jók az érzékelőim, te tudod. A :) amit tutira értek (még). Bocsi, én vettem rosszul, amúgy jó. Akkor is menjetek - ahova mondtam.
2

A GET változókat az $_GET

hunkris · 2013. Júl. 19. (P), 09.21
A GET változókat az $_GET tömbben éred el, a POST-ot pedig az $_POST tömbben.
Így a szerver oldalon nincs különösebb változás, nem lesz a POST-tól átláthatóbb a kód, csak az url.
13

A GET-el még egy problémám

gyuri11 · 2013. Júl. 19. (P), 13.20
A GET-el még egy problémám van. Ami nem is igazán probléma, hanem csak egy újabb kérdés a hiányos tudásom kielégítése céljából.

Amikor GET-el adom át az adatokat, azok ugye megjelennek a címsorban. Ezt le lehet valahogyan tiltani? Régen még amikor a HTML-t tanultam, volt egy javascript kód amivel le lehetett tiltani a címsorban való link megjelenítést és az állapot sort is, de nem találom...
14

GET

Poetro · 2013. Júl. 19. (P), 14.04
A GET-nek pont az a lényege, hogy megjelenjen a címsorban. Ezáltal elküldhető másnak. GET-et sose használj módosításra, mindig csak lekérdezésre, és illik két azonos GET-nek azonos választ adni, amennyiben azóta a tartalom maga nem módosult.
Olyan kérésekre, amik módosítják a tartalmat POST-ot illik használni.
15

Alapvetően ha GET-et

bamegakapa · 2013. Júl. 19. (P), 14.20
Alapvetően ha GET-et használsz, akkor akarod, hogy valami történjen a címsorban. Tehát ne fedd el. GET-el csak akkor add át a paramétereket, ha azok valamilyen adat lekérdezéséhez szükségesek. Például egy keresőform, ahol kritériumokat lehet beállítani. Ebben az esetben kifejezetten kívánatos, hogy a címsorban is megjelenjenek a paraméterek, hiszen így az URL-t másoknak is el tudod küldeni.

Ha adatokat küldesz a szerverre, hogy azokkal valamit módosíts vagy törölj, tehát állapotváltozást idézz elő, használj POST-ot.
17

Igen, ez volt ugye az alap

gyuri11 · 2013. Júl. 19. (P), 14.29
Igen, ez volt ugye az alap téma és ezt meg is válaszoltátok. A GET-et akarom kiváltani POST-al, de mivel két gombot kellett kezelnem egy űrlapon, nem tudtam eddig megvalósítani.

Az utolsó hozzászólásom csak egy továbbgondolás volt, ami ezek szerint nem mködhet.

Köszönöm.
3

A button tag éppúgy működni

bamegakapa · 2013. Júl. 19. (P), 11.09
A button tag éppúgy működni fog GET-tel, mint POST-tal, nincs különbség. A button előnye, hogy más tageket is használhatsz benne, ezt leszámítva egy <button type="submit"> tök ugyanaz, mint egy <input type="submit">.

Valóban a POST-ra van itt szükséged, a GET-et adatok lekérésére szokás használni, változtatásnál a POST a megfelelő (vagy a PUT/DELETE, de azokat HTML form nem tudja).

Ami neked kell, az az információ, hogy a gomboknak is adhatsz name attribútumot, ami csak akkor kerül elküldésre, ha a júzer azzal a gombbal szubmittálta (remek magyar szó :)) a formot.

Tehát:
<form method="post" action="valami.php">
    <input type="text" name="t1" value="valami1">
    <input type="text" name="t2" value="valami2">

    <button type="submit" name="delete">Törlés</button>
    <input type="submit" name="modify" value="Módosítás">
</form>
A példában mindkét fajta submit gombot használtam, én a buttont javaslom, mert rugalmasabb és mindent tud, amit a másik.

PHP-ból ezután már könnyen tudod tesztelni, hogy melyik gombot nyomták meg:
if (isset($_POST['delete'])) {
   //törlést kezelő kód
}
elseif (isset($_POST['modify'])) {
   //módosítást kezelő kód
}
4

két submit gomb

Thom · 2013. Júl. 19. (P), 11.30
Igen, ha egy űrlapnak két submit gombja van és azoknak van name paramétere, akkor az űrlap elküldi annak a gombnak az adatait is, amelyiket megnyomták. Általában. Egy korábbi feladatomban rejtélyes hibát kellett javítanom, kiderült, hogy az IE egyes verziói (már nem emlékszem, melyikek) nem küldi el a megnyomott submit gomb adatait. Tehát ha az űrlapfeldolgozást a submit gomb alapján ágaztatom el, akkor ritka esetben hibára futhatok. Én azóta kerülöm ezt a módszert. Helyette például egy megbízható JS könyvtárral a gombnyomás eseményére megfelelő hidden űrlapmezőt lehet hozzáadni az elküldött űrlaphoz. De biztos van más ötlet is erre.
7

IE

Hidvégi Gábor · 2013. Júl. 19. (P), 11.49
Button vagy input volt? Volt kitöltött name (és input esetén value) attribútuma? Csak azért, mert nemrég dolgoztam hasonlón, és 6-osig visszamenőleg jól működött minden.
8

Egyetértek. Nem szeretem az

bamegakapa · 2013. Júl. 19. (P), 11.56
Egyetértek. Nem szeretem az ilyen "legendákat".
9

Button

Hidvégi Gábor · 2013. Júl. 19. (P), 11.59
A buttont én is nemrég kezdtem el használni (valamiért így alakult az életem), és örömmel tapasztaltam, hogy ha fölé viszem az egeret, (a böngészők nagy részében) kiírja az űrlap action-jének értékét. Ez apróság, de szeretem, ha látom, hogy például egy link hova vezet.
11

Tapasztalataim szerint

kuka · 2013. Júl. 19. (P), 12.09
Tapasztalataim szerint kattintásra mindig elmegy az adott gomb adata, ha name és value ki van töltve. Ami változó, az az, hogy Enter leütéssel és form.submit() hívással kiváltott küldéskor mit csinál a böngésző: van amelyik elküldi az első submit adatait, van amelyik semmit.
12

Köszi kuka, hogy bonyolítod

gyuri11 · 2013. Júl. 19. (P), 12.49
Köszi kuka, hogy bonyolítod :) Teljesen jogos a felvetésed. Erre nem is gondoltam. Lesz még minek utána néznem.
16

Nosigen, kicsit olvasgattam a

bamegakapa · 2013. Júl. 19. (P), 14.27
Nosigen, kicsit olvasgattam a specifikációt, de nem leltem a megfelelő részt. form.submit() esetén ugye tudod kezelni már eleve JS-el, hogy mi kerüljön elküldésre, de az Enter leütés érdekes kérdés... ha lesz időm, tesztelgetek.

Jelen esetünkben az Enter leütése egy input mezőben a módosítást implikálja, de nem minden esetben ilyen tiszta a dolog.

A törlés gombot lehetne mondjuk külön formba is rakni, hiszen ahhoz elég csak az id-t elküldeni, a többi adatra semmi szükség.
18

submit

Hidvégi Gábor · 2013. Júl. 19. (P), 14.43
Érdekesség: a form submit() függvényének az explicit meghívásakor a böngészők többsége nem futtatja le az onsubmit eseménykezelőhöz rendelt függvényeket.
20

Kalandos szakma a miénk :).

bamegakapa · 2013. Júl. 19. (P), 15.16
Kalandos szakma a miénk :).
19

Úgy látszik, hogy

gyuri11 · 2013. Júl. 19. (P), 15.05
Úgy látszik, hogy félreérthetően fogalmaztam meg az alap kérdést.

Esetemben a módosítás és a törtlés azt jelenti, hogy a formban megjelenített adatokat (inputokat) adatbázisból szeretném kitölteni. Most GET-el töltöm ki. Ezt követően két lehetőséget kínálok a felhasználó számára.

A módosítás gomb: GET-el átadom a paramétereket, meghívok egy új űrlapot és megjelenítem az adatokat. Majd ezen az űrlapon egy módosítás gombbal ténylegesen módosítok az adatbázisban.

A törlés gomb: nem kiüríteni akarom az imputokat, hanem információt küldeni egy id-val egy másik feldolgozó számára, amely törli az adott rekordot az adatbázisból.

De minden ugyanabban a fájlban történik.

Csak leírtam, hogy hátha később valaki ugyanezzel a problémával kerül szembe és világosan és érthetően el tud itt olvasni mindent.

Bamegakapa megoldása továbbra is nyerő.
5

A törlés helyes módja....

kamba · 2013. Júl. 19. (P), 11.46
<input name="" type="reset">

Ezt betéve a form-ba bármikor törölhetsz.
6

form

Poetro · 2013. Júl. 19. (P), 11.49
Ez az űrlapod tartalmát állítja vissza eredeti állapotra, nem töröl semmit. Ha te törölni akarasz egy elemet az adatbázisban egy űrlap segítségével, akkor ezzel nem jutsz semeddig.
10

Nem is gondoltam volna, hogy

gyuri11 · 2013. Júl. 19. (P), 12.00
Nem is gondoltam volna, hogy ilyen sok hozzászólás lesz :)

Köszönök mindent. Bamegakapa válasza a tuti!!!

A többieknek is köszönet!