【发布时间】:2014-12-02 06:53:18
【问题描述】:
我有一个带有各种类型输入字段(复选框、下拉列表、单选、自动完成等)的 PHP 表单。我想做的是让用户输入(可能不止一个值,例如例如,问题是:你最喜欢哪部电影?他可能会写超过 1 部电影)并将这些值存储在 Mysql 表中的单独行中。 这是我数据库中的表:
答案: Id、userId、questionId、答案
成员:用户 ID、姓名、姓氏等
问题:questionId, questionText
我能做的是这样的:(注意:在这种情况下,设计会有所不同,这里我为每个问题设置了一个单独的字段)
$stmt = $conn->prepare('UPDATE test SET q1 = :q1, q2 = :q2, q3 = :q3, q4 = :q4, q5 = :q5, q6 = :q6, q7 = :q7 WHERE username = :username');
$stmt->execute(array(':q1' => $q1,':q2' => $q2, ':q3' => $q3, ':q4' => $q4, ':q5' => $q5, ':q 6' => $q6, ':q7' => $q7, ':username' => $_SESSION['SESS_USERNAME']));
我对这种方法的问题是多个值的答案被插入到同一行中,并用逗号分隔(例如,如果用户写了“Tom Cruise”和“Brad Pitt”,它会将这两个名称存储在同一行中)
我想我必须用这样的东西替换它:
$stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)');
但是这里我不知道如何定义qId? (它如何识别每个答案与哪个问题相关)
编辑:
在下面的代码中,我可以从数据库中获取问题并将其存储在数组中,但我仍然不确定如何完成此代码.. 我应该在循环内编写插入语句(从数据库获取问题的循环,所以对于每个问题,它都会插入 qId 和用户插入的答案......我是对的吗??)
$arr = array();
$sql="select qId from question";
$result = mysql_query($sql) or die(mysql_error());
while( $row = mysql_fetch_assoc( $result ) ) {
arr[] = $row[ 'qId' ];
}
有人可以帮我了解如何将这些值插入多行吗?
非常感谢,
【问题讨论】:
-
INSERT with WHERE don't mix, your first query shoudnt work
-
我同意 Mihai,您唯一能做的就是尝试帮助用户输入正确的数据,通过某种方式(如电子邮件、电话号码)和/或您标题的方式验证它字段,如“名字”“姓氏”等。我不会改变我的设计来解释用户输入错误数据的原因,因为他们总会在某个时候这样做。稍后您会很高兴所有字段都是分开的,因为使用这些数据会更容易。
-
真的,数据库设计必须反映您计划如何使用数据,在同一个领域同时拥有“汤姆克鲁斯”和“布拉德皮特”可能会非常好,这一切都取决于什么你想用它做到底。因为,您可以像这样搜索它们 Like %tom Cruise% 并找到它,即使有另一个也很好。
-
@ArtisiticPhoenix:感谢您的精彩信息!实际上,我需要知道哪个答案是由哪个用户编写的(因为我需要它用于我的基于用户的研究项目,并且稍后需要它用于推荐目的..(我的研究是关于推荐系统算法)
-
@mihai:你是对的,我已经收到了错误,谢谢你提到它:)