我似乎无法真正找到解决这个问题的方法。
我有一个名为validateLogin.php的文件,如下所示:
<html>
<head>
<title>Login Validation</title>
<link rel="stylesheet" type="text/css" href="CSS Files/indexstyle.css" />
</head>
<body>
<div id="middle" align="center">
<?php
if ( isset($_POST["phone"]) )
{
$phone=($_POST['phone']);
include "connect.php";
$query = mysqli_query($mysqli, "SELECT * FROM customer WHERE phone='".$phone."'");
if(mysqli_num_rows($query) > 0)
{
if (!isset($_SESSION))
session_start();
$phone=($_POST['phone']);
$_SESSION['phone']=$phone;
$_SESSION['timeout']=time();
if ($stmt=$mysqli->prepare("SELECT m.sname,m.size,m.price from sandwich s inner join menu m where s.sname=m.sname "))
{
$stmt->execute();
$stmt->bind_result($col1,$col2,$col3);
echo'<form name="form" action = "orderUpdate.php" method="POST">
<center>
<table border cellpadding=3>
<tr>
<th style="background-color: #FFFF00;"> Sandwich Name </th>
<th style="background-color: #FFFF00;"> Size </th>
<th style="background-color: #FFFF00;"> Price </th>
</tr>';
$count1=1;
while ($stmt->fetch()) {
echo '
<tr border="1px solid black" >
<td border="1px solid black" width="30%" id="col1" name="col1">'.$col1.'</td>
<td border="1px solid black" width="10%" id="col2" name="col2">'.$col2.'</td>
<td border="1px solid black" width="20%" id="col3" name="col3">'.$col3.'</td>
<td><input type="radio" name="sandwich" value="'.$count1.'"></td>
</tr>
';
$count1=$count1+1;
}
echo '<tr> <td> <input type="submit" value="submit"/> </td></tr>';
echo'</form>';
}
}
else
{
echo '<script type="text/javascript">
alert("Sorry. Customer does not exist.");
window.location.href="index.php";
</script>';
}
}
?>
</div>
</body>
</html>
现在,从表格表格中生成的输出中,用户将选择一个与行相关联的特定单选按钮。我需要将这些数据插入到我的mysql数据库表中。但是我不知道如何根据用户选择访问需要插入的相应col1,col2和col3。
模式
customer
(
phone char(10) primary key,
building_num int,
street varchar(20),
apartment varchar(20)
);
sandwich
(
sname varchar(20) primary key,
description varchar (100)
);
menu
(
sname varchar(20),
size varchar (20),
price decimal(4,2),
primary key (sname, size),
foreign key (sname) references sandwich(sname)
);
orders
(
phone char(10),
sname varchar(20),
size varchar(20),
o_time datetime,
quantity int,
status varchar(10),
primary key (phone, sname, size, o_time),
foreign key (phone) references customer(phone),
foreign key (sname, size) references menu(sname, size)
)
答案 0 :(得分:0)
简答:
你的问题与这一行有关:
<td><input type="radio" name="sandwich" value="'.$count1.'"></td>
您应该将$count1
更改为包含三明治名称的变量。由于下面描述的原因,你不应该这样做(但它可能会起作用,只要你适当地处理字符串)。
此字段将变为$_POST['sandwich']
,并且将包含所选的任何值。
$sname = $_POST['sandwich'];
$query = "INSERT INTO orders (sname, ...) VALUES ('{$sname}', ...)";
(当然,您应该使用准备好的语句并适当地清理输入)。
长答案
- 您的表语法遍布整个地方。对于多个元素,您不能拥有相同的id
,name
没有<td>
属性,而<th>
应该嵌套在<thead>
内,不是<tr>
。我已经更新了它,为单元格提供了一个类名称,这将允许您使用CSS(而不是丑陋的内联语句)应用一致的样式,并且如果您曾经通过javascript方便地访问数据需要这样做。
SELECT m.sname,m.size,m.price FROM sandwich s INNER JOIN menu m WHERE s.sname = m.sname
但看起来您的问题源于缺少每个三明治的唯一标识符。名称是可以的,但通常最好使用唯一的ID与每个三明治相关联。使用mysql&#39; auto_increment自动生成它。
CREATE TABLE sandwiches ( sid int(5) not null auto_increment, primary key(sid), sname varchar(255)....
这样,您可以将ID作为表单值传递,并将每个记录与该ID正确关联。看起来它是您尝试使用$counter1
做的事情,但它只是需要额外的一步。
<input type="radio" name="sandwich_id" value="<?=$sid;?>" id="sid_<?=$id;?>">
<label for="<?=$sid;?>"><?=$sandwich_name;?></label>
选择所有这些单选按钮后,您可以执行以下操作:
<?php
$sid = (int)$_POST['sandwich_id'];
$phone = preg_replace("/[^0-9]/",'', $_POST['phone']; // Strips all non-numeric chars out
$query = "INSERT INTO orders (sandwich_id, customers_phone) VALUES ({$sid}, '{$phone}')";
当然,你应该使用准备好的陈述 - 这只是一个例子。通过在订单表中插入三明治ID,您可以JOIN
到三明治表生成收据或订单屏幕。