我正在开发一个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需要你帮助这么糟糕
答案 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中的反斜杠,看起来它已经响应了另一个用户的解决方案。
我希望这有帮助!