解决关联数组

时间:2016-02-10 20:54:41

标签: php html mysql database associative-array

我再一次受到你的知识的怜悯,希望你能帮忙。

实际问题是粗体斜体,但如果不阅读我提供的信息,您将无法提供帮助。

问题背景 - 我正在使用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();
?>

2 个答案:

答案 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();

希望有所帮助:)祝你好运