PHP如何将表格内文件名转为可点击链接并在新标签页打开文件
需修改的代码步骤
前置准备
先在项目根目录创建uploads文件夹,设置文件夹权限为755,所有上传的pdf、图片都会存储在这个目录下。
1. 修复psaadd.php的文件上传逻辑(当前代码仅接收文件名,未实际存储文件到服务器)
你现在的表单缺少文件上传必需的enctype属性,同时需要补充文件移动到服务器目录的处理逻辑,修改后完整代码如下:
<?php include_once 'connection.php'; session_start(); if(!$_SESSION['login']){ header("location:index.php"); die; } if(count($_POST)>0) { // 处理文件上传 $psa_file = $_FILES['PSA']; $psa_name = ''; if($psa_file['error'] == 0){ // 避免文件名重复,加时间戳前缀 $psa_name = time().'_'.$psa_file['name']; // 移动文件到uploads目录 move_uploaded_file($psa_file['tmp_name'], 'uploads/'.$psa_name); } // 若需更高安全性可替换为预处理语句避免SQL注入,此处按原有逻辑修改 if($psa_name){ mysqli_query($conn,"UPDATE collegestud set PSA = '" . $psa_name . "' WHERE ID='" . $_POST['ID'] . "'"); } $id = $_POST['ID']; header('Location: updatecollege1.php?id='.$id); } $result = mysqli_query($conn,"SELECT * FROM collegestud WHERE id='" . $_GET['id'] . "'"); $row= mysqli_fetch_array($result); ?> <!-- 表单添加enctype属性才能正常上传文件 --> <form action="" method="POST" enctype="multipart/form-data" onsubmit="return confirm('Are you sure you want to save changes?');"> <div class= "container2"> <p style="font-weight: bold; font-size: 35px; text-align: center;">PSA</p> <input type="hidden" name="ID" class="txtField" value="<?php echo $row['ID']; ?>"> <div class = "container3"> <center> <input name="PSA" type = "file" accept = '.pdf,.jpg,.jpeg,.png'> </center>
注:Form137、2x2图片的上传逻辑和PSA完全一致,按同样方式修改对应上传页面即可
2. 修改addrequirements.php,把表格内纯文本文件名替换为可点击链接
找到表格中展示PSA、Form137、图片的三个<td>标签,修改为以下逻辑:
<tr> <td><?php echo $row["Stud_ID"]; ?></td> <td><?php echo $row["Course"]; ?></td> <td><?php echo $row["Lastname"]; ?></td> <td><?php echo $row["Firstname"]; ?></td> <!-- PSA字段改为跳转链接 --> <td> <?php if(!empty($row["PSA"])){ ?> <a href="uploads/<?php echo $row["PSA"]; ?>" target="_blank"><?php echo $row["PSA"]; ?></a> <?php }else{ echo "未上传"; } ?> </td> <!-- Form137字段改为跳转链接 --> <td> <?php if(!empty($row["Form137"])){ ?> <a href="uploads/<?php echo $row["Form137"]; ?>" target="_blank"><?php echo $row["Form137"]; ?></a> <?php }else{ echo "未上传"; } ?> </td> <!-- 2x2图片字段改为跳转链接 --> <td> <?php if(!empty($row["Picture"])){ ?> <a href="uploads/<?php echo $row["Picture"]; ?>" target="_blank"><?php echo $row["Picture"]; ?></a> <!-- 可选拓展:直接在表格显示缩略图 --> <!-- <img src="uploads/<?php echo $row["Picture"]; ?>" width="50" alt="学生照片"> --> <?php }else{ echo "未上传"; } ?> </td> <td><a style="color:green;" href="updatecollege1.php?id=<?php echo $row["ID"]; ?>"><i class="fas fa-folder-plus fa-2x "></i></a>  <span><a style="color:red" href="deletecollege.php?ID=<?php echo $row["ID"]; ?>"onclick="return confirm('Do you really want to delete this student?')"><i class="fas fa-user-minus fa-2x"></i></a></span> </td> </tr>
target="_blank"属性会让点击链接后自动在新标签页打开文件,主流浏览器本身支持直接预览pdf、jpeg、png等常用格式
可选优化:updatecollege1.php补充预览入口
可以在编辑页面直接显示已上传文件的预览链接,修改对应代码段即可:
<div class = "container3"> <strong><left>PSA   </left></strong> <span>    <?php if(!empty($row["PSA"])){ ?> <a href="uploads/<?php echo $row["PSA"]; ?>" target="_blank">预览已上传文件</a> | <?php } ?> <input id="ra" type="text" value="<?php echo $row['PSA']; ?>" readonly> <a href="psaadd.php?id=<?php echo $row["ID"]; ?>">ADD or UPDATE</a></span><br>
安全提示
- 建议对uploads目录配置禁止执行php等脚本的权限,避免恶意文件上传执行
- 数据库操作建议替换为mysqli预处理语句,避免SQL注入风险
内容的提问来源于stack exchange,提问作者AlksAndTrsh
相关产品推荐
相关产品推荐

