Hiányos űrlap figyelmeztetés

Hiányos űrlap figyelmeztetés
2004-11-20T08:00:29+01:00
2005-01-23T22:50:35+01:00
2022-10-23T12:15:44+02:00
Niki
Sziasztok,

Készítettem egy Perl CGI script-et egy többoldalas űrlap kitöltéséhez és az adatok lementéséhez. Hogyan tudom elérni, hogy hiányosan kitöltött űrlap esetén a Mehet gomb hatására a program egy üzenettel figyelmeztessen, a böngésző pedig visszaugorjon az adott kérdéshez úgy, hogy a már kitöltött adatokat nem törli?!

Előre is köszi a segítséget!
Mutasd a teljes hozzászólást!

  • Bar perl-ben nem vagyok otthon, csak php-ban, de szerintem az elv ugyanaz.
    Ha nincs kitoltve a mezo, akkor kiirod a hibauzenetet es az egesz formot ujra, a "value" mezokbe pedig az elkuldott adatot, igy ujra "ki lesz toltve". Persze ez bonyolodik a checkbox-oknal es a selectnel.
    De egy ures mezot figyelni eleg a javascript, ami meg elkuldes elott figyelmeztet, de ettol fuggetlenul a scriptnek ugyanugy ellenorni KELL az adatokat!
    Sajnos csak ilyen gondolatmenetre jutotta igy reggelrol...
    Mutasd a teljes hozzászólást!
  • Szerintem használj JavaScriptet!
    <script language="JavaScript"> function Ellenoriz(){ if (document.form1.textbox.value = "") { alert("Hiányos kitöltés!") return } } </script>
    És mikor rákkatint a gombra, akkor életbe lép a kód:
    <input type="Submit" onClick="Ellenoriz()">
    Lehet, hogy hibás egyébként...
    Mutasd a teljes hozzászólást!
  • Sziasztok,

    A JavaScript nekem nem jó, mert nem számíthatok rá, hogy a felhasználó böngészője támogatja. A PHP-ről hallottam, hogy nagyon jó, de most nincs időm megismerkedni vele. Inkább Perl-es ötleteket várnék!

    Köszönöm!
    Mutasd a teljes hozzászólást!
  • Hát több böngésző ismeri a JavaScriptet, mint amennyi szevrer ismeri a Perlt, de ha így gondolod...
    if ($textbox = ""){print "Nincs kitöltve a mező";}
    A {} jelek között azt csinálsz amit akarsz! Milyen jó ez az if utasítás!
    Mutasd a teljes hozzászólást!
  • Hello!
    A JS azért nem jó, mert kijátszható, mivel kliens oldalon fut. Igaz egyszerűbb, és támogatottabb, mint a perl :)

    Gondolom az ürlapot, már megcsináltad. Hozzácsapsz még egy hidden mezőt, amiben majd a user munkamenet azonosítóját tárolod, vagy esetleg dobsz egy sütit, amiben megintcsak a munkamenet azonosítót tárolod:
    Nem tudom, hogy van-e a sql a serveren vagy nincs, végülis mindegy:
    a süti dobálos kódnak így kell kinéznie:

    #!/usr/bun/perl # vagy helyettesíted a perl elérési útvonaléval use strict; # ezt érdemes mindíg használni use CGI qw/:standard/; # ezzel tudsz ürlapot, fejlécet, # html elemeket generálni, sütit dobni stb use DBI; # ha van adatbázis a szereveren use CGI::Session; # ez a munkamenetek kezeléséhez kell # persze szükséged lesz még a Digest::SHA1 vagy MD5-re ill, CGI::Session::Mysql-re is # www.cpan.org vagy wines szerverhez # vagy ppm.activestate.com my $cgi = new CGI; # ha adatbaziso van, akkor: tfh mysql my $dbcon = DBI->connect("DBI:mysql:adatbnev:localhost","login","pass", {RaiseError=>1,PrintError=>0}) or die("hiba"); # ez nem túl elegáns a hibakezelést majd megoldod.. :) my $sess = new CGI::Session( 'driver:MySQL;id:SHA1', $cgi, {Handle=>$dbcon}); # itt hozod létre az új munkamenetet # a MySQL, helyett írhatsz file-t is, ha file-okban akarod a munkameneteket tárolni # az id SH1 helyett lehet MD5 vagy talán inc # a második param a cgi objektum, amiból kiszedi a bejövő munkamenet azo-t, ha nem jött vagy már lejárt, akkor generál egy újat #a harmadik asszem csak akkor kell, ha adatbázissal dolgozol # kinyomod a böngészőnek a munkamenet azót, mondjuk sütiben: print $cgi->header( -lang=>'hu', -charset=>'utf-8', -cookie => $cgi->cookie( -name =>'CGISESSID', -values => $sess->id, -path => $ENV{q/SCRIP_NAME/}, -expires => '+25m' )); if($sess->{_IS_NEW}) { # kinyomod az első űrlapot } else { # lekezded nézegetni a bejövő dolgokat # $sess->param('valami',valami') így teszel bele # $x = $sess->param('valami') így kérdezed le # bővebben: search.cpan.org # vagy telepítsd a perl-doc csomagot, linux alatt # vagy www.perldoc.com } # aztán $sess->close; $dbcon->disconnect;
    Nagyjából ennyi... :)) esetleg még: a bejövő paramétereket $cgi­>param('nev')-el tudod elérni, a sütiben visszaadott értéket a $cgi->cookie()-val, ha jól emlékszem
    Persze sok vesződségtől megkíméled magadat, ha sablonokat használsz HTML::Template modul
    remélem nem vettem el a kedved az egésztől. Ill. bocs a helyesírási, szintaktikai hibák miatt. Nagy hirtelen, fejből gépeltem az egészet. Perl power!!
    üdv:
    neuro
    Mutasd a teljes hozzászólást!
  • Szia neuro,

    Köszi a tippet! A cookie-kről szintén nem tudom, hogy a kliens oldal mennyire támogatja, ezért végül egyszerűbben álltam a problémához. Kiíratok <a href="#ide"></a> tag-eket és azzal ugrok a hiányosan kitöltött részekre.

    Lenne még egy problémám. Miután kitöltötték és elküldték az űrlapot, Location-nal átirányítom a böngészőt egy "köszi" oldalra! Hogyan tudom elérni, hogy a Back gombbal ne lehessen visszalépni az űrlapra és még vagy százszor elküldeni azt. A tartalom egyezését persze tudom vizsgálni, de talán van egyszerűbb lehetőség is (history kiürítése vagy ilyesmi). JavaScript-ben tudom a megoldást, ezért itt ismét Perl ötletek érdekelnének.

    Köszi!
    Mutasd a teljes hozzászólást!
  • Szia Niki!

    A history törlése szerintem perlből nem megoldható, mert szerver oldalon, és a history a kliens oldalon van. A kliens bármi lehet, java scriptből nem tudom, hogy meg lehet oldani, de ez sem lenne kielégítő, a támogatotság miatt.

    1. ötlet: Használj egy átvezető mentő oldalt, ami egy javascriptel, vagy egy meta taggal továbbugrik egy másik oldalra autómatikusan, ezen az oldalon írnád ki, hogy: "köszi".
    Ez a megoldás nem elég jó, mert figyelned kell, hogy mikor ugrassz előfordulhat, hogy a scripted még nem kapta meg a mentendő adatokat, és már ugrik is, ez baj. Emellett kijátszható, ha valaki többször (mondjuk 2*) nyomja meg egymés után gyorsan a back gombot.

    2. ötlet: Ehhez elengedhetetlen a java script. Amikor küldöd a form adatokat nyiss egy új böngészőablakot javascriptel, ugyanolyan tulajdonságokkal, mint az előző, és töltesd bele scripted eredményét.

    3. ötlet: Fogod és eltárolod a session azonosítót is a többi adattal együtt, ha újra ezzel a session id-vel valaki menteni akar , akkor ezt a kérését visszautasítod.
    Mutasd a teljes hozzászólást!
  • Szia kotyo,

    Az első két ötlet a JavaScript miatt nekem nem jó. Már más is javasolta, hogy az űrlapban hozzak létre egy rejtett változót, amibe egy véletlen számot generálva tudom ellenőrizni, hogy az adott űrlapot a cache-ből küldték-e el újra. Ez az ötlet a Te 3. megoldásodhoz nagyon hasonló. Tudnál nekem egy rövid kódrészletet írni? Ha jól gondolom, valami hasonló van Neuro megoldásában is, de az nekem kicsit magas volt és cookie nélkül kellene.

    Előre is köszi!
    Mutasd a teljes hozzászólást!
  • A Perl-t sajnos csak "A legújabb cikkek ebben a témakörben" leírtak szintjén ismerem.
    Mutasd a teljes hozzászólást!
  • Szia!
    Valahol olvastam erről a neten, talán a perl barátok köre weblapján, de most nem találom.
    Az nem lenne jó megoldás, ha közbeiktatsz egy másik CGI oldalt, ami meghív egy másik CGI oldalt? Ekkor ha back gombot nyom akkor is ugyanoda kerül vissza, és akkor lehet nézegetni az ID-ket.
    Ezt már több helyen is láttam, csak az a baj vele, hogy ha kettőt kattint egymás után gyorsan az illető, akkor nem működik.
    De megpróbálom megkeresni, hogy hol olvastam!
    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