【问题标题】:Access table cells data in php在php中访问表格单元格数据
【发布时间】:2014-11-14 00:07:56
【问题描述】:

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

我有一个名为 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 个,然后单击提交按钮以订购该特定尺寸。所以基本上他的订单需要存储在数据库中。这对你有帮助吗?
  • 你的表有主键吗? (你能发布你的表架构吗?)

标签: php database mysqli insert


【解决方案1】:

简答:

您的问题与这一行有关:

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

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

此字段将变为 $_POST['sandwich'] 并将具有所选的任何值。

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

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

长答案 - 您的表格语法无处不在。多个元素不能有相同的id&lt;td&gt; 没有name 属性,&lt;th&gt; 应该嵌套在&lt;thead&gt; 中,而不是&lt;tr&gt;。我已经对其进行了更新,为单元格提供了一个 class 名称,这将使您可以使用 CSS 应用一致的样式(而不是丑陋的内联语句),并在需要时通过 javascript 方便地访问数据这样做。

  • 我不完全确定这个查询发生了什么:
SELECT m.sname,m.size,m.price 
FROM sandwich s 
    INNER JOIN menu m 
    WHERE s.sname = m.sname

但您的问题似乎源于缺少每个三明治的唯一标识符。名称没问题,但通常最好使用唯一 ID 与每个三明治相关联。使用mysql的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 到三明治表以生成收据或订单屏幕。

【讨论】:

  • 在没有 sid 的情况下我不能这样做吗? sql 查询仅将三明治中的 sname 映射到菜单表,以检索它的大小和价格。我仍然会尝试实施你的建议,但没有 sid
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
相关资源
最近更新 更多