Javasrcipt submit azonos oldalon belül

Javasrcipt submit azonos oldalon belül
2017-02-01T14:37:51+01:00
2017-02-07T14:35:14+01:00
2022-12-04T08:45:40+01:00
Danonino
Sziasztok! Hogy lehet javascriptbe az megoldani hogy egy űrlapot ugyan azon az oldalon belül küldjön el? Az űrlapot ugye nem submit gomba küldöm el hanem vizsgálom hogy nem hagyott e üresen valami(az űrlap több mezőből áll). Az if-nél vizsgálom hogy rá lett e kattintva a küldés gombra, ha igen elvégzem a művelet és vissza adok egy szöveget hogy sikeres volt e vagy nem ezért már nem kell az űrlap. De amikor rá megyek a küldésre nem megy bele az if elágazásba. Oda mit kéne írni mert nem találtam neten rá semmit. Valamit a submi() -hoz kéne még írni?
Előre is köszi a választ.

<script type="text/javascript"> function vizsgal() { if(valami.neve.value=="" || valami.neve.value==" ") {alert("Üresen hagyta a név mezőt!"); return false;} else {document.valami.submit();} } </script> If(isset($_POST["kuld"])) { itt elvégzem az elküldés részt } else{ <form METHOD=POST NAME=valami action=$_SERVER["PHP_SELF"]> Neve:<INPUT TYPE='text' NAME='neve' size=40> <INPUT TYPE='button' name='kuld' onclick="vizsgal()" value='KÜLDÉS'> </form>}
Mutasd a teljes hozzászólást!
Mit vársz ettől az egésztől? A 'neve' mező is csak akkor lesz benne a request-ben, ha lefutott az ellenőrzésed és elküldésre került a form. De ha nagyon kell, tehetsz bele hidden mezőket, amik majd benne lesznek a post-ban (apropó, mivel post is csak a form elküldésével jöhet létre, hiszen a lap kezdeti lekérése get, elég lenne a method-ot vizsgálni - $_SERVER['REQUEST_METHOD']). Ha valamiért többféle küldés gombot kell megkülönböztetned, egy hidden input állítgatásával az is megoldható.

(Biztonsági funkciót semmiképp se szánjál a kliensoldali ellenőrzésnek, az csak egy kényelmi szolgáltatás, amit egy rosszindulatú felhasználó simán megkerül. A bemenet elfogadhatóságát mindenképpen vizsgálni kell majd a PHP részben is)
Mutasd a teljes hozzászólást!

  • Nem kevered kicsit a szezont a fazonnal (PHP -JS)?
    Megj: Viszont ha nem, akkor nem is kellene utánjárni a következő témaköröknek ->
    Kliens és szerver oldal...
    Adatok küldése FORM-al kliens oldalról szerver oldalra...
    Adatok ellenőrzése kliens oldalon majd szerver oldalon...
    Mutasd a teljes hozzászólást!
  • Hát ha az action=valami.php akkor oda elküldi. itt is tulajdonképpen újra tölti az oldalt de nem lép be az if ágba ahol ellenőrzi hogy rányomott e a gombra vagy sem.
    Mutasd a teljes hozzászólást!
  • Ha az action mellé teszel egy target-et is (HTML form target Attribute ), mondjuk egy iframe-re, akkor majd nem tölti újra az egész lapot, csak az iframe-t. Ami akár rejtett is lehet.
    Mutasd a teljes hozzászólást!
  •  

    Nem.

    Azert tolti ujra az oldalt, mert ez a submit alapertelmezett viselkedese, amit a gombra akasztott onclick handlerrel semmikepp sem fogsz tudni megallitani. Ahhoz a form submit esemenye es az azt leiro objektum kell, amit a fuggvenyed automatikusan megkap:

    <form id="my-form" onsubmit="onSubmit(event)" ...>
    ...azon belul is a preventDefault metodust hivod meg:

    function onSubmit (event) { if (!isFormValid) { event.preventDefault() // itt mar azt csinalsz, amit akarsz, az oldal nem fog ujratolteni } }
    A submit-ra reagalast persze szebb lenne inkabb JS-bol inicializalni:
    var form = document.getElementById('my-form') form.addEventListener('submit', onSubmit)
    Mutasd a teljes hozzászólást!
  • de nem lép be az if ágba

    A csuda tudja miért, de lefutttatva -> Nekem sem lép be...
    -> Lásd csatolt kép...
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Ha már így rászántad az időt:
    - a kérdezőnek button-ja van, nem submit-ja
    - én a target attribútum használatáról írtam (pl. Action kihagyása fájl feltöltésnél probléma ), te meg hosszasan taglalod, hogy mi történik nélküle
    - amint Szabofe rámutatott, a kérdés esetleg nem is a JS-ről szól, hanem a lapon véletlenszerűen elszórt PHP-jellegű részekről
    Mutasd a teljes hozzászólást!
  • Itt nem értem mire célzol a képpel?

    Az űrlap  oldal neve valami.php. A form action része pedig valami.php. Tehát ugyan arra az oldalra küldte el. És mivel a submit gombot lecseréltem buttonra, így nem kerül be az if(isset($_POST["kuld "])) részbe hanem vissza tér az else ágra és vissza kapom az üres űrlapot!
    Mutasd a teljes hozzászólást!
  • a kérdezőnek button-ja van, nem submit-ja

    Ami ugyanugy elkuldi a formot, ha beallitja a type="submit" attributumot.

    én a target attribútum használatáról írtam (pl. Action kihagyása fájl feltöltésnél probléma ), te meg hosszasan taglalod, hogy mi történik nélküle

    Nem azert csovaltam a fejem, mert nem mukodne, amit irsz (meg nem probaltam), hanem azert, mert teljesen feleslegesen kevered ide az iframe-eket, mikor pont erre talaltak ki a preventDefault-ot :)

    amint Szabofe rámutatott, a kérdés esetleg nem is a JS-ről szól, hanem a lapon véletlenszerűen elszórt PHP-jellegű részekről

    En ugy ertelmeztem, hogy a php kodot azert berakta php tagek koze, csak valamiert a hozzaszolasaban nem, illetve attol meg a JS-e ugyanugy nem fog semmit csinalni a preventDefault nelkul.
    Mutasd a teljes hozzászólást!
  • Neked és a kérdezőnek ->
    1. A kategória PHP és JS.
    2.  A kérdező kódjának kilencedik sorában van egy script zárás.
    3. A 10-14 sorok szerintem PHP-snak tünnek, csak nincs jelezve (<?php).
    4. A  15-19 sorok HTML kódnak tünnek, csak előtte nincs lezárva a meg-sem nyitott PHP kód (?>)
    stb...stb...stb...
    Mindezek után nem érti a kérdező, hogy mire céloztam a csatolt képpel.
    Végül szerinted ezek után van értelme feleslegesen találgatnod és vitatkoznod "tevemadar" kollégával?
    Szerintem így az egész topic-nak nem sok értelme van , ezért részemről
    Mutasd a teljes hozzászólást!
  • Ami ugyanugy elkuldi a formot, ha beallitja a type="submit" attributumot.

    A type vagy button, vagy submit (vagy persze valami tökmás). De egyszerre a kettő biztos nem. A kérdezőé button. (Nem button elem, hanem button típusú input, de ugye ha nyomsz egy Home-ot, látod te is)

    Nem azert csovaltam a fejem, mert nem mukodne, amit irsz (meg nem probaltam), hanem azert, mert teljesen feleslegesen kevered ide az iframe-eket, mikor pont erre talaltak ki a preventDefault-ot :)

    Ezeknek amúgy tökmás a szerepe. A preventDefault nem küldi el az adatokat és egy olyan eseményt lőne le, ami a kérdező kódjában nem is történik meg (4.10 Forms — HTML5 5-ik pontja: az esemény csak akkor jelenik meg és lőhető le, ha nem submit() metódushívással indul a küldés-kísérlet, hanem közvetlenül UI-ból)
    Az iframe-be küldés meg arról szól, hogy elmegy az adat, de nem töltődik újra a lap, amit néz a felhasználó. Semmi köze a kettőnek egymáshoz. A kérdező valahol (nem az eredeti kérdésben) felvetette, hogy újratöltődik a lap, és végülis az tulajdonképpen jó neki. Mivel úgy tűnt, hogy nem teljesen biztos benne, hogy ez jó neki, ezért írtam az iframe-es lehetőségről. Ha tudsz erre más megoldást (hogy a form elmegy, de az oldal nem frissül), azt nyugodtan írd ide, és legközelebb én is tudni fogom - vagy elfelejtem, mindegy.
    Mutasd a teljes hozzászólást!
  • valóban nincs lezárva de nem is ilyen volt a lényeg, megint apróságokra térünk ki és nem a kérdésre..
    de akkor itt a kód normálisan és ez se az oldalam kódja..
    Fájl neve amibe bele van írva VALAMI.PHP

    <html> <head> <script type="text/javascript"> function vizsgal() { if(valami.neve.value=="" || valami.neve.value==" ") {alert("Üresen hagyta a név mezőt!"); return false;} else {document.valami.submit();} } </script> </head> <body> <?php If(isset($_POST["kuld"])) { itt elvégzem az elküldés részt } else{ echo "<form METHOD=POST NAME="valami" action=valami.php> Neve:<INPUT TYPE='text' NAME='neve' size=40> <INPUT TYPE='button' name='kuld' onclick="vizsgal()" value='KÜLDÉS'> </form> "} ?> </body> </html>
    Mutasd a teljes hozzászólást!
  • A kodod alapjan jo par helyen lehet problema.

    Melyik if agba nem lep bele? Biztos, hogy nem lep bele? Ha van egy 'kuld' nevu mezod a formban, amit elkuldesz, akkor annak a $_POST-ban is benne kell lennie.

    Tanacs: szukitsd le annyira a problemat, amennyire csak lehet. Csinalj egy klont az oldaladbol, csak a legszuksegesebb elemekkel. Nekem ennyi lett az egesz fajl, es mukodik:

    <?php if (isset($_POST['submit'])) { echo 'sikerult'; } ?> <form method="post" name="form" action="/test.php"> <input type="text" name="first-name"> <input type="submit" name="submit"> </form>
    A kovetkezo lepes az, hogy egyesevel add hozza a tobbi dolgot, amig ra nem jossz, mi okozza a problemat. Sajnos a peldaidbol nem nagyon derul ki. :)
    Mutasd a teljes hozzászólást!
  • De itt hiányzik a js ami ellenőrzi az üres mezőt, ezáltal itt submit van amivel nekem is működik. De nekem button van hogy tudjam ellenőrizni!
    Mutasd a teljes hozzászólást!
  • Igazad van, nem vettem eszre, hogy submit()-ot hivva kuldi el a formot. Mindenesetre ettol meg elegansabb megoldasnak tartom, hogy hagyomanyos modon kuldjuk el a formot, es ha valami nem oke, akadalyozzuk meg preventDefault-al.

    "Mivel úgy tűnt, hogy nem teljesen biztos benne, hogy ez jó neki, ezért írtam az iframe-es lehetőségről."

    Aha, igy mar ertem. 

    "Ha tudsz erre más megoldást (hogy a form elmegy, de az oldal nem frissül), azt nyugodtan írd ide"

    Erre valo az AJAX, de ahogy elnezem, nem is az a problema, hogy ujratolt az oldal, hanem hogy nem kap adatot :)
    Mutasd a teljes hozzászólást!
  • Ha az if post helyett if get van és űgy át van irányítva megkapja az adokat. De a submit neve volt hogy kuld úgy működött is. De azzal hogy button lett a submit helyet de a neve továbbra is kuld, nem ment bele az isset post részbe. Úgy vette az if hogy nincs ilyen hogy post[kuld] ezért ment az else ágra.
    Mutasd a teljes hozzászólást!
  • Nem kell ahhoz button, hogy tudd ellenorizni:

    <?php if (isset($_POST['submit'])) { echo 'sikerult'; } ?> <form method="post" id="form" name="form" action="/test.php"> <input type="text" name="first-name"> <input type="submit" name="submit"> <div id="errors"></div> </form> <script> var form = document.getElementById('form') var errorContainer = document.getElementById('errors') var error form.addEventListener('submit', validate) function validate (event) { if (!form['first-name'].value.trim()) { event.preventDefault() error = document.createElement('p') error.innerHTML = 'Ures nev mezo!' errorContainer.appendChild(error) } } </script>
    Mutasd a teljes hozzászólást!
  • Hát ennyire nem vagyok otthon js-be :D szóval nem tudom mit írtál. Amit én írtam js az még nagyjából értem is, azért használtam azt :)
    Mutasd a teljes hozzászólást!
  • Bocs, nem akartam tul nehezeket irni, de ez lenyegeben ugyanaz az egyszeru ellenorzes, mint a tied. Ha valami konkretan erdekel belole, elmagyarazom.

    Azert irtam, mert nem tudom elkepzelni, hogy a tied hiba nelkul lefutna, hacsak nem hagytal ki par sort :)
    Mutasd a teljes hozzászólást!
  • Ja, en is megneztem, a "button" tipusu input nem kerul bele a $_POST-ba, csak a "submit".
    Mutasd a teljes hozzászólást!
  • Akkor hogy tudom belevarázsolni az if(isset($_POST[""])) részbe?:D
    sehogy mi?
    Mutasd a teljes hozzászólást!
  • Mit vársz ettől az egésztől? A 'neve' mező is csak akkor lesz benne a request-ben, ha lefutott az ellenőrzésed és elküldésre került a form. De ha nagyon kell, tehetsz bele hidden mezőket, amik majd benne lesznek a post-ban (apropó, mivel post is csak a form elküldésével jöhet létre, hiszen a lap kezdeti lekérése get, elég lenne a method-ot vizsgálni - $_SERVER['REQUEST_METHOD']). Ha valamiért többféle küldés gombot kell megkülönböztetned, egy hidden input állítgatásával az is megoldható.

    (Biztonsági funkciót semmiképp se szánjál a kliensoldali ellenőrzésnek, az csak egy kényelmi szolgáltatás, amit egy rosszindulatú felhasználó simán megkerül. A bemenet elfogadhatóságát mindenképpen vizsgálni kell majd a PHP részben is)
    Mutasd a teljes hozzászólást!
  • Csak kérdés:
    Nem kellene összefogni "suckee" kollégával egy kis közös tanulásra (szerver-kliens, PHP-JS, form küldés-ellenőrzés...)?
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd