如何避免頁面刷新數(shù)據(jù)重復(fù)寫入數(shù)據(jù)庫_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解析PHP漢字驗(yàn)證碼的實(shí)現(xiàn)
      ?php /* * 文件:chinesechar.php * 作用:漢字?jǐn)?shù)據(jù)儲存 * 作者:PHP實(shí)戰(zhàn)群:33918040 - 魚尾唯一 * 網(wǎng)址:http://bbs.ailf.cn/ http://www.fishwei.com/ * 特注:版權(quán)所有轉(zhuǎn)載注明出處!有付出才會(huì)有收獲! */ ChineseChar = array(人,出,來,友,學(xué),孝,

      如何避免頁面刷新數(shù)據(jù)重復(fù)寫入數(shù)據(jù)庫
      當(dāng)表單的數(shù)據(jù)是提交給本頁面處理并寫入數(shù)據(jù)庫時(shí),點(diǎn)提交后,刷新頁面的話使數(shù)據(jù)重復(fù)寫入數(shù)據(jù)庫。網(wǎng)上搜索一下,發(fā)現(xiàn)了不少的解決方案:

      一、把一頁面分開為兩個(gè),數(shù)據(jù)提交給另一個(gè)頁面處理,之后再跳到輸入頁面。
      優(yōu)點(diǎn):避免了刷新的影響,并可連續(xù)提交數(shù)據(jù)。
      缺點(diǎn):當(dāng)用戶在還沒有完整的填寫表單時(shí),點(diǎn)了提交。若不執(zhí)行數(shù)據(jù)入庫操作又要保留用戶之前輸入的內(nèi)容,用php來實(shí)現(xiàn)有些困難或說不方便。(當(dāng)然,用js實(shí)現(xiàn)可能比較容易。在此約定本文只是從php的角度評價(jià),研究php的運(yùn)用)
      *總的說來,這是一種不錯(cuò)的解決方案。

      二、在session中保存變量
      _SESSION['submit']=false
      提交后 改為true
      檢測變量
      if (_SESSION['submit']=true){
      echo "text";
      exit();
      }

      優(yōu)點(diǎn):避免了刷新的影響,并且只有一個(gè)頁面,沒有第一種方法的缺點(diǎn)
      缺點(diǎn):只能提交一次,不能連續(xù)提交數(shù)據(jù)。

      *有可取之處,但適用面太窄。


      三、在數(shù)據(jù)入庫之前執(zhí)行一次驗(yàn)證查詢,看數(shù)據(jù)庫里是否已經(jīng)存在了相同的記錄,由此來決定是否寫入數(shù)據(jù)。

      優(yōu)點(diǎn):沒有了前兩種方法的缺點(diǎn)。
      缺點(diǎn):代碼不精簡,操作繁瑣。再說有時(shí)并不排斥保存完全相同的信息。

      *實(shí)現(xiàn)代價(jià)太高,副作用過大。


      有沒有沒整合三種方法優(yōu)點(diǎn)不要其缺點(diǎn)的方法呢?有!下面就是一種不錯(cuò)的解決方案,與大家分享:

      ///////////////////////////////////////////////////////
      <?php
      session_start();
      if(!isset(_SESSION['h'])){
      _SESSION['h']=1;
      }
      _SESSION['h']++;

      if(isset(_POST['h']) and _SESSION['h']==_POST['h']){
      echo '<font color=green >您點(diǎn)提交按鈕了</font>';
      }else{
      echo '<font color=red>您沒有點(diǎn)提交</font>';
      }

      ?>

      <form action="im.php" method=post>
      b:<input type="text" name=b ><P>
      <input type="hidden" name=h value=<?php echo _SESSION['h']+1;?>>
      c:<input type="text" name=c ><P>
      d:<input type="text" name=d ><P>
      <input type="submit" value=提交>

       

      分享:php 截取中文
      ?php ?php //截取中文字符串 function mysubstr(str, start, len) { tmpstr = ; strlen = start + len; for(i = 0; i strlen; i++) { if(ord(substr(str, i, 1)) 0xa0) { tmpstr .= substr(str, i, 2); i++; } else tmpstr .= substr(str, i, 1); } return

      來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2010-04-13
      相關(guān)PHP教程