【发布时间】:2018-07-18 05:19:19
【问题描述】:
我为 wordpress 网站开发了一个小的单文件插件。它只是为一个 POST 到自身的文件添加一个上传表单,然后在提交后对文件的内容进行一些处理。
它在暂存环境中运行良好,但在实时服务器上出现了一个奇怪的问题。一旦我提交带有文件的表单,服务器不会将我带回同一页面,而是返回以下 JSON:
{"success":false,"message":"Please enter a message."}
我不知道是什么原因造成的。有人遇到过这样的问题吗?
(简化插件):
function show_upload_form() {
if ($_FILES['userfile']) {
echo "<p>file received</p>";
$file = fopen($_FILES['userfile']['tmp_name'], "r");
$data = [];
while (!feof($file)) {
$data[] = fgetcsv($file,null,';');
}
foreach ($data as $line) {
$pid = $line[0];
if (isset($line[1])) {
$price = trim(str_replace(',', '.', $line[1]));
} else {
$price = "";
}
if (isset($line[2])) {
$title = trim(iconv("ISO-8859-1", "UTF-8", $line[2]));
} else {
$title = "";
}
global $wpdb;
$product_ids = $wpdb->get_results($wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s'", $pid));
foreach ($product_ids as $product_id) {
$elem = $product_id->post_id;
if ($price != "") {
update_post_meta($elem, '_price', $price);
update_post_meta($elem, '_sale_price', $price);
update_post_meta($elem, '_regular_price', $price);
}
if ($title != "") {
wp_update_post(array(
'ID' => $elem,
'post_title' => $title,
));
}
}
echo "<p>Produkt #".$pid;
if ($price != "") {
echo " - new price: ".$price."€";
}
if ($title != "") {
echo "- new title: ".$title;
}
}
} else {
echo "<form method=\"post\" enctype=\"multipart/form-data\">";
echo "<label for=\"file\">Select a file:</label>";
echo "<input type=\"file\" name=\"userfile\" id=\"file\">";
echo "<br /><br />";
echo "<button>Upload File</button>";
echo "<form>";
}
}
感谢任何意见。
【问题讨论】:
-
表单是否有任何验证?或者任何电子邮件功能?
-
表单本身不验证任何内容。 post 上的函数只是解析值(它是一个 csv 文件),然后相应地更新一些数据库条目。但它永远不会像 json 那样碍事。
-
任何电子邮件功能或任何东西?
-
如果可能的话,您能否也添加您的插件代码?
-
我已经添加了剩余的代码。没有电子邮件功能。但正如我所说,我们永远不会达到那个代码......