导出用户输入数据到json文件php wordpress?

时间:2017-07-19 13:47:07

标签: php wordpress

我正在开发一个word press插件,想要创建一个带有html表单的管理面板,一旦用户提交详细信息,就会出现一条成功消息,并且将在插件目录中创建一个名为manifest.json的json文件,我刚刚启动了php。     这是我在admin pannel上的表单 `

<form name="postform" action="" method="post" enctype="multipart/form-data">
        <table style="border:2px solid #444; width:100%;" id="manifestedit">
            <tbody>
                <tr>
                <td>Name:</td>
                <td><input type="text" name="name" placeholder="abc"></td>
                </tr>
                <tr>
                <td>Short Name:</td>
                <td>
                <input type="text" name="short_name" placeholder="abc"></td>
                </tr>
                <tr>
                <td>Description:</td>
                <td><textarea id="text" rows="5" cols="30" type="text" name="description">Progressive Web App Tool</textarea>
                </td>
                </tr>
                <tr>
                <td>Orientation</td>
                <td><input type="text" name="orientation" placeholder="portrait"></td>
                </tr>
                <tr>
                <td>Start_url</td>
                <td><input type="text" name="start_url" placeholder="/"></td>
                </tr>
                <tr>
                <td>Display</td>
                <td><input type="text" name="display" placeholder="standalone"></td>
                </tr>
                <tr>
                <td>background_color</td>
                <td><input type="text" name="background_color" placeholder="#fff"></td>
                </tr>
                <tr>
                <td>theme_color</td>
                <td><input type="text" name="theme_color" placeholder="#fff"></td>
                </tr>
                <tr>
                <td>icons</td>
                <td>
                <table id="icondet">
                    <tr>
                    <td>src</td>
                    <td><input type="url" name="src" placeholder="https//:abc/resource/image/addToHome/android-chrome-192x192.png"></td>        </tr>
                    <tr>
                        <td>sizes</td>
                        <td> <input type="text" name="sizes" placeholder="192x192"></td>
                    </tr>
                    <tr>
                    <td>types</td>
                    <td><input type="text" name="types" placeholder="image/png"></td>
                    </tr>
                </table>
                </td>
                </tr>
                <tr>
                <td><input type="submit" value="Submit Entry"> </td>
                </tbody>
            </table>
        </form>

`

`

<?php 
$file = dirname(__FILE__).'/manifest-test.json';
// file_put_contents($file, json_encode($_REQUEST));

if( !empty( $_POST ) ){

// convert form data to json format
$postArray = array(
    "name" => $_POST['name'],
        "short_name" => $_POST['short_name'],
        "description" => $_POST['description'],
        "orientation" => $_POST['orientation'],
        "start_url" => $_POST['start_url'],
        "display" => $_POST['standalone'],
        "background_color" => $_POST['background_color'],
        "theme_color" => $_POST['theme_color'],
"icons" => array(
  "src" => $_POST["src"],
    "sizes" => $_POST["sizes"],
      "types" => $_POST["types"]
 ),
); //you might need to process any other post fields you have..
$json = json_encode( $postArray );
file_put_contents( $file, $json);
}
    ?>

`

when i submit details a json is created

`

{
    "name": "fnvlkjdfsnbkjdfsn",
    "short_name": "jksfvnkjsnvkjsdfn",
    "description": "nfvakjld",
    "orientation": "ksfvkxnvk",
    "start_url": "knsvklj",
    "display": gfndghdf,
    "background_color": "kxsvnkjsdn",
    "theme_color": "skvnsk",
    "icons": {
        "src": "http:\/\/localhost\/wd-wp\/wp-admin\/admin.php?page=test-plugin%2Fmenuform.php",
        "sizes": "192x192",
        "types": "nblkjvzf"
    }
}

`

一段时间后重新加载并将所有值设置为null这是我的管理面板外观 ps:我;刚开始使用php需要你帮助这么糟糕

2 个答案:

答案 0 :(得分:0)

尝试使用: json_encode($response, JSON_UNESCAPED_SLASHES); 这应该使它停止在字符串上添加反斜杠。

答案 1 :(得分:0)

我猜测正在发生的事情是,无论何时点击该页面或刷新页面,空表单字段都会使用NULL值覆盖以前的提交。

我要做的第一件事是更改您要检查的条件以启动表单验证。所以替换

if( !empty( $_POST ) )

if ($_SERVER["REQUEST_METHOD"] == "POST")

现在代码仅在发送POST请求时运行,而只是加载或重新加载页面将是GET请求。

接下来,我建议验证每个字段。首先,你不能假设用户填写了每个字段。其次,你需要“消毒”任何不良输入。所以你可以这样做:

$name = (!empty($_POST['name'])) ? strip_tags($_POST['name']) : '';

以上称为三元表达式。如果包含在括号中的表达式的第一部分计算为true,则它将返回问号后面的值。如果为false,则返回分号后的值。所以在这种情况下,如果name字段不是空字符串,则$ name设置为strip_tags($_POST['name']) 否则,$ name将设置为空字符串。

这在功能上等同于

if ( !empty($_POST['name'] ) {
    $name = strip_tags($_POST['name']);
} else {
    $name = '';
}

......但它更简洁。

我不确定strip_tags()是否是你想要进行验证的。这只是一个例子。这取决于您获得的数据类型,您打算使用哪种数据以及可能存在的风险。如果您将数据存储在数据库中,您可以执行更有效的验证,例如使用预处理语句。

关于URL中的反斜杠,看起来它已经响应了另一个用户的解决方案。

我希望这有帮助!