亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

DEDE,防止form被無限提交信息?

DEDE,防止form被無限提交信息?

阿波羅的戰車 2019-03-29 19:15:30
我用的是DEDE,自定義表單開發出網站最核心功能?,F在有人利用我的自定義表單來無限提交申請(應該是通過action地址),導致后臺刪不完的無效信息。
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

有如下幾個建議,把下拉框和單選按扭在后臺做成單行文本,這樣的話不管你提交的是下拉框或是單選,都可以有效的接收它的值。如果后臺就做成單選或下拉,如果改了默認值,提交的表單值跟后臺默認值對不上的話就會出現提交不成功的情況,就是前臺提交的時候選擇了,但后臺看不到數據。若是做成單行文本,提交的值就會以文本的形式寫入到后臺,表單修改值也更加顯得方便了。

 

提交之后會顯示織夢的默認提示信息“友情提示”幾秒過后就自動轉到首頁。如何才能讓提交的信息停留,并讓用戶確認所提交的信息。

 

我想了如下方式。給diy.php里提交成功后輸入固定值而不是自帶的跳轉方法。如下:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113if($action == 'post'){ if(empty($do)) {  $postform $diy->getForm(true);  include DEDEROOT."/templets/plus/{$diy->postTemplate}";  exit(); } elseif($do == 2) {  $dede_fields empty($dede_fields) ? '' : trim($dede_fields);  $dede_fieldshash empty($dede_fieldshash) ? '' : trim($dede_fieldshash);  if(!empty($dede_fields))  {   if($dede_fieldshash != md5($dede_fields.$cfg_cookie_encode))   {    showMsg('數據校驗不對,程序返回''-1');    exit();   }  }  $diyform $dsql->getOne("select * from osen_diyforms where diyid='$diyid' ");  if(!is_array($diyform))  {   showmsg('自定義表單不存在''-1');   exit();  }    $addvar $addvalue '';    if(!empty($dede_fields))  {     $fieldarr explode(';'$dede_fields);   if(is_array($fieldarr))   {    foreach($fieldarr as $field)    {     if($field == ''continue;     $fieldinfo explode(','$field);     if($fieldinfo[1] == 'textdata')     {      ${$fieldinfo[0]} = FilterSearch(stripslashes(${$fieldinfo[0]}));      ${$fieldinfo[0]} = addslashes(${$fieldinfo[0]});     }     else     {      ${$fieldinfo[0]} = GetFieldValue(${$fieldinfo[0]}, $fieldinfo[1],0,'add','','diy'$fieldinfo[0]);     }     $addvar .= ', `'.$fieldinfo[0].'`';     $addvalue .= ", '".${$fieldinfo[0]}."'";    }   }    }    $query "insert into `{$diy->table}` (`id`, `ifcheck` $addvar)  values (NULL, 0 $addvalue); ";    if($dsql->executenonequery($query))  {   $id $dsql->GetLastID();   if($diy->public == 2)   {    //diy.php?action=view&diyid={$diy->diyid}&id=$id    $goto "diy.php?action=list&diyid={$diy->diyid}";    $bkmsg '發布成功,現在轉向表單列表頁...';   }   else   {    $goto = !empty($cfg_cmspath) ? $cfg_cmspath '/';    $bkmsg '發布成功,請等待管理員處理...';   }   echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>訂單核對 </title><link href="/img_cnosn/css_end.css" rel="stylesheet" type="text/css" /></head>  <body><div id="ctent"><h1>您已成功提交訂單,請仔細核對你的信息!</h1><ul><script language="javascript"> function ReplaceAll(str,sptr,sptr1) {  while (str.indexOf(sptr) >= 0)  {     str = str.replace(sptr, sptr1);  }  return str; }   descria=",您的姓名:,聯系電話:,送貨地址:,購買產品:,支付方式:,訂貨留言:,b"; var descri=new Array(); descri=descria.split(","); str= "'.$addvalue.'" ; str=ReplaceAll(str,"\'",""); var strarray=new   Array(); strarray=str.split(",") ; for(i=0;i<7;i++){ document.write("<li>"+descri[i]+strarray[i]+"</li>"); }</script></ul><div class="info">友情提示:您的訂單已提交成功,我們的客服會盡快與你取得聯系 <a href="#" onclick="window.operner = null;window.open(\'\',\'_self\');window.close();">確認并關閉</a> 或 <a href="#" onclick="window.operner = null;window.open(\'\',\'_self\');window.close();">返回修改</a></div></div></body></html>';  } }}

 

以上是代碼。這樣就是固定提取前幾個表單信息給用戶確認,不過在后臺增加表單的時候一定要統一按以上數組的順序進行添加字段。這樣才能對應。

有一個不好的地方是,這個文件只要一改就是針對所有的表單提交,不過這只是一個方法,供參考,最終還得靈活應用。



查看完整回答
反對 回復 2019-04-04
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

1

2

3

4

5

{dede:sql sql="select sum(*) as s from dede_diyform1"}

[field:s /]

{/dede:sql}

 

<!--dede_diyform1換成你的自定義表單存儲的表名。->


查看完整回答
反對 回復 2019-04-04
  • 3 回答
  • 0 關注
  • 479 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號