项目链接:https://download.csdn.net/download/weixin_45525272/14920287音乐列表案例(上)音乐列表案例(下) 2.2. 新增数据(表单类)
表单使用(form action method enctype,input name label for ID)服务端表单校验并提示错误消息
empty 判断一个成员是否没定义或者值为 false(可以隐式转换为 false)
上传文件,文件数量,文件种类
// $images['error'] => [0, 0, 0]if ($images['error'][$i] !== UPLOAD_ERR_OK) { $GLOBALS['error_message'] = '上传海报文件失败1'; return;}// 类型的校验// $images['type'] => ['image/png', 'image/jpg', 'image/gif']if (strpos($images['type'][$i], 'image/') !== 0) { $GLOBALS['error_message'] = '上传海报文件格式错误'; return;}// Todo: 文件大小的判断if ($images['size'][$i] > 1 * 1024 * 1024) { $GLOBALS['error_message'] = '上传海报文件过大'; return;}
如果需要考虑文件重名的情况,可以给上传的文件重新命名(唯一名称)
// 移动文件到网站范围之内$dest = '../uploads/' . uniqID() . iconv('UTF-8', 'GBK', $images['name'][$i]);// move_uploaded_file 在 windows 中文系统上要求传入的参数如果有中文必须是 GBK 编码// 切记在接收文件时注意文件名中文的问题,通过iconv函数转换中文编码为 GBK 编码if (!move_uploaded_file($images['tmp_name'][$i], $dest)) { $GLOBALS['error_message'] = '上传海报文件失败2'; return;}// 存储时候在将GBK编码转换回UTF-8格式 并且去掉文件路径前面的两个点 直接在根目录存储$data['images'][] = iconv('GBK', 'UTF-8', substr($dest, 2));
单文件域多文件上传,name 一定 以 [] 结尾,服务端会接收到一个数组
HTML中
<!-- multiple 可以让一个文件域多选 --><input type="file" ID="images" name="images[]" accept="image/*" multiple>
PHP中
$images = $_fileS['images']; // 准备一个容器装所有的海报路径 $data['images'] = array();
JsON 序列化文件写入
// 先读出原有数据,在转化为数组形式 在添加新的数组数据,在将新的数据覆盖以前所有旧的原有数据$Json = file_get_contents('data.Json'); $old = Json_decode($Json, true);array_push($old, $data);$new_Json = Json_encode($old);file_put_contents('data.Json', $new_Json);
2.3. 删除数据 问号传参(用get:get本身支持url传参形式)
一般情况下,如果需要超链接点击发起的请求可以传递参数,我们可以采用 ? 的方式
<a href="/delete.PHP?ID=123">删除</a>
本案例中,ID传的是歌曲的ID
<a href="delete.PHP?ID=<?PHP echo $item['ID']; ?>">删除</a>
数组移除元素,array_splice函数
// 从原有数据中移除$index = array_search($item, $data);array_splice($data, $index, 1);
3.整体代码add.PHP<?PHPfunction add () { // 目标:接收客户端提交的数据和文件,最终保存到数据文件中 $data = array(); // 准备一个空的容器,用来装最终要保存的 数据 $data['ID'] = uniqID(); // 1. 接收提交的文本内容 // =================================================== if (empty($_POST['Title'])) { $GLOBALS['error_message'] = '请输入音乐标题'; return; } if (empty($_POST['artist'])) { $GLOBALS['error_message'] = '请输入歌手名称'; return; } // 记下 Title 和 artist $data['Title'] = $_POST['Title']; $data['artist'] = $_POST['artist']; // 2. 接收图片文件 // ======================================================= // 如何接收单个文件域的多文件上传??? if (empty($_fileS['images'])) { $GLOBALS['error_message'] = '请正常使用表单'; return; } $images = $_fileS['images']; // 准备一个容器装所有的海报路径 $data['images'] = array(); // 遍历这个文件域中的每一个文件(判断是否成功、判断类型、判断大小、移动到网站目录中) for ($i = 0; $i < count($images['name']); $i++) { // $images['error'] => [0, 0, 0] if ($images['error'][$i] !== UPLOAD_ERR_OK) { $GLOBALS['error_message'] = '上传海报文件失败1'; return; } // 类型的校验 // $images['type'] => ['image/png', 'image/jpg', 'image/gif'] if (strpos($images['type'][$i], 'image/') !== 0) { $GLOBALS['error_message'] = '上传海报文件格式错误'; return; } // Todo: 文件大小的判断 if ($images['size'][$i] > 1 * 1024 * 1024) { $GLOBALS['error_message'] = '上传海报文件过大'; return; } // 移动文件到网站范围之内 $dest = '../uploads/' . uniqID() . iconv('UTF-8', 'GBK', $images['name'][$i]); // move_uploaded_file 在 windows 中文系统上要求传入的参数如果有中文必须是 GBK 编码 // 切记在接收文件时注意文件名中文的问题,通过iconv函数转换中文编码为 GBK 编码 if (!move_uploaded_file($images['tmp_name'][$i], $dest)) { $GLOBALS['error_message'] = '上传海报文件失败2'; return; } // 存储时候在将GBK编码转换回UTF-8格式 并且去掉文件路径前面的两个点 直接在根目录存储 $data['images'][] = iconv('GBK', 'UTF-8', substr($dest, 2)); } // 3. 接收音乐文件 // ======================================================= if (empty($_fileS['source'])) { $GLOBALS['error_message'] = '请正常使用表单'; return; } $source = $_fileS['source']; // => { name: , tmp_name .... } // 判断是否上传成功 if ($source['error'] !== UPLOAD_ERR_OK) { $GLOBALS['error_message'] = '上传音乐文件失败1'; return; } // 判断类型是否允许 $source_allowed_types = array('audio/mp3', 'audio/wma'); if (!in_array($source['type'], $source_allowed_types)) { $GLOBALS['error_message'] = '上传音乐文件类型错误'; return; } // 判断大小 if ($source['size'] < 1 * 1024 * 1024) { $GLOBALS['error_message'] = '上传音乐文件过小'; return; } if ($source['size'] > 10 * 1024 * 1024) { $GLOBALS['error_message'] = '上传音乐文件过大'; return; } // 移动 $target = '../uploads/' . uniqID() . '-' . iconv('UTF-8', 'GBK', $source['name']); if (!move_uploaded_file($source['tmp_name'], $target)) { $GLOBALS['error_message'] = '上传音乐文件失败2'; return; } // 将数据装起来 // 保存数据的路径一定使用绝对路径存 $data['source'] = iconv('GBK', 'UTF-8', substr($target, 2)); // 4. 将数据加入到原有数据中 // 先读出原有数据,在转化为数组形式 在添加新的数组数据,在将新的数据覆盖以前所有旧的原有数据 $Json = file_get_contents('data.Json'); $old = Json_decode($Json, true); array_push($old, $data); $new_Json = Json_encode($old); file_put_contents('data.Json', $new_Json); // 5. 跳转 // header('Location: List.PHP');}if ($_SERVER['REQUEST_METHOD'] === 'POST') { add();}?><!DOCTYPE HTML><HTML lang="en"><head> <Meta charset="UTF-8"> <Title>添加新音乐</Title> <link rel="stylesheet" href="bootstrap.CSS"></head><body> <div > <h1 >添加新音乐</h1> <hr> <?PHP if (isset($error_message)): ?> <div > <?PHP echo $error_message; ?> </div> <?PHP endif ?> <form action="<?PHP echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <div > <label for="Title">标题</label> <input type="text" ID="Title" name="Title"> </div> <div > <label for="artist">歌手</label> <input type="text" ID="artist" name="artist"> </div> <div > <label for="images">海报</label> <!-- multiple 可以让一个文件域多选 --> <input type="file" ID="images" name="images[]" accept="image/*" multiple> </div> <div > <label for="source">音乐</label> <!-- accept 可以设置两种值分别为 MIME Type / 文件扩展名 --> <input type="file" ID="source" name="source" accept="audio/*"> </div> <button >保存</button> </form> </div></body></HTML>
delete.PHP<?PHP// 如何知道客户端想要删除哪一个???// 通过客户端在URL地址中的问号参数的不同来辨别要删除的数据// 接收 URL 中的不同的 IDif (empty($_GET['ID'])) { // 没有传递必要的参数 exit('<h1>必须指定参数</h1>');}$ID = $_GET['ID'];// 找到要删除的数据$data = Json_decode(file_get_contents('data.Json'), true);foreach ($data as $item) { // 不是我们要的之间找下一条 if ($item['ID'] !== $ID) continue; // $item => 我们要删除的那一条数据 // 从原有数据中移除 $index = array_search($item, $data); array_splice($data, $index, 1); // 保存删除指定数据过后的内容 // echo '<pre>'; // var_dump($data); // echo '</pre>'; $Json = Json_encode($data); file_put_contents('data.Json', $Json); // 跳转回列表页 header('Location: List.PHP');}
总结 以上是内存溢出为你收集整理的PHP案例 ——音乐列表项目(下)全部内容,希望文章能够帮你解决PHP案例 ——音乐列表项目(下)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)