在php中访问表格单元格数据

时间:2014-11-14 00:07:56

标签: php database mysqli insert

我似乎无法真正找到解决这个问题的方法。

我有一个名为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)
)

1 个答案:

答案 0 :(得分:0)

简答:

你的问题与这一行有关:

<td><input type="radio" name="sandwich" value="'.$count1.'"></td>  

您应该将$count1更改为包含三明治名称的变量。由于下面描述的原因,你不应该这样做(但它可能会起作用,只要你适当地处理字符串)。

此字段将变为$_POST['sandwich'],并且将包含所选的任何值。

$sname = $_POST['sandwich'];
$query = "INSERT INTO orders (sname, ...) VALUES ('{$sname}', ...)";

(当然,您应该使用准备好的语句并适当地清理输入)。

长答案   - 您的表语法遍布整个地方。对于多个元素,您不能拥有相同的idname没有<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到三明治表生成收据或订单屏幕。