首先原谅mysql_ *的使用,我很欣赏它的折旧,但出于完全荒谬的原因,我必须将它用于这个项目。
所以我使用这个函数
从我的数据库中填充了一个下拉菜单func.php
function artistQuery(){
$myData = mysql_query("SELECT * FROM artists");
while ($record = mysql_fetch_array($myData)){
echo '<option value="' . $record['artistID'] . '">' . $record['artistFirst'] . ' ' . $record['artistSurname'] . '</option>';
}
它填充了下拉菜单:
newprod.php
<h1>New Product Entry:</h1>
<form action="php/addproduct.php" method="_POST">
<p>Please select the artist:</p>
<select name="artist">
<?php artistQuery();
?>
</select>
</form>
所以从我的功能中虽然显示了艺术家的名字和姓氏,但选项值实际上是艺术家ID。
然后我用
addproduct.php
<?php
include_once 'php/dbconn.php';
connect();
$artist = $_POST['artist'];
$query = "INSERT INTO products ('artistID') VALUES ('$artist')";
//execute query
$result = mysql_query($query) or die("Error in Query. $query. " . mysql_error());
echo "$artist";
?>
将artistID写入数据库,但不写入。
我假设问题出在newprod.php(中间代码块)的某处,而不是将artistID分配给“artist”的名称。
非常感谢你们的所有帮助。
编辑:遗失信件!
答案 0 :(得分:1)
应该是method="POST"
,而不是method="_POST"
。
_POST
无效,浏览器会将其忽略。然后,浏览器将使用GET
作为方法,这是HTML表单的默认方法。
编辑:@jacouh的答案也是有效的,您必须同时执行他和我的更改才能使其正常工作。
答案 1 :(得分:1)
在addproduct.php中,试试这个:
$query = "INSERT INTO products (artistID) VALUES ('$artist')";
而不是引用的列名(坏):
$query = "INSERT INTO products ('artistID') VALUES ('$artist')";
MySQL列名既不是单引号' artistID ',也不是双引号“ artistID ”,也不是像Access中的[ artistID ]数据库。它必须是裸名 artistID 或反引用,如
`artistID`
如果列名中有空格,如
,则非常有用`Artist Name`
答案 2 :(得分:0)
为了避免一些sql注入尝试使用mysql_escape_string
$query = "INSERT INTO products ('artistID') VALUES ('".mysql_escape_string($artist)."')";
检查$ artist是否有值,可能没有插入db,因为是null。 或者也许不是db期望的值,例如artistID是一个整数,$ artist实际上是一个字符串。
希望这能指出你正确的方向!
答案 3 :(得分:-1)
在内部选择框中你应该给出一些像这样的东西
<select name="artist">
<option value="artist"><?php artistQuery();?></option>
</select>