gpt4 book ai didi

PHP - 如何插入 while 循环复选框并保存到 mysql

转载 作者:行者123 更新时间:2023-11-28 10:25:29 26 4
gpt4 key购买 nike

while 循环复选框名称是 checkextra[],值是使用 php 的价格回显 <?php echo $show_extra['price']; ?>

现在以下代码仅适用于价格 - 它与我选中的复选框完美保存。但是 $show_extra['item_name']没有相应地储蓄。在 DB 中,所有 item_name 都给我最后一个 while 循环元素,它与完美保存的价格不同。

下面的代码我已经修改了很多时间但是 item_name 的输出还是一样

<div class="adjust">
<center><form class="greatForm" method="post" action="#">
<?php
$read_extra = mysql_query("select * from extra_item where theme_name = '$title'");

while($show_extra = mysql_fetch_array($read_extra))
{
$getextraname = $show_extra['item_name'];

?>
<input type="checkbox" name="checkextra[]" id="<?php echo $show_extra['item_label']; ?>" value="<?php echo $show_extra['price']; ?>"/>
<label for="<?php echo $show_extra['item_label']; ?>" >
<img style="height:150px;width:150px;" src="<?php echo 'themeinfo/extra/'.$show_extra['item_img']; ?>"/><?php echo $show_extra['item_name']; ?> </label>

<?php
}
?>
<center><br><br><input type="submit" class="button" style="width:10%;" value="SAVE" name="choose_extra"></center></br>
</form></center>
<?php


if(isset($_POST['choose_extra']))
{
if(!empty($_POST['checkextra'])) {
foreach($_POST['checkextra'] as $getextraprice) {
$takeextra = mysql_query("INSERT INTO selectextra(user,title,extraitem,price)
VALUES('".mysql_real_escape_string($username)."',
'".mysql_real_escape_string($title)."',
'".mysql_real_escape_string($getextraname)."',
'".mysql_real_escape_string($getextraprice)."')") or die(mysql_error());

}
if($takeextra)
{
echo "<center>Extra item order SAVE.</center>";
}
else{
echo "failed";
}
}
}

?>

</div>

DB item_name 全部相同

-- Table structure for table `extra_item`
--

CREATE TABLE IF NOT EXISTS `extra_item` (
`theme_name` varchar(500) NOT NULL,
`item_name` varchar(500) NOT NULL,
`item_label` varchar(500) NOT NULL,
`price` int(10) NOT NULL,
`item_img` varchar(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--

-- Table structure for table `selectextra`
--

CREATE TABLE IF NOT EXISTS `selectextra` (
`user` varchar(500) NOT NULL,
`title` varchar(500) NOT NULL,
`extraitem` varchar(500) NOT NULL,
`price` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--

- - 为表 selectextra 转储数据 --

INSERT INTO `selectextra` (`user`, `title`, `extraitem`, `price`) VALUES
('qweqwe', 'test', 'red balloon4', 10),
('qweqwe', 'test', 'red balloon4', 10),
('qweqwe', 'test', 'red balloon4', 1),
('qweqwe', 'test', 'red balloon4', 1),
('qweqwe', 'test', 'red balloon4', 1),
('qweqwe', 'test', 'red balloon4', 2),

最佳答案

更改为 mysqli,并使用一些消息来输出调试信息,试试这个(设置数据库连接字段以适合您的数据库):-

<div class="adjust">
<?php

$link = new mysqli("hostname", "username", "password", "databasename");

if ($link->connect_errno)
{
printf("Connect failed: %s\n", $link->connect_error);
exit();
}

?>
<center><form class="greatForm" method="post" action="#">
<?php

$sql = "SELECT price, item_name, item_label, item_img FROM extra_item WHERE theme_name = '$title'";

if ( ($read_extra = $link->query($sql)===false )
{
echo "Invalid query: ".$link->error."\r\n $sql\r\n";
exit();
}

while($show_extra = $read_extra->fetch_array(MYSQLI_ASSOC))
{
$_SESSION['getextraprice'] = $show_extra['price'];
$_SESSION['getextraname'] = $show_extra['item_name'];
?>
<input type="checkbox" name="<?php echo $show_extra['price']; ?>" id="<?php echo $show_extra['item_label']; ?>" value="<?php echo $show_extra['item_label']; ?>"/>
<label for="<?php echo $show_extra['item_label']; ?>" >
<img style="height:150px;width:150px;" src="<?php echo 'themeinfo/extra/'.$show_extra['item_img']; ?>"/><?php echo $show_extra['item_name']; ?></label>

<?php
}
?>
<center><br><br><input type="submit" class="button" style="width:10%;" value="SAVE" name="choose_extra"></center></br>
</form></center>
<?php
if(isset($_POST['choose_extra']))
{
$getextraprice = $_SESSION['getextraprice'];
$getextraname = $_SESSION['getextraname'];
$sql = "INSERT INTO selectextra(user,title,extraitem,price) VALUES('$username','$title','$getextraname,'$getextraprice')";
if ( ($insert = $link->query($sql)===false )
{
echo "failed: ".$link->error."\r\n $sql\r\n";
}
else
{
echo "Order SAVE.";
}
}
?>

</div>

</div>

编辑——如果你真的想使用 mysql_* 调用,那么试试这个,它至少会让你知道错误是什么:-

<div class="adjust">
<center><form class="greatForm" method="post" action="#">
<?php
$read_extra = mysql_query("SELECT price, item_name, item_label, item_img FROM extra_item where theme_name = '".mysql_real_escape_string($title)."'") or die(mysql_error());

while($show_extra = mysql_fetch_array($read_extra))
{
$_SESSION['getextraprice'] = $show_extra['price'];
$_SESSION['getextraname'] = $show_extra['item_name'];
?>
<input type="checkbox" name="<?php echo $show_extra['price']; ?>" id="<?php echo $show_extra['item_label']; ?>" value="<?php echo $show_extra['item_label']; ?>"/>
<label for="<?php echo $show_extra['item_label']; ?>" >
<img style="height:150px;width:150px;" src="<?php echo 'themeinfo/extra/'.$show_extra['item_img']; ?>"/><?php echo $show_extra['item_name']; ?></label>

<?php
}
?>
<center><br><br><input type="submit" class="button" style="width:10%;" value="SAVE" name="choose_extra"></center></br>
</form></center>
<?php
if(isset($_POST['choose_extra']))
{
$getextraprice = mysql_real_escape_string($_SESSION['getextraprice']);
$getextraname = mysql_real_escape_string($_SESSION['getextraname']);
$takeextra = mysql_query("INSERT INTO selectextra(user,title,extraitem,price) VALUES('".mysql_real_escape_string($username)."','".mysql_real_escape_string($title)."','$getextraname,'$getextraprice')") or die(mysql_error());

if($takeextra)
{
echo "Order SAVE.";
}
else{
echo "failed";
}
}
?>

</div>

</div>

如果你想获得已勾选的复选框,那么可以这样做:-

<div class="adjust">
<center><form class="greatForm" method="post" action="#">
<?php
$read_extra = mysql_query("SELECT price, item_name, item_label, item_img FROM extra_item where theme_name = '".mysql_real_escape_string($title)."'") or die(mysql_error());

while($show_extra = mysql_fetch_array($read_extra))
{
$_SESSION['getextraprice'] = $show_extra['price'];
$_SESSION['getextraname'] = $show_extra['item_name'];
?>
<input type="checkbox" name="<?php echo $show_extra['price']; ?>" id="<?php echo $show_extra['item_label']; ?>" value="<?php echo $show_extra['item_label']; ?>"/>
<label for="<?php echo $show_extra['item_label']; ?>" >
<img style="height:150px;width:150px;" src="<?php echo 'themeinfo/extra/'.$show_extra['item_img']; ?>"/><?php echo $show_extra['item_name']; ?></label>

<?php
if(isset($_POST['choose_extra']) and array_key_exists($show_extra['price'], $_POST) and $_POST[$show_extra['price']] != '')
{
$takeextra = mysql_query("INSERT INTO selectextra(user, title, extraitem, price)
VALUES('".mysql_real_escape_string($username)."',
'".mysql_real_escape_string($title)."',
'".mysql_real_escape_string($show_extra['item_name'])."',
'".mysql_real_escape_string($_POST[$show_extra['price']])."')") or die(mysql_error());
}
}
?>
<center><br><br><input type="submit" class="button" style="width:10%;" value="SAVE" name="choose_extra"></center></br>
</form></center>
</div>
</div>

请注意,这在很大程度上是一个猜测,因为字段名称是数字价格的字段看起来很奇怪。

编辑 - 根据猜测进一步更新:-

<div class="adjust">
<center><form class="greatForm" method="post" action="#">
<?php
$read_extra = mysql_query("select id, item_label, price, item_name, item_img from extra_item where theme_name = '$title'");

while($show_extra = mysql_fetch_array($read_extra))
{
echo "<input type='checkbox' name='checkextra[".$show_extra['id']."]' id='".$show_extra['item_label']."' value='".$show_extra['price']."'/>";
echo "<label for='".$show_extra['item_label']."' >";
echo "<img style='height:150px;width:150px;' src='themeinfo/extra/'".$show_extra['item_img']."'/>".$show_extra['item_name']."</label>";
echo "<input type='hidden' name='item_name[".$show_extra['id']."]' value='".$show_extra['item_name']."'/>";
}

echo "<center><br><br><input type='submit' class='button' style='width:10%;' value='SAVE' name='choose_extra'></center></br>";
echo "</form></center>";

if(isset($_POST['choose_extra']))
{
foreach($_POST['checkextra'] as $getextraprice_id=>$getextraprice)
{
$takeextra = mysql_query("INSERT INTO selectextra(user,title,extraitem,price)
VALUES('".mysql_real_escape_string($username)."',
'".mysql_real_escape_string($title)."',
'".mysql_real_escape_string($_POST['item_name'][$getextraprice_id])."',
'".mysql_real_escape_string($getextraprice)."')") or die(mysql_error());

}
if($takeextra)
{
echo "<center>Extra item order SAVE.</center>";
}
else
{
echo "failed";
}
}

?>

</div>

选中带有价格值的复选框,以及一个包含 item_name 的隐藏字段。两者都作为数组。这些数组的索引应该匹配。当您处理表单时,您循环遍历复选框,您将获得每个复选框数组项的索引,并将其用作访问 item_name 字段的索引。

再次编辑。使用序列号来强制表单元素数组的索引(可能应该是必要的,但我更喜欢强制执行)而不是使用表中的字段。

<div class="adjust">
<center><form class="greatForm" method="post" action="#">
<?php

$conn = mysql_connect('localhost', 'root', '');
mysql_select_db('test', $conn);
$title = 'fred';
$username = 'jo';

$read_extra = mysql_query("SELECT item_label, price, item_name, item_img FROM extra_item WHERE theme_name = '$title'");

$row_cnt = 0;
while($show_extra = mysql_fetch_array($read_extra))
{
echo "<input type='checkbox' name='checkextra[$row_cnt]' id='".$show_extra['item_label']."' value='".$show_extra['price']."'/>";
echo "<label for='".$show_extra['item_label']."' >";
echo "<img style='height:150px;width:150px;' src='themeinfo/extra/'".$show_extra['item_img']."'/>".$show_extra['item_name']."</label>";
echo "<input type='hidden' name='item_name[$row_cnt]' value='".$show_extra['item_name']."'/>";
$row_cnt++;
}

echo "<center><br><br><input type='submit' class='button' style='width:10%;' value='SAVE' name='choose_extra'></center></br>";
echo "</form></center>";

if(isset($_POST['choose_extra']))
{
foreach($_POST['checkextra'] as $getextraprice_id=>$getextraprice)
{
$takeextra = mysql_query("INSERT INTO selectextra(user,title,extraitem,price)
VALUES('".mysql_real_escape_string($username)."',
'".mysql_real_escape_string($title)."',
'".mysql_real_escape_string($_POST['item_name'][$getextraprice_id])."',
'".mysql_real_escape_string($getextraprice)."')") or die(mysql_error());

}
if($takeextra)
{
echo "<center>Extra item order SAVE.</center>";
}
else
{
echo "failed";
}
}

?>

</div>

关于PHP - 如何插入 while 循环复选框并保存到 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23737046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com