PDA

Դիտել ողջ տարբերակը : php և javascript



david
26.11.2007, 15:32
Այսպիսի մի իրավիճակ.
Ունենք ֆորմա ( մի քանի դաշտերով ): JavaScript ով ստուգում եմ ամպայման լրացվող դաշտերը, որից հետո նոր թույլատրում submit - ը(php - ով մուտքագրում եմ շտեմարանի մեջ): Սակայն refresh անելուց նույն տվյալները երկրորդ անգամ մուտքագրվում են շտեմարան: Այս հարցը լուծվեց php redirect( refresh ) - ի միջոցով: -- header('. . . ') --
Հիմա հակարգը դիտենք մյուս կողմից: Եթե ամպայման դաշտերից որևէ մեկը լրացված չէ. էկրանին հայտնվում է javascript - ով սահմանված հաղորդագրությունը: Սեղմելով OK կոճակը այդ էջը կրկին գեներացվում է: ԲԱՅՑ աշխատում է նաև redirect - ը, որը իր հերթին դատարկում է արդեն լրացված դաշտերը: Անկեղծ որ ասեմ առանց redirect - ի էլ OK - ը սեղմելուց հետո, դաշտերը դատարկվում են:
Ինչպես անել, որ դաշտերը չդատարկվեն, իհարկե չմոռանալով շտեմարան երկրորդ անգամ չգրառելու մասին:
ևս մեկ շատ կարևոր հարց: Ողջ համակարգը ամպայման պետք է աշխատի IE - ով:
Եթե դժվարությւն չի ներկայացնի, կխնդրեմ օգնել կոդերով, հնարավորությոն դեպքում:
Անձամբ ինքս իմ կոդերը ուղարկել չեմ կարողանա, որովհետև կտորը առանձնացնել չեմ կարող:

Grieg
26.11.2007, 17:31
կարող ես ուղղակի չթողնել որ ֆորմը սաբմիթ լինի օրինակ այսպես


<form action="submitpage.htm"
onsubmit="return validate_form(this)"
method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>


<script type="text/javascript">
function validate_required(field,alerttxt)
{
with (field)
{
if (value==null||value=="")
{alert(alerttxt);return false}
else {return true}
}
}
function validate_form(thisform)
{
with (thisform)
{
if (validate_required(email,"Email must be filled out!")==false)
{email.focus();return false}
}
}
</script>

ասեմ նաև որ javascript ի ստուգումից բացի շատ դեպքերում անհրաժեշտ է server side ստուգումներ անվտանգությունը ապահովելու համար..

Tom
28.11.2007, 22:48
Այսպիսի մի իրավիճակ.
Ունենք ֆորմա ( մի քանի դաշտերով ): JavaScript ով ստուգում եմ ամպայման լրացվող դաշտերը, որից հետո նոր թույլատրում submit - ը(php - ով մուտքագրում եմ շտեմարանի մեջ): Սակայն refresh անելուց նույն տվյալները երկրորդ անգամ մուտքագրվում են շտեմարան: Այս հարցը լուծվեց php redirect( refresh ) - ի միջոցով: -- header('. . . ') --
Հիմա հակարգը դիտենք մյուս կողմից: Եթե ամպայման դաշտերից որևէ մեկը լրացված չէ. էկրանին հայտնվում է javascript - ով սահմանված հաղորդագրությունը: Սեղմելով OK կոճակը այդ էջը կրկին գեներացվում է: ԲԱՅՑ աշխատում է նաև redirect - ը, որը իր հերթին դատարկում է արդեն լրացված դաշտերը: Անկեղծ որ ասեմ առանց redirect - ի էլ OK - ը սեղմելուց հետո, դաշտերը դատարկվում են:
Ինչպես անել, որ դաշտերը չդատարկվեն, իհարկե չմոռանալով շտեմարան երկրորդ անգամ չգրառելու մասին:
ևս մեկ շատ կարևոր հարց: Ողջ համակարգը ամպայման պետք է աշխատի IE - ով:
Եթե դժվարությւն չի ներկայացնի, կխնդրեմ օգնել կոդերով, հնարավորությոն դեպքում:
Անձամբ ինքս իմ կոդերը ուղարկել չեմ կարողանա, որովհետև կտորը առանձնացնել չեմ կարող:
JS-ը էս տեսքով համ բոլոր բրաուզերների համար կաշխատի համել կարաս ինչքան ուզես input տարածքներ տաս , ուշադիր եղի w-ների ու i-ի քանակին ու իրար համապատասխանությանը , alert-ի տեքստերը կփոխես , համել w-ի արժեքները կտաս համապատասխան քո form-իդ :
Էսա քեզ գործող օրինակ , որը աշխատում է իմ ծրագիրներիս մեկում `


<script language="javascript">
function missing(evt){

var w01= document.r01.login.value;
var w02= document.r01.pass01.value;
var w03= document.r01.pass02.value;
var w04= document.r01.name_arm.value;
var w05= document.r01.name_rus.value;
var w06= document.r01.name_eng.value;
var w07= document.r01.mail.value;
var w08= document.r01.img_cod.value;
var w_arr=new Array(w01,w02,w03,w04,w05,w06,w07,w08);

var i01=" Missed Login";
var i02=" Missed password";
var i03=" Missed password";
var i04=" Missed Firstname (HY)";
var i05=" Missed Firstname (RU)";
var i06="Missed Firstname (EN)";
var i07=" Missed E_mail";
var i08=" Missed COD ";
var i_arr=new Array(i01,i02,i03,i04,i05,i06,i07,i08);
for (var g=0 ; g<8 ; g++)
{
if(w_arr[g]==""){alert(i_arr[g]);
var browser = navigator.userAgent.toLowerCase();
if((browser.indexOf("msie") != -1) ||
(browser.indexOf("opera") != -1))br='ie';
if((browser.indexOf("firefox") != -1) ||
(browser.indexOf("netscape") != -1))br='nav';
if(br=='ie')evt.returnValue=false;
if(br=='nav')evt.preventDefault();}
}
}
</script>

<form action="?.php" method="post" name="r01" onsubmit="missing(event)">
....
..
</form>

david
29.11.2007, 16:56
TOM շատ շնորհակալ եմ ես ամպայման կփորձեմ:
Մեկ հարց եմ ուզում տալ, կանքս կերավ:
MySQL ին հարցում տալով պատասխանը գրանցում եմ temporary table (create temporary table ...) - ում: Որից հետո կանչում եմ տվյալները և արտապատկերում էկրանին:
ԲԱՅՑ:
Կատարում եմ որոնում(օրինակ: A) առաջին անգամ եթե հաջողվի տվյալների քանակը ճիշ եմ ստանում և էկրանին ստանում եմ առաջին պատասխանը: Սեղմում եմ next էկրանին հաղորդագրություն է գալիս որ ժամանակավոր աղյուսակը գոյութնուն չունի: Սկզբից ենթադրում էի որ աղյուսակը ջնջվում է, սակայն opera և mozilla ով ճիշտ է աշխատում: Բայց մեկել կտենաս բոլոր բրոուզերներով աշխատում է: Ենթադրեցի որ բրոուզերի կուկիները լցվում են: Կիսով չափ չսխալվեցի, կուկիները մաքրելուց հետո բոլոր բրոուզերներով աշխատում է : Բայց նորից կարող է չաշխատել: Ոնց վարվեմ:

Tom
29.11.2007, 21:33
TOM շատ շնորհակալ եմ ես ամպայման կփորձեմ:
Մեկ հարց եմ ուզում տալ, կանքս կերավ:
MySQL ին հարցում տալով պատասխանը գրանցում եմ temporary table (create temporary table ...) - ում: Որից հետո կանչում եմ տվյալները և արտապատկերում էկրանին:
ԲԱՅՑ:
Կատարում եմ որոնում(օրինակ: A) առաջին անգամ եթե հաջողվի տվյալների քանակը ճիշ եմ ստանում և էկրանին ստանում եմ առաջին պատասխանը: Սեղմում եմ next էկրանին հաղորդագրություն է գալիս որ ժամանակավոր աղյուսակը գոյութնուն չունի: Սկզբից ենթադրում էի որ աղյուսակը ջնջվում է, սակայն opera և mozilla ով ճիշտ է աշխատում: Բայց մեկել կտենաս բոլոր բրոուզերներով աշխատում է: Ենթադրեցի որ բրոուզերի կուկիները լցվում են: Կիսով չափ չսխալվեցի, կուկիները մաքրելուց հետո բոլոր բրոուզերներով աշխատում է : Բայց նորից կարող է չաշխատել: Ոնց վարվեմ:
Դե ես չեմ կարող լրիվ պատկերացնել քո կոդը որ նման նուրբ հարցերի շուրջը կոնկրետ պատասխան տամ , բայց մի բան կասեմ ուզում ես էդ ձև արա :
Նախ TEMPORARY TABLE ստեղծելու փոխարեն կարաս մի հատ ստաբիլ խոսքի TEMP անունով table ունենաս , որտեղ ամեն MySQL ին հարցում տալով պատասխանը ձև գտնես և տեղավորես մի ROW-ի մեջ , որի id հետագայում դառնում է բանալի ծրագրերիդ բոլոր էջերի համար , որոնք աշխատում են այդ հարցումի նկատմամբ , այդ id-ին էջից էջ կարող ես փոխանցել կամ GET-ով կամ էլ SESSION-ով , իսկ էդ ROW-ն ավտոմատ ջնջես ուրիշ հարցումների ժամանակ նախապես նայելով խոսքի 1ժամ անցած լինի այդ id-ի ստեղձումից , համել ոչ մի քուկիի պրոբլեմ չես ունենա :

david
30.11.2007, 09:13
Tom ջան այդ տարբերակը (սովորական աղյուսակ սարգելը) ճիշտ ածխատում է, սակայն այդ համակարգը տվյալ պահին աշխատում է դեռ լոկալ համակարգչի համար, իսկ հետագայում այն կսկսի աշխատել ցանցի համար: Իսկ այս դեպքում որ մի քանի օգտագործողի համար ստեղծվի նույն անունով աղյուսակ տվյալները կխառնվեն և հարցման արդյունքը բնականաբար սխալ կլինի: Ժամանակավոր աղյուսակը այդ փաստից չի վախենում, նա չիշտ տարբերակում է տարբեր օգտագործողների աղյուսակը:

Tom
30.11.2007, 12:14
Իսկ այս դեպքում որ մի քանի օգտագործողի համար ստեղծվի նույն անունով աղյուսակ տվյալները կխառնվեն և հարցման արդյունքը բնականաբար սխալ կլինի: Ժամանակավոր աղյուսակը այդ փաստից չի վախենում, նա չիշտ տարբերակում է տարբեր օգտագործողների աղյուսակը:
Ես չեմ ասում բոլորի համար ստեղծվի նույն անունով աղյուսակ , TEMP աղյուսակը իմ ասած մի հոգու համար չի ծառայում այլ բոլորի , պարզապես այն ինֆորմացիան որ դու ուզում ես տեղավորել մի աղյուսակում որը ստեղծում ես մի հոգու համար տեղավորի TEMP աղյուսակի մեկ սյան (ROW)-ի մեջ որը կունենա իր AUTO_INCREMENT ու PRIMARY KEY-ով մուտքագրվող id , և աղյուսակի տվյալները չեն խառնվի , որի id հետագայում դառնում է բանալի ծրագրերիդ բոլոր էջերի համար , որոնք աշխատում են այդ հարցումի նկատմամբ , այդ id-ին էջից էջ կարող ես փոխանցել կամ GET-ով կամ էլ SESSION-ով , իսկ էդ ROW-ն ավտոմատ ջնջես ուրիշ հարցումների ժամանակ նախապես նայելով խոսքի 1ժամ անցած լինի այդ id-ի ստեղձումից :
Այստեղ մնում է քեզ մի ալգորիթմ մշակես քո ստեղծած աղյուսակի տվյալները կարողանաս տեղավորես TEMP աղյուսակի 1 սյան մեջ , եթե կարիք կլինի կարամ օգնեմ էդ ալգորիթմի գծով :

david
12.12.2007, 09:05
Tom ջան շատ շնորհակալ եմ կարծես թե ստացվում է չնայած առաջացած խնդիրների:

Եվս մեկ հարց, այս անգամ MySQL - ից: Հնարավոր է արդյոք MySQL սերվերին ստիպել օրինակի համար շաբաթը մեկ անգամ, ավտոմատ կերպով, արխիվացնել (BACKUP) տվյալների բազան կամ աղյուսակները: