一步一步教你用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 = time();

	if ((isset($_FILES['html']['name']) &&
		(dirname($_FILES['html']['type']) == 'text') &&
		is_uploaded_file($_FILES['html']['tmp_name']) )) {
		// if user upload some files, then set the content of the files as the story_text
		$story_text = file_get_contents($_FILES['html']['tmp_name']);
	}else{
		$story_text = $_REQUEST['story_text'];
	}

	$story_text = addslashes($story_text);

	if (isset($_REQUEST['story']) && $_REQUEST['story']!='') {
		# it's an update
		$story = $_REQUEST['story'];

		$query = "update stories
				  set headline = '$headline',
				  	  story_text = '$story_text',
				  	  page = '$page',
				  	  modified = $time
				  where id = $story";
	}else{
		// it's a new story
		$query = "insert into stories
				  (headline,story_text,page,writer,created,modified)
				  values
				  ('$headline','$story_text','$page','".$_SESSION['auth_user']."',
				  	$time,$time)";
	}

	$result = mysql_query($query);

	if (!$result) {
		# code...
		echo "There was a database error when executing <pre>$query</pre>";
		echo mysql_error();
		exit;
	}

	if ((isset($_FILES['picture']['name']) &&
		is_uploaded_file($_FILES['picture']['tmp_name']))) {
		# there is uploaded picture
		if (!isset($_REQUEST['story']) || $_REQUEST['story']=='') {
			$story = mysql_insert_id($handle);
			// mysql_insert_id  return the auto generated id used in the last query
		}
		$type = basename($_FILES['picture']['type']);

		switch ($type) {
			case 'jpeg':
			case 'pjpeg':
			case 'png':
			case 'jpg':
				$filename = "images/$story.jpg";
				move_uploaded_file($_FILES['picture']['tmp_name'], '../'.$filename);
				$query = "update stories
						  set picture = '$filename'
						  where id = $story";
				$result = mysql_query($query);
				break;

			default:
				echo 'Invalid picture format:'.$_FILES['picture']['type'];
				break;
		}
	}else{
		// there is no image file to upload or didn't get the file's info
		echo 'Possible file upload attack:';
		echo "filename '".$_FILES['picture']['tmp_name']."'.";
	}

	header('Location: '.$_REQUEST['destination']);
?>

我们还是先从整体捋一遍代码:

第7,8行

这两个变量都是从上一个页面story.php提交表单中获取的参数

第9行

time函数返回的是时间戳

11-18行

这部分代码返回的是上传的html文件的内容

第20行

这里用到了php中发送text内容到数据库的一个函数:addslashes,作用是在一些特定的符号前面加上/ 符号,特定的符号有‘, ‘‘ , nul, \等,

例如:

然后我在搜索这个函数是,发现了另外的方法mysql_escape_string,

22-39行

根据传入的参数中有没有story来判断是更新还是新添加的story,这里之前我们也有提到了。

50-75行

是标准的php上传文件的步骤,可以试着记一下

注意第54行,是得到自增序列的下一个字段

最后第82行

我们上一篇blog里面有提到过,在form提交了两个hidden的参数,其中一个是destination,其实就是writer.php页面了。

好了,基本上这个页面没有什么特别难的地方。

我们在来看更简单的 delete_story.php

通过check_permission函数来确定当前用户是否有修改的权限,如果有,就把当前的文章删除。

check_permission是在user_auth_fns.php文件中

好了,文章的修改和新建部分我们都全部介绍完了,下一篇blog,我们来介绍publish相关的3个文件

时间: 2024-11-10 07:26:35

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

一步一步教你用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.3 管理页面

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

一步一步教你用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.7 关键字和搜索

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

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

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

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

本篇blog我们将来重点看文章编辑页面story.php,因为这个页面说实话代码量是挺多的,还涉及到了图片的上传. 从页面上来直观的体验: add new  和 edit都是打开的story.php页面,所以我们应该能提前想到,这个页面会先检测下是哪种请求. 首先我们来搞定比较简单的logout.php页面 这个页面其实很简单了,主要是几个函数 unset函数其实就是将一些特定的变量置为空: session_destroy函数是销毁当前的session,当然,当前session中的数据也随着一并

一步一步教你用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吧,虽然我也不是高手,但就学习上面还是能评论几句的,比如我从表单开始 讲表单的注册,也就是 网站会员

教你如何调用百度编辑器ueditor的上传图片、上传文件等模块

出于兴趣爱好,前段时间自己尝试写了一个叫simple的cms,里面使用了百度ueditor编辑器,发现它的多图片上传模块很不错,用起来很方便,又可以选择已经上传好的图片.正好我又是个懒人,发现有现成的自己就不想新开发了.于是我就想,是不是可以调用这个上传模板为自己所用呢? 有了这个想法后,我就到网上查阅资料,可惜资料少的可怜,都不能很好解决我的问题.于是觉得还是自己动手丰衣足食,皇天不负苦心人,终于摸索出解决方法,现在分享出来,和自己有同样想法的小伙伴. 代码如下: <html> <he