php - 如何在数据库中保存文件路径并在详细页面中显示路径

标签 php mysql file-upload

我正忙于一个小项目,人们可以填写一个表格,将值保存到数据库中。现在除了文件上传路径之外一切正常。在我的数据库中,我有三个表:人员、地址和简历(有关系)参见图片:

picture one

现在我希望路径为www.test.nl/directory/filename,这样我就可以制作一个带有链接的按钮,这样当您按下按钮时,它就会下载文件。然而,在我的详细信息页面上,您可以看到它显示的是 cv_id 而不是路径。我的文件上传位于一个单独的文件中,我的个人和地址上传如下:

地址和人物上传:

<?php
$servername = "localhost";
$username = "root";
$password = "usbw";
$dbname = "persons";

// CREATE A CONNECTION WITH THE DATABASE
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

// ADDRESS APPEND - PREPARE SQL STATEMENT AND BIND PARAMS
// ADRES TOEVOEGEN - BEREID SQL STATEMENT EN BIND PARAMS
$stmt = $conn->prepare("INSERT INTO address (address_street, address_housenumber, 
                                         address_zipcode, address_city, address_state)
                    VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $straat, $huisnummer, $postcode, $stad, $provincie);

$straat = htmlspecialchars($_POST['straat']);
$huisnummer = htmlspecialchars($_POST['huisnummer']);
$postcode = htmlspecialchars($_POST['postcode']);
$stad = htmlspecialchars($_POST['stad']);
$provincie = htmlspecialchars($_POST['provincie']);

// EXECUTE STATEMENT
// STATEMENT UITVOEREN
$result = $stmt->execute();    
if ($result === FALSE) {
die("Error: " . $stmt->error);
}

// CAPTURE LAST INSERTED address_id
// PAK DE LAATST INGEVOERDE address_id
$last_id = $conn->insert_id;

// PERSON APPEND - PREPARE SQL STATEMENT AND BIND PARAMS
// PERSOON TOEVOEGEN - BEREID SQL STATEMENT EN BIND PARAMS
$stmt = $conn->prepare("INSERT INTO person (person_firstname, person_lastname, 
                                        person_email, person_phonenumber,
                                        person_cv, person_address)
                     VALUES (?, ?, ?, ?, ?, ?)");
 $stmt->bind_param("sssssi", $firstname, $lastname, $email, $telephone, $cv, $last_id);

$firstname = htmlspecialchars($_POST['firstname']);
$lastname = htmlspecialchars($_POST['lastname']);
$email = htmlspecialchars($_POST['email']);
$telephone = htmlspecialchars($_POST['telephone']);

// EXECUTE STATEMENT
// STATEMENT UITVOEREN
$result = $stmt->execute();    
if ($result === TRUE) {
$URL="http://localhost:8080/Website/bedankt.php";  
header ("Location: $URL");  
} else {
    echo "Error: " . $stmt->error;
}

// CLOSE CONNECTION AND STATEMENT
// SLUIT CONNECTIE EN STATEMENT
$stmt->close();
$conn->close();
?>

文件上传.php

 <?php
 $servername = "localhost";
 $username = "root";
 $password = "usbw";
 $dbname = "persons";

// CREATE A CONNECTION WITH THE DATABASE
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

if(isset($_POST['submit']))
{
  $filetmp = $_FILES["cv"]["tmp_name"];
  $filename = $_FILES["cv"]["name"];
  $filetype = $_FILES["cv"]["type"];
  $filepath = "files/".$filename;

  move_uploaded_file($filetmp,$filepath);

  $sql = "INSERT INTO cv (cv_name,cv_path,cv_type) VALUES ('$filename','$filepath','$filetype')";
  $result = mysqli_query($conn, $sql);
}
$cv = $conn->insert_id;
?>

我的详细信息页面:

<?php
$servername = "localhost";
$username = "root";
$password = "usbw";
$dbname = "persons";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT person_firstname, person_lastname, 
           person_email, person_phonenumber, person_cv,  
           address_street,address_housenumber, 
           address_city,address_state,address_zipcode 
    FROM person 
       inner join address on address.address_id = person.person_address";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo "<table border=1>
<tr>
<th>Voornaam</th>
<th>Achternaam</th>
<th>Straat</th>
<th>Huisnummer</th>
<th>Postcode</th>
<th>Stad</th>
<th>Provincie</th>
<th>Email</th>
<th>Mobiel</th>
<th>CV</th>
</tr>";


while($row = $result->fetch_assoc()) {
    echo "<tr>";
    echo "<td>" . $row["person_firstname"] . "</td>";
    echo "<td>" . $row["person_lastname"] . "</td>";
    echo "<td>" . $row["address_street"] . "</td>";
    echo "<td>" . $row["address_housenumber"] . "</td>";
    echo "<td>" . $row["address_zipcode"] . "</td>";
    echo "<td>" . $row["address_city"] . "</td>";
    echo "<td>" . $row["address_state"] . "</td>";
    echo "<td>" . $row["person_email"] . "</td>";
    echo "<td>" . $row["person_phonenumber"] . "</td>";
    echo "<td>" . $row["person_cv"] . "</td>";
    echo "</tr>";
}
} else {
echo "Er is niks in het database gevonden";
}
$conn->close();
?>

我希望你们能帮助我,我是 PHP 新手,所以我仍在学习这一切。请注意,一切正常...除了上传 www.test.nl/directory/filename 并将其保存到我的表 cv_path 中...如在详细信息页面中显示路径(可能作为按钮)。如果有一种方法使用与地址几乎相同的语句将文件上传到 cv 那就太好了。但因为这现在有效(到目前为止),我将文件上传与人员和地址上传分开。如果可以在我的简历下的详细信息页面中添加一个下载按钮来下载文件,那就完美了。

最佳答案

您必须更改 SELECT查询以获取 cv_path 而不是 cv_id。

然后你可以使用php将其定义为类似$cv_file = "www.test.nl/" . $row['cv_path'];

结果echo $cv_file;会给你www.test.nl/files/test.pdf

现在您只需创建一个链接。 echo "<a href='http://" . $cv_file . "'>cv file</a>";

同样的事情会执行同样的SELECT查询但将其添加到链接中:

echo "<a href='http://www.test.nl/" . $row['cv_path'] . "'>cv file</a>";

它们都会创建一个链接,将您带到 http://www.test.nl/files/test.pdf

这些确实是基础知识,您不应该问这么简单的问题,因为它们已经在堆栈中得到了多次回答。

编辑。 至于按钮,如果你想使用纯 HTML,你可以像 BalusC 所说的那样:How to create an HTML button that acts like a link?

在你的情况下会是这样的:

echo "<form action='http://" . $cv_file . "'>";
echo "<input type='submit' value='Go to cv'>";
echo "</form>";

关于php - 如何在数据库中保存文件路径并在详细页面中显示路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35757187/

相关文章:

php - 如何在php中生成8位crc

mysql - 多对多MySQL表中的计数和多重分组

php - 使用子查询和Having优化SQL

ruby-on-rails - 未初始化的常量 Car::PictureUploader

php - 多张图片上传在 iphone 和 ipad 中不起作用

php - 快速调试和有效修复大图像文件上传失败的最佳方法

php - 使用另一个表中的数据从下拉列表插入表

javascript - Highchart 与 html 网站中 SQL 数据的范围选择器

php - UPS API LTL 费率给出缺失或无效的国家/地区代码 (9360702)

php - 从数据库中获取最新值,检查值并在 PHP 中应用自身