将DIV分配给php变量并在多个隐藏的输入上循环

时间:2018-07-20 18:26:31

标签: javascript php html

我有一个内置的CMS,允许用户创建由不同面板组成的“页面”,每个面板都有各自的内容。我做了这项工作,以便用户可以创建一个包含一个面板和一个文本区域内容的页面,但是我仍然不知道如何对多个面板/内容执行此操作。

当前,如果页面加载从URL值中获取值“ 1”,则会加载全角div和半角div的html模板。我试图用隐藏的输入类型设置每种面板的类型,它们都有自己的tinymce文本区域。

<?php if($value == 1){?>
    <form method="post">
    <div class="col-lg-12 fullWidth" id="full">
        <input type="hidden" name="fullWidth" value="">
        <div class="fullContent" style="background-color: white; height: 100%;">
            <form  id="form-data3" method="post">
              <textarea class="original" id="mytextarea3" name="fullText">Some Text Here</textarea>
              <input type="submit" value="Save Content">
            </form>
        </div>
    </div>

    <div class="col-lg-12 halfWidth" id="half">
        <input type="hidden" name="halfWidth" value="">
        <div class="halfContent" style="background-color: white; height: 100%;">
            <form  id="form-data4" method="post">
              <textarea class="original" id="mytextarea4" name="halfText">Some Text There</textarea>
              <input type="submit" value="Save Content">
            </form>
        </div>
    </div>
    </form>

<?php } ?>

完成此操作后,他们将保存页面,还有另一种形式,可以让他们设置页面标题,并且还可以获取页面类型(上面的$ value)

<form action="addPage.php" method="post">
<input type="hidden" name="pageType" value="<?php echo $value;?>">//This comes from the url value
<input class="form-control" id="addTitle" name="addTitle">
<input type="submit" name="Save Page">

问题是,当我现在调用addPage.php脚本以插入记录时,我不知道如何正确传递值,因此我无法添加一页记录(page_type_id和Title的$ value),但是然后在文本区域插入2条内容和面板记录。

在上面的代码中,这是我的预期插入内容:

pages

ID | Title    | page_type_id
1  | TitleNew | 1     /*this comes from $value*/

content

ID | Content
1  | Some Text Here
2  | Some Text There

panels

ID | panel_type_ID | page_id | content_id
1  |     1         |     1   |   1
2  |     2         |     1   |   2

这可以在所有3个表中一次插入,但是如果我可以为每个div设置多种面板类型,我该如何修改它以仍然插入一页记录,但可以成功处理多个面板和内容?

这是添加页面脚本

//Insert Page
$title = $_POST['addTitle'];
$page_type = $_POST['pageType'];


$addpage = "
INSERT INTO pages (title, page_type_id)
VALUES ('$title','$page_type');
";
$mysqlConn->query($addpage)

$page_id = $mysqlConn->insert_id;

//Insert Content
$content = $_POST['page_content'];

$addContent = "
INSERT INTO content(content)
VALUES('$content');
";

$mysqlConn->query($addContent);

$cont_id = $mysqlConn->insert_id;

//Insert panel(s)
$panelID = $_POST['panelType'];
$addPanel = "
INSERT INTO panels(panel_type_id, page_id, cont_id)
VALUES ('$panelID', '$page_id', '$cont_id');
";
$mysqlConn->query($addPanel);

2 个答案:

答案 0 :(得分:1)

我想您的问题是处理多个数据收集。在元素名称中使用[]可以收集同一集合的多个数据。

<textarea class="original" id="mytextarea3" name="fullText[]">Some Text Here</textarea>

在保存的同时,您从fullText获得数组。循环浏览并保存。

如果您有多个相同格式的文档。在第一个循环中使用键访问其他元素数组中的相应数据。

希望有帮助!

答案 1 :(得分:1)

您管理错误,应该是:

pages

ID | Title    | page_type_id
1  | TitleNew | 1     /*this comes from $value*/

content

ID | Content
1  | Some Text Here
2  | Some Text There

panels

ID | panel_type_ID | page_id | content_id
1  |     1,2         |     1   |   1,2

我在您的表单中找不到panelType,但是,您应该检测到用户选择的panels Ids,然后将其发送到php,例如:

如果用户选择面板(1)和面板(2),则您的脚本应在此处编写:

<input type="hidden" value="1,2">

我们用逗号分隔panels Ids,因为从database获取数据时我们将需要它。

如何获取panels IDs

database获取数据后,它就像1,2,这对您不起作用,那么如何将它们放入数组中?

这很简单,只需执行以下操作即可:

<?php

    $string = "1,2";
    $get = explode(',', $string ); // explode with ,

?>

现在,您将拥有如下数组:

Array ( [0] => 1 [1] => 2 )

如何使用它?

您可以使用循环:

<?php

    $string = "1,2";
    $get = explode(',', $string ); // explode with and

    $count = count($get);

    for ($i=0; $i < $count; $i++) { 
        $PaN = $get[$i];
        /*Some code....*/
    }

?>

希望我能理解你。