我再一次受到你的知识的怜悯,希望你能帮忙。
实际问题是粗体斜体,但如果不阅读我提供的信息,您将无法提供帮助。
问题背景 - 我正在使用HTML,CSS,MySQL和PHP为我的妈妈创建一个摄影网站。我正在处理数据库,特别是允许我的妈妈使用这个表单(http://i.imgur.com/h4nXFFA.png)将图像插入数据库。她不知道如何编码,因此我需要让她轻松。
数据库背景(您需要了解的内容) - 我有一个 image_tbl 和 album_tbl 。 album_tbl显示在此处 - http://i.imgur.com/4GXh9MP.png - 每张专辑都有一个ID和名称(忘记'隐藏')。 image_tbl显示在此处 - http://i.imgur.com/RgC35Nd.png - 其中重要部分(针对此问题)为 albumName。
目标 - 我已设法使用album_tbl中的相册填充“插入新图片”表单(图片显示“探索”)。我希望她能够点击AlbumName(因此她知道要添加的相册),但我希望她插入的图像能够接收数据库中的albumID。到目前为止,这是我的代码的 Pastebin 。
http://pastebin.com/6v8kvbGH = HTML表单,帮助我了解代码中的第一个表单...
http://pastebin.com/4X6abTey = PHP / MySQL代码。在这里,我们让我调用表单中的输入并在2个SQL查询中使用它们。第一个Query旨在获取输入的albumName的albumID,这就是出错的地方。注释掉的语句(使用//)是我的错误检查,并从表单传递albumName。 但是,从第一个SQL语句返回的行数是0,当它应该是1.这是我需要帮助的地方,因为我的关联数组显然有问题...
第二个目标 - 第一个SQL查询工作完成后,第二个SQL查询有望将所需的变量输入到image_tbl中,包括我希望从第一个SQL查询得到的albumID。
我希望这就是所需要的,只要我知道理解这一点的人应该能够帮助我所提供的东西。首先十分感谢!
杰克
有人要我粘贴代码 - HTML表单
<h2>Insert a new image</h2><br>
<form action="imagesInsert.php" method="POST" enctype="multipart/form-data">
Name of Image: <input type="text" name="name" /><br>
Date: <input type="text" name="dateTime" /><br>
Caption: <input type="text" name="caption" /><br>
Comment: <textarea type="text" name="comment" cols="40" rows="4"></textarea><br>
Slideshow: <input type="text" name="slideshow" /><br>
Choose an Album to place it in:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('admin_db');
$sql = "SELECT albumName FROM album_tbl WHERE hidden = false";
$result = mysql_query($sql); ?>
<select name='albumName'>; <?php
while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['albumName'] . "'->" . $row['albumName'] . "</option>";
}
?> </select>
<input type="submit" name="submit"/><br>
</form>
<h2>Hide the Image</h2><br>
<form action="imagesHidden.php" method="POST" enctype="multipart/form-data">
Title:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('admin_db');
$sql = "SELECT name FROM image_tbl WHERE hidden = false";
$result = mysql_query($sql);
echo "<select name='name'>";
while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['name'] . "'>" . $row['name'] . "</option>";
}
echo "</select>";
?>
<input type="submit" value="Hide" name="submit">
</form>
<h2> Renew from Hidden Items </h2><br>
<form action="imagesRestore.php" method="POST" enctype="multipart/form-data">
Title:
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('admin_db');
$sql = "SELECT name FROM image_tbl WHERE hidden = true";
$result = mysql_query($sql);
echo "<select name='name'>";
while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['name'] . "'>" . $row['name'] . "</option>";
}
echo "</select>";
?>
<input type="submit" value="Renew / Un-Hide" name="submit">
</form>
</body>
使用PHP / MySQL插入图像:
<?php
$username="root";
$password="";
$database="admin_db";
$servername="localhost";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully <br><hr>";
$name = $_POST['name'];
$dateTime = $_POST['dateTime'];
$caption = $_POST['caption'];
$comment = $_POST['comment'];
$slideshow = $_POST['slideshow'];
$hidden = false;
$albumName = $_POST['albumName'];
// echo "album name is" . $albumName;
$sql = "SELECT albumID FROM album_tbl WHERE albumName = $albumName";
$albumID = $conn->query($sql);
// echo "Number of rows is " . $albumID->num_rows;
if ($albumID->num_rows > 0) {
// output data of each row
while($row = $albumID->fetch_assoc()) {
echo "Album ID: " . $row["albumID"]. "<br>";
}
} else {
echo "0 results";
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$new_comment = str_replace("'", "''", $comment);
$sql = "INSERT INTO `image_tbl`(`name`, `dateTime`, `caption`, `comment`, `slideshow`, `hidden`, `albumID`) VALUES ('$name', '$dateTime', '$caption', '$new_comment', '$slideshow', '$hidden', '$albumID')";
$result = $conn->query($sql);
if ($result)
{
echo "Data has been inserted";
}
else
{
echo "Failed to insert";
}
$conn->close();
?>
答案 0 :(得分:2)
这一行:
$sql = "SELECT albumID FROM album_tbl WHERE albumName = $albumName";
应该是:
$sql = "SELECT albumID FROM album_tbl WHERE albumName = '$albumName'";
因为专辑名称是一个字符串。
执行查询时应检查错误:
$albumID = $conn->query($sql) or die($conn->error);
您无法在$albumID
查询中使用INSERT
。尽管变量的名称不包含相册ID,但它包含一个mysqli_result
对象,表示查询的整个结果集 - 您只能将其用于num_rows
和{等方法{1}}从结果集中提取信息。
您可以使用fetch_assoc()
语句作为SELECT
中的数据来源:
UPDATE
请注意,当您使用准备好的查询时,您无需修复$stmt = $conn->prepare("INSERT INTO `image_tbl`(`name`, `dateTime`, `caption`, `comment`, `slideshow`, `hidden`, `albumID`)
SELECT ?, ?, ?, ?, ?, ?, albumID
FROM album_tbl
WHERE albumName = ?";
$stmt->bind_param("sssssss", $name, $dateTime, $caption, $comment, $slideshow, $hidden, $albumName);
$stmt->execute();
中的引号(您应该使用$comment
而不是$conn->real_escape_string($comment)
完成)。
只是为了帮助您理解,这也可以在没有准备好的查询的情况下完成。
str_replace()
答案 1 :(得分:0)
首先创建一个数据库连接,比如说
<强> db_connection.php 强>
<?php
$username="root";
$password="1k9i2n8gjd";
$database="admin_db";
$servername="localhost";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error){
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully <br><hr>";
然后在您的表单或需要数据库连接的任何php文件中,您可以只包含db_connection.php
,以便您拥有一个数据库连接。
注意:我已将选项的值更改为albumId,因此您无需根据albumName进行查询或选择,因为您已经通过$ _POST
<?php
require_once('db_connection.php');
//include_once('db_connection.php');
?>
<html>
<head>
<title>Admin Page | Alison Ryde's Photography</title>
<link rel="stylesheet" type="text/css" href="../../css/style.css">
</head>
<body>
<h2>Insert a new image</h2><br>
<form action="imagesInsert.php" method="POST" enctype="multipart/form-data">
Name of Image: <input type="text" name="name" /><br>
Date: <input type="text" name="dateTime" /><br>
Caption: <input type="text" name="caption" /><br>
Comment: <textarea type="text" name="comment" cols="40" rows="4"></textarea><br>
Slideshow: <input type="text" name="slideshow" /><br>
Choose an Album to place it in:
<?php
$sql = "SELECT albumName FROM album_tbl WHERE hidden = false";
$result = $conn->query($sql);// mysql_query($sql); ?>
<select name='albumName'>; <?php
while ($row = $result->fetch_array()) {
echo "<option value='" . $row['albumID'] . "'->" . $row['albumName'] . "</option>";
}
?> </select>
<input type="submit" name="submit"/><br>
</form>
<h2>Hide the Image</h2><br>
<form action="imagesHidden.php" method="POST" enctype="multipart/form-data">
Title:
<?php
$sql = "SELECT name FROM image_tbl WHERE hidden = false";
$result = $conn->query($sql);//mysql_query($sql);
echo "<select name='name'>";
while ($row = $result->fetch_array()) {
echo "<option value='" . $row['name'] . "'>" . $row['name'] . "</option>";
}
echo "</select>";
?>
<input type="submit" value="Hide" name="submit">
</form>
<h2> Renew from Hidden Items </h2><br>
<form action="imagesRestore.php" method="POST" enctype="multipart/form-data">
Title:
<?php
$sql = "SELECT name FROM image_tbl WHERE hidden = true";
$result = $conn->query($sql);//mysql_query($sql);
echo "<select name='name'>";
while ($row = $result->fetch_array()) {
echo "<option value='" . $row['name'] . "'>" . $row['name'] . "</option>";
}
echo "</select>";
?>
<input type="submit" value="Renew / Un-Hide" name="submit">
</form>
</body>
</html>
然后在你的php代码中插入数据应该是这样的。
<强> imagesInsert.php 强>
<?php
require_once('db_connection.php');
//include_once('db_connection.php');
$name = $_POST['name'];
$dateTime = $_POST['dateTime'];
$caption = $_POST['caption'];
$comment = $_POST['comment'];
$slideshow = $_POST['slideshow'];
$hidden = false;
$albumID = $_POST['albumName'];
$new_comment = str_replace("'", "''", $comment);
$sql = "INSERT INTO `image_tbl`(`name`, `dateTime`, `caption`, `comment`, `slideshow`, `hidden`, `albumID`) VALUES ('$name', '$dateTime', '$caption', '$new_comment', '$slideshow', '$hidden', '$albumID')";
$result = $conn->query($sql);
if ($result)
{
echo "Data has been inserted";
}
else
{
echo "Failed to insert";
}
$conn->close();
?>
另一条建议是使用准备好的statementif你的查询是由用户输入构建的,以避免sql注入
<?php
require_once('db_connection.php');
//include_once('db_connection.php');
$name = $_POST['name'];
$dateTime = $_POST['dateTime'];
$caption = $_POST['caption'];
$comment = $_POST['comment'];
$slideshow = $_POST['slideshow'];
$hidden = false;
$albumID = $_POST['albumName'];
$new_comment = str_replace("'", "''", $comment);
$sql = "INSERT INTO `image_tbl`(`name`, `dateTime`, `caption`, `comment`, `slideshow`, `hidden`, `albumID`) VALUES (?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sssssss", $name, $dateTime, $caption,$new_comment,$slideshow,$hidden,$albumID);
$stmt->execute();
希望有所帮助:)祝你好运