一步一步教你用PHP+MySql搭建网站 No.4 文章编辑、图片上传

本篇blog我们将来重点看文章编辑页面story.php,因为这个页面说实话代码量是挺多的,还涉及到了图片的上传。

从页面上来直观的体验:

add new
 和 edit都是打开的story.php页面,所以我们应该能提前想到,这个页面会先检测下是哪种请求。

首先我们来搞定比较简单的logout.php页面

这个页面其实很简单了,主要是几个函数

unset函数其实就是将一些特定的变量置为空;

session_destroy函数是销毁当前的session,当然,当前session中的数据也随着一并销毁了;

接下来再执行header函数,也就是writer.php,当然就会执行到这个代码块中去了:

Menu和Public Site都很简单,一个是返回到admin文件夹下的index页面,另一个是返回当上级目录,默认是index.php,就是我们整个网站的主页面。

接下来看重头戏,

story.php

因为这部分的代码算是比较长的,我们还是先把代码贴出来,先整体讲解下,然后再就个别细节进行深入讲解。

<?php
	# Script User to Create or Edit a Story
	include_once('include_fns.php');

	if (isset($_REQUEST['story'])) {
		$story = get_story_record($_REQUEST['story']);
	}
?>

<form action = "story_submit.php" method = "POST" enctype="multipart/form-data">
	<input type = "hidden" name="story" value = "<?php echo $_REQUEST['story'];?>">
	<input type = "hidden" name = "destination"
			value = "<?php echo $_SERVER['HTTP_REFERER']; ?>">

	<table>
		<tr>
			<td>Headline</td>
		</tr>

		<tr>
			<td><input size="80" name="headline"
						value ="<?php echo $story['headline'];?>" ></td>
		</tr>

		<tr>
			<td>Page</td>
		</tr>

		<tr>
			<td>
				<?php
					if (isset($_REQUEST['story'])) {
						# code...
						$query = "select p.code, p.description
								from pages p, writer_permissions wp, stories s
								where p.code = wp.page
									  and wp.writer = s.writer
									  and s.id = ".$_REQUEST['story'];
					}else{
						$query = "select p.code, p.description
								  from pages p, writer_permissions wp
								  where p.code = wp.page
								  		and wp.writer = '{$_SESSION['auth_user']}'";
					}
					echo query_select('page', $query , $story['page']);
				?>
			</td>
		</tr>

		<tr>
			<td>Story text (can contain HTML tags)</td>
		</tr>

		<tr>
			<td>
				<textarea cols = "80" rows="7" name="story_text" wrap="virtual">
					<?php echo $story['story_text'];?>
				</textarea>
			</td>
		</tr>

		<tr>
			<td>
				Or upload HTML file
			</td>
		</tr>

		<tr>
			<td>
				<input type = "file" name = "html" size="40">
			</td>
		</tr>

		<tr>
			<td>Picture</td>
		</tr>
		<tr>
			<td><input type="file" name= "picture" size="40"></td>
		</tr>

		<?php
			if ($story[picture]) {
				$size = getimagesize('../'.$story['picture']);
				$width = $size[0];
				$height = $size[1];
		?>

			<tr>
				<td>
					<img src="<?php echo '../'.$story['picture'];?>"
						 	width="<?php echo $width;?>" height="<?php echo $height;?>">
				</td>
			</tr>
		<?php
		}
		?>

		<tr>
			<td algin="center"><input type="submit" value="Submit"></td>
		</tr>
	</table>
</form>

因为代码比较长,所以就不整个截图了,然后我们来走一遍代码:

第5行

我们之前有提到过,无论点击add new 还是edit,显示的都是story.php页面,所以,这里就是根据request中有没有story这个变量来决定到底是add new还是edit了。当然,我们很容易能够想到,如果没有参数story,那就是add new,如果有story参数,那一定是edit了。

这也可以从writer.php的代码中看出来。

第6行

我们用get_story_record函数来获取当前story的各个详细信息,包括id,作者,主体内容,创建时间,修改时间,发布时间,图片内容等等。。。

接下去的整个代码构造出来的是一个表单内容 form

看到表单submit的请求页面是story_submit.php,请求方式是POST,关于enctype,我们来看一下stackoverflow上面大神的解答吧:

因为我们这个页面可能会传文件上去,所以enctype要是  multipart/form-data

接下来,页面输入了两个属性为hidden的参数,一个是story,一个是destination。story不用多解释,如果是新建的话,那story是空的;而destination是为了在story_submit.php页面可以直接返回到当前页面的前一个页面(其实准确的说法,这里并不是前一个页面,而是The
address of the page (if any) which referred the user agent to the current page. This is set by the user agent.),也就是writer.php页面,其实这里 _SERVER[‘HTTP_REFERER‘]里面其实就是writer.php页面。

关于更多_SERVER的内容,参见:

http://php.net/manual/en/reserved.variables.server.php

16-23行

是headline的表单行,这部分比较简单

25-48行

是page类别的下拉选择项

这里依旧是根据参数中有无story来判断,如果有,则根据当前story的id号来找到属于哪一类别的,并且显示出来;如果没有,则查看当前用户有发表那几种文章的权限,例如当前我登陆的用户,只有两个权限:

当然,这个权限是存储在writer_permissions 表中的,

然后select语句写好了之后,我们就通过query_select函数来显示下拉框

50-60行

这部分用来显示story的主体部分,和headline类似。

62-80行

是用来上传文件的部分,第一部分是上传html格式的文件,第2部分是上传图片

81-96行

这部分php代码用来显示已经存储于服务器上的图片,当然前提是要能从story表中获取到picture字段的内容

好了,整个代码走完了一遍,我们来看具体用到的几个函数吧:

get_story_record函数

这个函数存在于db_fns.php,你知道它是存放在根目录的对吧?

query_select 函数

依旧是在db_fns.php

这部分组合成了最终要显示的HTML格式的内容,我们可以查看下源代码:

<select name = 'page'>
<option value="" selected>-- Choose --</option>
<option value='news'>[news] The Top News Stories From Around the World</option>
<option value='sport'>[sport] Sports Latest - All The Winners and Losers</option>
</select>

好了,这部分的内容就到此为止,我们下一章章节来看我们新输入的内容是如何上传到服务器上的。

时间: 2024-08-02 07:28:47

一步一步教你用PHP+MySql搭建网站 No.4 文章编辑、图片上传的相关文章

一步一步教你用PHP+MySql搭建网站 No.6 文章的publish

本节我们来看和publish相关的3个页面:  publish.php, unpublish_story.php和publish_story.php 我们回到admin的主页面,index.php 我们点击下面的链接,跳转到的是 publish.php 整体过一遍代码,这里面应该没有多少新的内容了,我们重点看一下结构: 4-6行 和editer一样,如果当前用户还未已经登录,就显示登录的界面 9-13行 显示当前登录作者的名字,以及3个链接,logout,主菜单和返回主页面 15-18行 这个s

一步一步教你用PHP+MySql搭建网站 No.3 管理页面

先来看一下本篇blog将要介绍的内容. 我们的主页面已经搭建完成了,然后左边的navigation里面的大部分内容也都能点击了,只剩下"search" 和"I'm a writer"两个链接了. 本篇教程过后,我们将能完成下面的功能: 这是我们的主界面 点击"I'm a writer" : 点击任意一个链接: Writers登录之后的页面: 好了,我们一步一步来吧: 我们可以看到在主界面的表单项里面,点击I'm a writer之后的链接是这样的

一步一步教你用PHP+MySql搭建网站 No.5 图片上传、故事删除

上篇文章中讲到,story.php中的表单提交之后的页面是story_submit.php,我们就看一下story_submit.php是如何完成文章的发表的 老样子,先上代码: <?php # add / modify story record include_once('include_fns.php'); $handle = db_connect(); $headline = $_REQUEST['headline']; $page = $_REQUEST['page']; $time =

一步一步教你用PHP+MySql搭建网站 No.7 关键字和搜索

本篇是这系列教程的最后一篇了. 我们看到还有几个页面没有讲到,分别是 keywords相关页面 和search相关页面 将这两部分放在一起是因为search是搜索的关键字找到文章的.因为这本教材是比较老的教材了,所以里面的架构设计可能也比较老. 截止到目前,基本上没有新的知识点要讲解了,看一下如何来构建网页和后台的逻辑吧: keywords.php 第10行 get_story_record 和get_writer_record功能类似,是在db_fns.php中的一个函数: keyword_a

一步一步教你用PHP+MySql搭建网站 No.2 图片显示和Page页面

接着上一章节的看,我们现在的程序有了第一个主页面,但是我们会发现几个问题,一个是主页上的图片没法显示,二是点击read more ... 之后的链接没有内容 这两个页面的入口分别是下图里面的两个框出来的内容. 我们先来看图片显示的页面: Resize_image.php 我们注意到其实这个链接的完整URL是: resize_image.php?image=...&max_width=...&max_height=...; 也就是说这个链接有3个参数: image是图片的名称,max_wid

一步一步教你用PHP+MySql搭建网站 No.1 主页&amp;数据库连接

这一章节我们来看用户输入网页后的主界面. 一般来说,默认主页都是index点xxx,比如 index.php, index.html , index.jsp等等.我们来看一下我们的index.php吧 index.php 提醒: 在<?php?>的两端,不要出现任何空格或者其他字符,也就是不要在<?php 的前面加上空格这样的字符,然后?>后面也不要出现其余的字符,不然的话可能会出现这样的提示: 我之前出现过这样的情况,google了之后是说headers 必须放在最开始的时候执行

一步一步教你用PHP+MySql搭建网站 No.0 准备工作

新开一个系列教程吧,这次是讲如何用PHP+MySQL搭建网站. 之前一直有想过搭建自己的个人网站,然后上周通过阿里云申请的域名和空间都通过审核了,于是就开始研究如何用PHP+MYSQL搭建网站,研究了差不多两周,总算搞定了一个小型的blog类的网站.当然,整个过程是通过学习<PHP and MySQL web development>下来的,这篇教程中的例子是在原书中的Chapter 28: Building a Content Manager System章节的基础上,修改完成的.所有的源代

web系列教程之php 与mysql 动态网站 。检索 与更新。

接着上次WEb 系列开发之php 与mysql动态网站入门. 个人觉得,学习技术就像一棵大树,主干很重要,枝叶其次.对于学习技术,我们应该分清主次关系.怎么学?为什么要学?有一个较好的分寸. 有时候觉得 国内有些教育,从一开始就从枝叶 细节说的很清楚.说了一大堆,就是很散的感觉,虽然有很多知识.但是学的人呢,并不清楚这个的实际应用, 这样会导致学习兴趣的缺失.个人觉得 就比如 php 和mysql吧,虽然我也不是高手,但就学习上面还是能评论几句的,比如我从表单开始 讲表单的注册,也就是 网站会员

安卓手把手教你结合阿里云OSS存储实现视频(音频,图片)的上传与下载

首先,明白阿里云OSS是个什么鬼 阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务.用户可以通过调用API,在任何应用.任何时间.任何地点上传和下载数据,也可以通过用户Web控制台对数据进行简单的管理.OSS适合存放任意文件类型,适合各种网站.开发企业及开发者使用. 以上是官方解释.可以看出,OSS可以为我们在后台保存任何数据,强大无比. 步入正题: 首先你得有个阿里云账号(淘宝账号也可以哦,毕竟阿里账号都通用)