PHP案例 ——音乐列表项目(下)【PHP教程】

!
也想出现在这里? 联系我们
信息

PHP案例 ——音乐列表项目(下),第1张

概述文章目录音乐列表案例(上)音乐列表案例(下)2.2.新增数据(表单类)2.3.删除数据3.整体代码add.phpdelete.php项目链接:https://download.csdn.net/download/weixin_45525272/14920287音乐列表案例(上)音乐列表案例(下)2.2.新增数据(表单类)表单使用(formactionmethod

文章目录音乐列表案例(上)音乐列表案例(下)2.2. 新增数据(表单类)2.3. 删除数据3.整体代码add.phpdelete.php
项目链接: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案例 ——音乐列表项目(下)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞58 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容