<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" >

<channel>
	<title>Maker&#039;s blog &#187; 保留数据</title>
	<atom:link href="http://blog.foolbird.net/t/%e4%bf%9d%e7%95%99%e6%95%b0%e6%8d%ae/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.foolbird.net</link>
	<description>用多一点点的辛苦, 去交换多一点点的幸福.</description>
	<lastBuildDate>Fri, 30 Mar 2012 13:18:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>保留用户输入的错误数据</title>
		<link>http://blog.foolbird.net/786.html</link>
		<comments>http://blog.foolbird.net/786.html#comments</comments>
		<pubDate>Fri, 05 Sep 2008 17:35:55 +0000</pubDate>
		<dc:creator>maker</dc:creator>
				<category><![CDATA[笔记]]></category>
		<category><![CDATA[保留数据]]></category>
		<category><![CDATA[错误]]></category>

		<guid isPermaLink="false">http://www.foolbird.net/?p=786</guid>
		<description><![CDATA[最近公司项目比较闲， 所以很多时间都在整理代码， 这几天就又有了一个这样的需求， 当用户提交了错误的信息， 提示错误并保留用户输入的数据。 起初第一个想法就是使用COOKIE, 后来又考虑使用$_SESSION, 其实两者无明显区别，大概流程是这样的， 每个请求的前面都加入下面的逻辑： if(有保存的数据){ if(数据是不是本动作产生的){ 如果是则取得数据 } 清空保存的数据 } if(是一个POST请求){ 保存用户的请求数据 } 这样处理的话消息处理需要中间页跳转，就是说错误提示是一个单独的页面，这样基本可以做到将数据保存到下一个请求。这个方法后来在显示上比较麻烦，就是需要判断有没有取得的数据，有的话输出没有的话不输出， 如果使用模板引擎的话处理起来更加复杂， 于是又提出了另一种解决方案。 将表单和处理程序放在一起（可能是一个function , MVC中应该是一个action中），这样的话需要显示表单或者处理数据要准备一套结构相同的数据传给页面，然后由本页显示错误消息， 不需要使用COOKIE. function actionCreate(){ if(是POST请求){ 过滤数据 验证数据并生成错误 if(没有错误){ 向数据库插入数据 }else{ 将错误数据提交给显示层 } }else if(是GET请求并且必要参数正确){ 从数据库取得显示数据提交给显示层 }else{ 返回一个参数错误 } $this-&#62;display('create.html'); } 可以说这个方法是比较完美的， 目前来说没有什么不足之处， 但是有很多细节是需要注意的， 比如form的action要提交给自身并且携带参数， 虽然参数无作用， 但可以用来刷新页面(window.location.href=window.location.href)， 显示层刷新页面的功能是必须的， 因为如果是修改操作那么输入错误之后将会保留错误的信息。 接下来还可以通过控制错误消息的结构识别错误是由哪一个表单项产生的， 如果需要还可以对错误进行自动修改等等。 Random PostsDec [...]]]></description>
			<content:encoded><![CDATA[<p>最近公司项目比较闲， 所以很多时间都在整理代码， 这几天就又有了一个这样的需求， 当用户提交了错误的信息， 提示错误并保留用户输入的数据。</p>
<p>起初第一个想法就是使用COOKIE, 后来又考虑使用$_SESSION, 其实两者无明显区别，大概流程是这样的， 每个请求的前面都加入下面的逻辑：</p>
<pre>
if(有保存的数据){

    if(数据是不是本动作产生的){

        如果是则取得数据

    }

    清空保存的数据

}

if(是一个POST请求){

    保存用户的请求数据

}
</pre>
<p>这样处理的话消息处理需要中间页跳转，就是说错误提示是一个单独的页面，这样基本可以做到将数据保存到下一个请求。这个方法后来在显示上比较麻烦，就是需要判断有没有取得的数据，有的话输出没有的话不输出， 如果使用模板引擎的话处理起来更加复杂， 于是又提出了另一种解决方案。</p>
<p>将表单和处理程序放在一起（可能是一个function , MVC中应该是一个action中），这样的话需要显示表单或者处理数据要准备一套结构相同的数据传给页面，然后由本页显示错误消息， 不需要使用COOKIE.</p>
<pre>
function actionCreate(){

    if(是POST请求){

        过滤数据

        验证数据并生成错误

        if(没有错误){

            向数据库插入数据

        }else{

            将错误数据提交给显示层

        }

    }else if(是GET请求并且必要参数正确){

        从数据库取得显示数据提交给显示层

    }else{
        返回一个参数错误
    }

    $this-&gt;display('create.html');

}
</pre>
<p>可以说这个方法是比较完美的， 目前来说没有什么不足之处， 但是有很多细节是需要注意的， 比如form的action要提交给自身并且携带参数， 虽然参数无作用， 但可以用来刷新页面(window.location.href=window.location.href)， 显示层刷新页面的功能是必须的， 因为如果是修改操作那么输入错误之后将会保留错误的信息。</p>
<p>接下来还可以通过控制错误消息的结构识别错误是由哪一个表单项产生的， 如果需要还可以对错误进行自动修改等等。</p>
<h3  class="related_post_title">Random Posts</h3><ul class="related_post"><li>Nov 27, 2006 -- <a href="http://blog.foolbird.net/531.html" title="宣传部宣传海报">宣传部宣传海报</a></li><li>Jan 5, 2007 -- <a href="http://blog.foolbird.net/486.html" title="sablog模板设计教程[3] &#8211; default/style.css文件分析">sablog模板设计教程[3] &#8211; default/style.css文件分析</a></li><li>Feb 5, 2007 -- <a href="http://blog.foolbird.net/461.html" title="tel.xls.exe专杀下载">tel.xls.exe专杀下载</a></li><li>Feb 10, 2007 -- <a href="http://blog.foolbird.net/452.html" title="一个空间绑定多域名的PHP代码">一个空间绑定多域名的PHP代码</a></li><li>Aug 21, 2008 -- <a href="http://blog.foolbird.net/777.html" title="令人发狂的项目经历">令人发狂的项目经历</a></li><li>Jul 12, 2006 -- <a href="http://blog.foolbird.net/626.html" title="昨天真辛苦">昨天真辛苦</a></li><li>Oct 17, 2008 -- <a href="http://blog.foolbird.net/792.html" title="url重写后的路径问题">url重写后的路径问题</a></li><li>Dec 9, 2006 -- <a href="http://blog.foolbird.net/523.html" title="一个人的路">一个人的路</a></li><li>Sep 9, 2008 -- <a href="http://blog.foolbird.net/787.html" title="使用PHP收发邮件">使用PHP收发邮件</a></li><li>Sep 26, 2007 -- <a href="http://blog.foolbird.net/293.html" title="揭开网络诈骗的迷雾(5).">揭开网络诈骗的迷雾(5).</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.foolbird.net/786.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

