我对PHP相当陌生(刚刚在CS课程中学习),现在我正在尝试显示数据库中的一些值,即股票。但现在我遇到了一些问题,因为我试图在一个不错的选项菜单中显示数据库中的股票符号。但是,当我尝试通过$_POST["stock"]("stock"是选项的名称)检索值时,它会显示一个错误"Undefinex index:stock"。
现在,如果我选择上面的选项(php代码之前的选项),它实际上运行得很好,并且"stock"是可检索的(并且没有显示任何内容,正如预期的那样)。
现在我的问题是:我做错了什么?我如何让"股票"这个名字显示$_POST["股票"]的价值
<select class="form-group">
<option class='form-control' type='text' name='stock'></option>
<?php
$rows = query("SELECT * FROM stocks WHERE id = ?", $_SESSION["id"]);
foreach ($rows as $row)
{
print("<option class='form-control' name='stock'>{$row["symbol"]}</option>");
}
?>
</select>
您通常应该检查$_POST
中的密钥是否存在,以避免undefined index
问题,如果定义如下示例所示,您也可以检查它是否为空。
例如
$stock = isset( $_POST["stock"] ) && !empty( $_POST["stock"] ) ? $_POST["stock"] : '';
非简写:
$stock = '';
if ( isset( $_POST["stock"] ) && !empty( $_POST["stock"] ) ) {
$stock = $_POST["stock"];
}
编辑
$_POST['stock']
未定义的原因是因为<select>
元素缺少已定义的名称,而是在子元素上定义了名称。
更改:
<select class="form-group">
收件人:
<select class="form-group" name="stock">
此外,请确保从所有<option>
元素中删除name
属性。
祝你好运,
弗雷德里克
将动态参数从双引号中取出,并在打印时用点划线。在使用发布的数据之前也要使用phpisset
(特别是当第一个选项为空时):
<select class="form-group">
<option class='form-control' type='text' name='stock'></option>
<?php
$rows = query("SELECT * FROM stocks WHERE id = ?", $_SESSION["id"]);
foreach ($rows as $row)
{
print "<option class='form-control' name='stock'>{".$row["symbol"]."}</option>";
}
?>
</select>
您需要添加属性名称来选择不在选项中。像这样使用
<select class="form-group" name="stock">
<option class='form-control' type='text'></option>
<?php
$rows = query("SELECT * FROM stocks WHERE id = ?", $_SESSION["id"]);
foreach ($rows as $row)
{
print("<option value='".$row["symbol"]."' class='form-control'>".$row["symbol"]."</option>");
}
?>
</select>
然后使用php,当您尝试使用$_POST['stock']
获取值时,它将返回所选的选项值。即该选项中的CCD_ 9值。
您有几个问题,严重的问题大多是基于HTML的。
1) 为了使用POST变量,您需要设置FORM以通过POST发送数据,这是通过method
标签完成的,您可能已经或可能还没有,但:
<form method="post">
2) 对于HTML,需要定义所选选项的VALUE,例如您有
print("<option class='form-control' name='stock'>{$row["symbol"]}</option>");
但它所做的是发送一个值""
(如果有的话),因为没有定义任何值。改为:
print("<option class='form-control' name='stock' value='stockvalue'>{$row["symbol"]}</option>");
另外,"name"属性需要出现在<select>
元素中,而在<option>
元素中只需要value
属性。
所以:
print("<option class='form-control' value='stockvalue'>{$row["symbol"]}</option>");
3) query
不是公认的函数,除非你自己制作了函数?您可能需要mysqli_query()
。
4) 次要重新格式化:不要对数组键使用双引号,您的数组应该是:$rows['symbol']
。此外,当将变量打印到print
命令时,养成这样的习惯:
print "<option class='form-control' name='stock' value='stockvalue'>".$row['symbol']."</option>";
这将停止使用.
字符进行打印,并附加原始PHP变量值$row
,然后使用另一个.
将要打印的字符串的其余部分附加到该值上。打印也不需要在括号中。