服务器端无法识别来自 $_POST 的元素

Posted

技术标签:

【中文标题】服务器端无法识别来自 $_POST 的元素【英文标题】:Server-side won't recognize elements from $_POST 【发布时间】:2021-04-17 09:34:44 【问题描述】:

我在这里问的问题可能很简单。我使用 javascript/Jquery 在页面上添加元素。我使用 Jquery 添加的元素工作正常,我可以将它们添加到 php.ini 中的变量中。但问题在于 Javascript 之一。

当我检查浏览器时,我可以看到我创建的元素 <h6> 在我的例子中被命名为我想要的 meal_category[1]; meal_category[2] 等等......名称和 id 是相同的。但是当我出于某种原因尝试使用print_r 元素时,我得到Notice: Undefined index: meal_category[1] in ... 我确定它确实已定义,但php 无法以某种方式识别它。这是从浏览器inspect element 粘贴的生成元素之一,例如:

<h6 class="d-xl-flex justify-content-xl-center align-items-xl-center mb-2" id="meal_category[1]" name="meal_category[1]" style="margin-bottom: 0px; margin-top: 0px; background: rgb(255, 35, 81); border-radius: 15px; font-size: 14px; padding-left: 5px; padding-right: 6px; color: rgb(255, 255, 255) !important;">Burgeriai
    <button class="btn btn-primary" id="removeCategory[1]" onclick="removeCategory(this)" type="button" style="background: transparent;border-style: none;padding: 0px;margin-left: 3px;">X</button>
</h6>

我不知道我是否解释清楚了,如果有什么遗漏,请告诉我。这也是我的 php 代码:

$mealCategories = $_POST['meal_category'];

$ingredientNames = $_POST['ingredient_name']; 
$ingredientPrices = $_POST['ingredient_price']; 
$mealsizeSelect = $_POST['mealsize_select']; 
$mealsizeCorrect = $_POST['mealsize_correct'];

print_r($mealCategories[1]);

除了meal_category 一个之外,所有其他元素都有效。是因为我使用 Jquery 创建了其他元素,而这使用了 js?下面是我如何创建这个&lt;h6&gt;

var cat = document.createElement('H6');
cat.className = 'd-xl-flex justify-content-xl-center align-items-xl-center mb-2';
cat.style = 'margin-bottom: 0px;margin-top: 0px;background: #ff2351;color: rgb(255,255,255)!important;border-radius: 15px;font-size: 14px;padding-left: 5px;padding-right: 6px;';
cat.id = 'meal_category['+selectCategory.counter+']';
cat.setAttribute('name', 'meal_category['+selectCategory.counter+']');

cat.innerhtml = selectedText + '<button class="btn btn-primary" id="removeCategory['+selectCategory.counter+']" onClick="removeCategory(this)" type="button" style="background: transparent;border-style: none;padding: 0px;margin-left: 3px;">X</button>';
document.getElementById('selectedCategories').appendChild(cat);

【问题讨论】:

print_r($mealCategories) 的输出是什么(没有明确指定的索引)? 这些数据是如何传输到 PHP 中的?某处是否有 AJAX 调用? h6 不是表单元素,因此未检测到它看起来很正常。其他元素也是标题标签吗? 其他都是&lt;input&gt;元素,我现在明白了,基本上&lt;form&gt;看不到&lt;div&gt;&lt;h6&gt;这样的元素……对吧? 同意@El_Vanja。您应该在表单中使用输入标签来使用 POST on php 访问它 【参考方案1】:

执行常规表单提交时,只会提交form elements。文档中的当前表单元素列表:

&lt;input&gt; &lt;label&gt; &lt;select&gt; &lt;textarea&gt; &lt;button&gt; &lt;fieldset&gt; &lt;legend&gt; &lt;datalist&gt; &lt;output&gt; &lt;option&gt; &lt;optgroup&gt;

由于您的元素是 &lt;h6&gt; 标记,因此不会检测到它们,尽管您为它们附加了 name 属性。

【讨论】:

以上是关于服务器端无法识别来自 $_POST 的元素的主要内容,如果未能解决你的问题,请参考以下文章

Azure API 无法识别来自 Terraform 的服务主体

burpsuite抓包无法识别POST参数问题

burpsuite抓包无法识别POST参数问题

无法使用Delphi通过Post打开Microsoft语音识别API

当 rvest 无法识别提交按钮时提交 POST 表单

.asmx支持post请求或者get请求调用(WebService "因 URL 意外地以 结束,请求格式无法识别" 的解决方法)