Inugroho has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,
I am using www::mechanize to fill out an event form (pageA).
On pageA, I need to fill out some fields, then I need to click a link to pageB. On pageB, I need to click a number, which then redirect me back to pageA to continue filling out the form. When I get redirected back to pageA, the values that I have filled in textboxes are supposed to be there, but oddly enough, the textboxes have lost its values.

I traced the problem to the URL. When I get redirected to pageB the URL needs to look like this:
https://xxx.xxx.com/xxx/xxx/ch=H3&div=1&appType=xxx&EventId=365285&mds +eId=&mdseLevel=3&buId=&xxxmdseId=215043&cpfrbuId=


So the URL is supposed to record the eventID, instead i get this:
https://xxx.xxx.com/xxx/xxx/ch=H3&div=1&appType=xxx&EventId=&mdseId=&m +dseLevel=3&buId=&xxxmdseId=215043&cpfrbuId=


As you can see, there is no eventID assigned on the URL. I can't click that link first then fill out the form, it has to be done in order for the form to work correctly. Does any monks have ideas on how to solve this problem?

Code tags wrapped around URL's to eliminate horizontal scrolling, per consideration, by davido

Replies are listed 'Best First'.
Re: www::mechanize: loosing values after being redirected
by davidrw (Prior) on Aug 05, 2005 at 18:57 UTC
    It sounds like the pageA is using javascript to create the link you click to get to pageB (which is why you have to fill the form out first before submitting in order to get a EventId). You need to emulate the javascript behavior somehow .. make find_link for the link to pageB and get the url, and edit it to make sure it has the right EventId in the query string and then get it.

    Beyond that, can't really recommend anything else withouth seeing the source of the page in question (pageA).
      David, Seems to me that EventID is not assigned until I get to pageB. Here is the editted HTML of pageA: (The link is labeled "Item Group")
      <form name="eventmaintenance" action="/xxx/xxx/event_maintenance.asp?c +h=H3&div=1&appType=xxx" method="POST"> <table width="100%" bgcolor='#ffffff' border="0"> <input type=Hidden name='Action'> <input type=Hidden name='EventId' value="-1"> <input type=Hidden name='ParentId' value=""> <input type=Hidden name='CopyFromEventId' value=""> <input type=Hidden name='OldEventId' value="-1"> <input type=Hidden name='Level' value=""> <tr><td align="CENTER" valign="MIDDLE" class="subDark" bgcolor="#3366F +F">Describe Event</td></tr> <tr> <td> <table width="100%" border="0"> <tr> <td class="sub">Name:</td> <td><input type="Text" name="EventName" value="" maxlength="40" size=" +20"></td> <td class="sub">Description</td> <td ><input type="Text" name="EventDesc" value="" maxlength="255" size +="45"><br><font size=-3>(max of 255 characters)</font></td> </tr> </tr> <tr> <td class="sub">Event Category:</td> <td> <select name="EventCategory" onchange="refreshFromFormData()"> <option value="">--Choose--</option> <option value="9">option1 </option> <option value="13">option2 </option> <option value="18">option3 </option> <option value="27">option4 </option> </select> </td> <td class="sub">Event<br>Type Code:</td> <td> <select name="EventTypeCode"> <option value="">--Choose--</option> </select></td> </tr> </table> </td></tr> <tr><td align="CENTER" valign="MIDDLE" class="subDark" bgcolor="#3366F +F">Time Occurrence</td></tr> <tr><td> <table width="100%" border="0"> <tr> <td class="sub">Event Occurance:</td> <td class="sub"><input type="radio" checked onClick="form.submit()" na +me="OccuranceType" value="-1">Once<input type="radio" onClick="form.submit()" name="OccuranceType" value="0">Annually</td> <td></td><td></td></tr> </table> <table id="oncerows" width="100%" border="0"> <tr> <td></td> <td class="sub">Event<br>Begin Date:</td> <td> <SELECT name="BeginDateYYYY" onchange="changeSelectionDays('eventmaint +enance','Begin')"></SELECT> <SELECT name="BeginDateMM" onchange="changeSelectionDays('eventmainten +ance','Begin')"></SELECT> <SELECT name="BeginDateDD" onchange="changeSelectionDays('eventmainten +ance','Begin')"></SELECT></td> <td></td></tr> <tr> <td class="sub"></td><td class="sub">Event<br>End Date:</td> <td> <SELECT name="EndDateYYYY" onchange="changeSelectionDays('eventmainten +ance','End')"></SELECT> <SELECT name="EndDateMM" onchange="changeSelectionDays('eventmaintenan +ce','End')"></SELECT> <SELECT name="EndDateDD" onchange="changeSelectionDays('eventmaintenan +ce','End')"></SELECT></table> </td></tr> <tr> <td nowrap class="normal"><input size="9" name="mdseId" value="" type= +"text"><input name="mdseDesc" size="30" type="text" value="">&nbsp;<a class=bold href="javascript:chooseGroups('item','-1' +)">Item group</a> <td></td> </tr> </table> </form> </td></tr></table></td></tr></table><script language="javascript" src= +"/home/rl_footer.asp?language=ENG&country=US"></script> </body></html> <SCRIPT LANGUAGE="JavaScript"> var bDecided = false; var bSeries = true; var bOccChange = false; var bChild = eval("false"); var ParentID = ""; var parent_EventName = ""; var parent_EventStatus = ""; var parent_EventDesc = ""; var parent_EventTypeCode = ""; var parent_OwnerTypeCode = ""; var g_action; var myTimeOut; function refreshFromFormData() { document.eventmaintenance.Action.value = "PULLFROMFORM"; document.eventmaintenance.submit(); } function open_popupCOE(value,EventId,ch,div,APPTYPE,mdse_level_id,bu_g +roup_id,mdseLevel) { var url = "/xxx/xxx/event_createCOE.asp?ch="+ch+"&div="+div+"&appType="+APPTYPE+ +"&caller=event_maintenance.asp&EventId=" +EventId+ "&mdseId=" + mdse_level_id+ "&bu_group_id=" + bu_group_id + "&mdseLeve +l=" + mdseLevel+"&Type="+value+" "; window.location = url; } function clearForm() { document.eventmaintenance.EventId.value = "-1"; document.eventmaintenance.Action.value = "CLEAR"; document.eventmaintenance.submit(); } function bCreateNewEvent() { return (parent_EventStatus == "2" && document.eventmaintenance.EventStatus.options[document.eventmaintenanc +e.EventStatus.selectedIndex].value != parent_EventStatus); } function areYouSure() { if(bCreateNewEvent()) if(confirm("By continuing, this action will create a new one t +ime event. Are you sure you want to continue?")) decided(false); else clearTimeOut(); else decided(false); } function decided(bChoice) { bSeries = bChoice; bDecided = true; } function checkStatus() { if(!bDecided){ myTimeOut = setTimeout("checkStatus()", 500); } else{ if(!document.layers) hide_modifyOccurrenceOrSeriesPopup("modOcc"); clearTimeOut(); if(validateForm()){ if(bSeries){ g_action = "MODIFYSERIESOCCURRENCE"; if(bOccChange) alert("Occurrence information can only be changed +from the event that begins the series. All other changes will be applied to the series."); } else{ if(bCreateNewEvent()){ if(!bOccChange) { //lsirvin added this line to put the current E +ventId value into the OldEventId value. document.eventmaintenance.OldEventId.value = document.eventmaintenance.EventId.value; document.eventmaintenance.EventId.value = "-1" +; } g_action = "CREATEFROMOCCURRENCE"; } } document.eventmaintenance.Action.value = g_action; document.eventmaintenance.submit(); } } } function clearTimeOut() { clearTimeout(myTimeOut); } function submitForm(action) { var bGood = false; LEVEL = ""; switch(action){ case "CREATE": bGood = (validateForm()) ? validateImpact() : false; break; case "MODIFYSERIES": bGood = validateForm(); break; case "ADDIMPACT": bGood = validateImpact(); if (document.eventmaintenance.ImpactValue.value=="") action = "ADDLEVEL"; document.eventmaintenance.action += "\#level"; break; case "ADDIMPACTSERIES": bGood = validateImpact(); if (document.eventmaintenance.ImpactValue.value=="") action = "ADDLEVELSERIES"; document.eventmaintenance.action += "\#level"; break; default: bGood = true; break; } if (bGood) { document.eventmaintenance.Level.value=LEVEL; document.eventmaintenance.Action.value=action; document.eventmaintenance.submit(); } } if(document.eventmaintenance.mdseId.value==""&&document.eventmaintenan +ce.mdseLevel[document.eventmaintenance.mdseLevel.select edIndex].value != 0) { alert("The identifier field cannot be empty."); bGood = false; } if(!isRealNumber(document.eventmaintenance.buId.value)) { alert("xxxx"); bGood = false; } return bGood; } function validateForm() { var bGood = true; //Check Describe Event if (document.eventmaintenance.EventTypeCode.options[document.event +maintenance.EventTypeCode.selectedIndex].value=="") { bGood=false; } if (RTrim(document.eventmaintenance.EventDesc.value)=="") { bGood= +false; } if (RTrim(document.eventmaintenance.EventName.value)=="") { bGood= +false; } if (!bGood) { alert("Fill in all Event Description fields."); } //Check Time Occurance if (document.eventmaintenance.OccuranceType[0].checked) { //Once var begin = new Date(document.eventmaintenance.BeginDateMM.options[document.eventmaint +enance.BeginDateMM.selectedIndex].value + "/" + document.eventmaintenance.BeginDateDD.options[document.eventmaintenanc +e.BeginDateDD.selectedIndex].value + "/" + document.eventmaintenance.BeginDateYYYY.options[document.eventmaintena +nce.BeginDateYYYY.selectedIndex].value); var end = new Date(document.eventmaintenance.EndDateMM.options[document.eventmainten +ance.EndDateMM.selectedIndex].value + "/" + document.eventmaintenance.EndDateDD.options[document.eventmaintenance. +EndDateDD.selectedIndex].value + "/" + document.eventmaintenance.EndDateYYYY.options[document.eventmaintenanc +e.EndDateYYYY.selectedIndex].value); if (end < begin) { alert("Event End Date must be after Event Begin Date."); bGood = false; } } else if (document.eventmaintenance.OccuranceType[1].checked) { / +/Annual if (document.eventmaintenance.AnnuallyType[0].checked) { //Exa +ct Day if (document.eventmaintenance.SpecificDateMonth.options[document.eventmai +ntenance.SpecificDateMonth.selectedIndex].value=="-1" || document.eventmaintenance.SpecificDateDay.options[document.eventmai +ntenance.SpecificDateDay.selectedIndex].value=="-1") { alert("Choose Exact Day Info."); bGood=false; } } else if (document.eventmaintenance.AnnuallyType[1].checked) +{ //Day of Week if (document.eventmaintenance.DayWhichWeek.options[document.eventmaintena +nce.DayWhichWeek.selectedIndex].value=="-1" || document.eventmaintenance.DayWhichDay.options[document.eventmaintenanc +e.DayWhichDay.selectedIndex].value=="-1" || document.eventmaintenance.DayWhichMonth.options[document.eventmaintena +nce.DayWhichMonth.selectedIndex].value=="-1") { alert("Choose Day of Week Info."); bGood=false; } } else if (document.eventmaintenance.AnnuallyType[2].checked) +{ //Holiday if (document.eventmaintenance.HolidayCode.options[document.eventmaintenan +ce.HolidayCode.selectedIndex].value=="-1") { alert("Choose Holiday Info."); bGood=false; } } else { alert("Fill in Event Time Occurrance."); bGood = false; } if (document.eventmaintenance.DaysBeforeEvent.value==""||docum +ent.eventmaintenance.DaysAfterEvent.value=="") { alert("Fill in Before/After Days fields."); bGood = false; } if (document.eventmaintenance.RemindDays.value=="") { alert("Fill in Remind Days."); bGood = false; } if (!document.eventmaintenance.EndCode[0].checked && !document +.eventmaintenance.EndCode[1].checked) { alert("Select when event ends."); bGood = false; } if (document.eventmaintenance.EndCode[1].checked && document.e +ventmaintenance.OccurranceCount.value=="") { alert("Choose in how many years the Event will end."); bGood = false; } document.eventmaintenance.DaysBeforeEvent.value = document.eventmaintenance.DaysBeforeEvent.value.replace(",",""); document.eventmaintenance.DaysAfterEvent.value = document.eventmaintenance.DaysAfterEvent.value.replace(",",""); document.eventmaintenance.RemindDays.value = document.eventmai +ntenance.RemindDays.value.replace(",",""); document.eventmaintenance.OccurranceCount.value = document.eventmaintenance.OccurranceCount.value.replace(",",""); if (!isRealNumber(document.eventmaintenance.DaysBeforeEvent.value)||!isRe +alNumber(document.eventmaintenance.DaysAfterEvent.value )||!isRealNumber(document.eventmaintenance.RemindDays.value)||!isRealN +umber(document.eventmaintenance.OccurranceCount.value)) { alert("Time Occurrance Fields must be whole numbers."); bGood = false; } } return bGood; } function clearLevelFields() { document.eventmaintenance.mdseId.value=""; document.eventmaintenance.mdseDesc.value=""; document.eventmaintenance.buId.value=""; document.eventmaintenance.buDesc.value=""; document.eventmaintenance.ImpactValue.value=""; } function makeSelectedIndexZero(field) { eval("document.eventmaintenance." + field + ".selectedIndex=0;"); } function chooseGroups(which,EventId) { if (EventId!="-1") { var url = "/xxx/xxx/" + which + "_group.asp?ch=H3&div=1&appTyp +e=xxx&EventId=-1&mdseLevel=" + document.eventmaintenance.mdseLevel.value + "&mdseId=" + document.even +tmaintenance.mdseId.value + "&buId=&xxxmdseId=&xxxbuId="; //alert(url); window.location = url; } else { //Save event so they can choose item group for impact if (validateForm()) { var action; if (which=="store") { action="SSEFGS"; } else { action="ISEFGS"; } document.eventmaintenance.Action.value=action; document.eventmaintenance.submit(); } } } </script>
      Additional information, This is what I do on pageA before clicking "Item Group"
      $mech->submit_form( form_name => 'eventmaintenance', fields => { EventName => 'test', EventDesc => 'test', EventCategory => 'Option2', } ); $mech->submit_form( form_name => 'eventmaintenance', fields => { bDoNotNotify => 'true', EventTypeCode => 'Option2', bDoNotNotify => 'true', BeginDateYYYY => '200 +5', BeginDateMM => 'Aug', BeginDateDD => '4', EndDateYYYY => '2005', EndDateMM => 'Aug', EndDateDD => '7', } );