PHP - 不能拆分String并将数据保存到数据库中

时间:2018-04-15 20:15:04

标签: php html css mysql sql

我有一个包含3个表(位置,假期和类别)的数据库

This is holidays table

This is location table

This is category table

我可以将数据插入到假期表中但是locationID和catID是NULL我如何在locationID,locationName,country中的Location表和catID中插入其他信息,catDesc在Category表中

我想我需要在(选项值=' ..')中拆分字符串并将其保存在2/3个不同的变量中,然后将它们插入表中但我不要&# 39;不知道如何。

谢谢

<?php
        include 'database_conn.php';


        $holidayTitle=$_POST['holidayTitle'];
        $holidayDuration=$_POST['holidayDuration'];
        $holidayPrice=$_POST['holidayPrice'];
        $locationName=$_POST['locationName'];
        $catDesc=$_POST['catDesc'];


        if(isset($_POST['submit'])) {
            $sql = "INSERT INTO PCH_holidays(holidayTitle, holidayDuration, holidayPrice)
    VALUES ('$holidayTitle', '$holidayDuration', '$holidayPrice');";
            $sql .= "INSERT INTO PCH_location (locationID)
    VALUES ('$locationName');";
            $sql .= "INSERT INTO PCH_category (catID)
    VALUES ('$catDesc')";

            if ($dbConn->multi_query($sql) === TRUE) {
                echo "New records created successfully";
            } else {
                echo "Error: " . $sql . "<br>" . $dbConn->error;
            }
        }
        $dbConn->close();



        ?>

    <form action="admin.php" method="POST">
        <input type="text" name="holidayTitle" placeholder="Title">
        <br>
        <input type="text" name="holidayDuration" placeholder="Duration">
        <br>
        <input type="text" name="holidayPrice" placeholder="Price">
        <br>
        <select name="locationName">
        <option value='l1, Milaidhoo Island, Maldives'>Milaidhoo Island, Maldives</option>
        <option value='l2, Rangali Island, Maldives'>Rangali Island, Maldives</option>
        <option value='l3, Zanzibar, Tanzania'>Zanzibar, Tanzania</option>
        <option value='l4', Boston, USA>Boston, USA</option>
        <option value='l5, San Francisco, USA'>San Francisco, USA</option>
        <option value='l6, Nairobi, Kenya'>Nairobi, Kenya</option>
        <option value='l7, Algarve, Portugal'>Algarve, Portugal</option>
        <option value='l8, New York, USA'>New York, USA</option>
        <option value='l9, Sorrento,  Italy'>Sorrento, Italy</option>
        <option value='l10, Verona, Italy'>Verona, Italy</option>
        </select>


        <br>
        <select name="catDesc" >

        <option value='c1,Luxury'>>Luxury</option>

        <option value='c2,Tour'>Tour</option>

        <option value='c3,Safari'>Safari</option>

        <option value='c4,Golf'>Golf</option>

        <option value='c5,Weddings'>Weddings</option>

        <option value='c6,Walking'>Walking</option>

        <option value='c7,Opera'>Opera</option>
        </select>

        <br>

        <input type="submit" name="submit" value="send info">
    </form>

2 个答案:

答案 0 :(得分:0)

  

我想我需要在(选项值=&#39; ..&#39;)中拆分字符串并将其保存在2/3个不同的变量中,然后将它们插入表中但我不要&# 39;不知道如何。

那就是它。

使用您的帖子数据将字符串拆分为3个变量:

list($locationID, $locationName, $country) = explode(",", $_POST['locationName']);

然后相应地更改您的SQL。

INSERT INTO PCH_location (locationID, locationName, country)
    VALUES ('$locationID', '$locationName', '$country');

使用类别表重复相同的事情。

请注意您收到的关于SQL安全性的评论,即准备好的语句。以上内容应解决您的错误。

答案 1 :(得分:0)

如果您使用下拉列表来定位和分类,则选项的值应该是 是相应选项的ID,而不是描述/名称。 IOWs,他们应该 您可以直接将这些数字保存到您的假期表中。无需解析/操作。

你有:

<option value='l1, Milaidhoo Island, Maldives'>Milaidhoo Island, Maldives</option>

但它应该是:

<option value='1'>Milaidhoo Island, Maldives</option>

注意

由于您将密钥存储到其他两个表中,因此也会将这些表中的文本存储在假日表中。如果名称发生更改,则必须对假日表进行更新以更新说明。不是关系数据库的最佳用途。不是标准化的结构。