使用动态PHP对象/数组来存储数据

时间:2016-06-06 07:20:53

标签: php mysql arrays

希望我们有一周的编码和实验!

我正在开发类似CMS的项目,需要一些帮助才能让我的数据存储正常运行。目前的问题是我不确定我是否应该使用PHP对象,数组或两者,而且我不太确定如何在这样的实例中使用它们。 (我是php / mysql的新手,一些指导和示例会很棒!)

所以,我有一个名为“Project X”的数据库,其中包含一个名为“users”的表。我创建了一个名为“UserData”的列,我打算在其中存储用户的页面设置和内容。

目前,用户在CSV格式的输入字段中键入他们想要的“页面”的名称,并将其保存到数据库中的UserPages字段,然后对于每个页面,显示如下表单:

$UserPages = null;
if ($stmt = $con->prepare("SELECT UserPages FROM users WHERE Username=?")) {
    $stmt->bind_param("s", $Username);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = mysqli_fetch_assoc($result);
    $UserPages = $row['UserPages'];
    $Pages = explode(',', $UserPages);
    while($data = mysqli_fetch_array($result)){
        $UserPages .= $data['UserPages'];
        $badchars = array("[", "]","'" );
        $UserPages = str_replace($badchars , '', $UserPages);
    }
}
foreach ($Pages as $Page) {
    echo "<form action=" .$_SERVER['PHP_SELF']. " method='POST' id=" . $Page . ">";
    $PageForm = "<h3>" . $Page . "</h3>
    <hr/>

        <h4>Title: </h4><input type='text' name='".$Page."[]' value='".$UserData['Title']."'><br/>
        <h4>Subtitle: </h4><input type='text' name='".$Page."[]' value='".$UserData['Subtitle']."'><br/>
        <input type='submit' value='Save' name='".$Page."' id='save'>";
    print_r($PageForm);
    echo "</form>";

    }

?>

表单显示如下:

<form action="/phplogin/v2/edit.php" method="POST" id="Home">
    <h3>Home</h3>
    <hr>
    <h4>Title: </h4><input type="text" name="Home[]" value="Title"><br>
    <h4>Subtitle: </h4><input type="text" name="Home[]" value="Subtitle"><br>
    <input type="submit" value="Save" name="Home" id="save">
</form>

现在,这确实有效(有点),但我需要正确(并动态)获取和存储来自这些不同“页面”的数据,并将它们作为数组存储在对象中,然后对其进行JSON编码并将其存储回UserData列。

我目前正在使用的代码失败,仅用“保存”lol替换UserData字段中的数据...

if(isset($_POST[$Page])) {
    $data= $_POST[$Page];
    $stmt = $con->prepare("UPDATE users SET UserData = ? WHERE Username = ?");
    $stmt->bind_param('ss', $data, $Username);
    $stmt->execute();
    $stmt->close();
    header('Location: '.$_SERVER['PHP_SELF']);
    die;
}

所以我想我的主要问题是,如何将每个页面的数据放入其自己的数组中,然后组合数组+ json编码和存储。

它的照片:

http://i.stack.imgur.com/o7BkX.png

1 个答案:

答案 0 :(得分:1)

在创建动态表单时,或在用户提交表单后,是否需要存储数据?

您可以从$ _POST变量中的提交中检索数据。然后你可以将它存储在一个对象中。

$object = new stdClass();
$object->page = $_POST['home'];

您也可以将数组转换为对象。

$object = (object) $array;

我认为你想要的是在表格输入中创建一个多维数组,如下所示。

foreach($pages as $page)
   echo "<form action=" .$_SERVER['PHP_SELF']. " method='POST' id="pagesform">";

   echo "<h4>Title: </h4><input type='text' name='"pages.[$page]."[]' value='".$UserData['Title']."'><br/>

然后遍历post变量并将其存储为对象。

$pages = $_POST['pages'];
$object = new stdClass();

foreach($pages as $key => $value) {
   $object->pages[$key] = $value; 
}

我建议您不要将JSON存储在数据库中,而是将数组的每个值存储在数据库中,并在需要时对其进行json_encode。您可以在foreach循环中将对象的每个字段单独存储在数据库中。