我有一个id
表,它是主键,user_id
是外键,但会话基于此代码。
我已经尝试了一切,所以我会发布我的完整代码。
如果表中没有user_id
具有相同的session_id,则应插入表单。如果有,它应该更新。
此时,当用户之前未访问过表单(表中没有user_id)并插入数据时,页面将返回到位置页面:但数据未插入表中。如果用户更新数据一旦更新,它也不会改变。
这是表结构:
`thesis` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`thesis_Name` varchar(200) NOT NULL,
`abstract` varchar(200) NOT NULL,
`complete` int(2) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
)
我一直在使用的代码(并且失败了):
$err = array();
$user_id = intval($_SESSION['user_id']);
// otherwise
if (isset($_POST['doThesis'])) {
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection.");
// check if current user is banned
$the_query = sprintf("SELECT COUNT(*) FROM users WHERE `banned` = '0' AND `id` = '%d'",
$user_id);
$result = mysql_query($the_query, $link);
$user_check = mysql_num_rows($result);
// user is ok
if ($user_check > 0) {
// required field name goes here...
$required_fields = array('thesis_Name','abstract');
// check for empty fields
foreach ($required_fields as $field_name) {
$value = trim($_POST[$field_name]);
if (empty($value)) {
$err[] = "ERROR - The $field_name is a required field" ;
}
} // no errors
if (empty($err)) {
$id = mysql_real_escape_string($_POST['id']);
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);
$abstract = mysql_real_escape_string($_POST['abstract']);
//replace query
$query = "REPLACE INTO thesis ( thesis_Name, abstract) VALUES ('$thesis_Name',
'$abstract') where id='$_SESSION[user_id]'";
if (!mysql_query($the_query))
echo "the query failed";
else header ("location:myaccount.php?id=' . $user_id");
}}}
$rs_settings = mysql_query("SELECT * from thesis WHERE user_id = $user_id;");
?>
<br>
<form action="thesis.php" method="post" name="regForm" id="regForm" >
class="forms">
<?php
$num_rows = mysql_num_rows($rs_settings);
if($num_rows > 0) { ?>
<?php while ($row_settings = mysql_fetch_array($rs_settings)) {?>
Title of Proposed Thesis<span class="required">*</span>
<textarea name="thesis_Name" type="text" style="width:500px; height:150px"
id="thesis_Name" size="600"><?php echo $row_settings['thesis_Name']; ?> </textarea>
</tr>
<tr>
<td>Abstract<span class="required">*</span>
</td>
<td><textarea name="abstract" style="width:500px; height:150px"
type="text" id="abstract" size="600"><?php echo $row_settings['abstract']; ?>
</textarea></td>
</tr>
<?php }
} else { ?>
//shows fields again without echo
我尝试过var_dum($ query)但没有出现
PS我知道代码并不完美,但我现在不是在问这个问题
答案 0 :(得分:1)
我无法看到你的replace语句将如何插入初始行,因为where子句总是为false(不会有一个用户ID的行)。 我想你想要使用替换你需要在没有where子句的情况下替换为论文(id,userid等)。如果id和userid具有唯一约束并且存在userid的行,那么它将被更新;如果它不存在,它将被插入。 但是 - 如果你不知道id-如果你使用自动增量你不会,那么我不确定你可以用替换来做到这一点。见http://dev.mysql.com/doc/refman/5.0/en/replace.html
为什么不检查是否存在行然后使用更新或插入?
BTW,用户可以将多个论文输入表单,还是只输入一个?你的表显示他们可以有多个。如果这是你想要实现的,那么我认为你应该将每个论文的id存储在隐藏字段中作为表单数据的一部分。然后,您就可以使用REPLACE INTO论文(id,user_id,thesis_name,abstract)VALUES($ id,$ user_id,$ thesis_name,$ abstract),其中id是从每个隐藏字段获得的论文的id。如果不存在,即用户已输入新论文,则在插入中使用NULL作为id。这将使用REPLACE INTO,因为id列是自动增量。答案 1 :(得分:0)
也许您的意思是user_id
而不是id
:
$query = "REPLACE INTO thesis ( thesis_Name, abstract)
VALUES ('$thesis_Name','$abstract')
WHERE user_id='{$_SESSION['user_id']}'";
或者,如果您的意思是来自$_POST['id']
$query = "REPLACE INTO thesis ( thesis_Name, abstract)
VALUES ('$thesis_Name','$abstract')
WHERE id='$id'";
而不是REPLACE
,您应该使用UPDATE
。我很确定它更快,因为REPLACE基本上删除了行然后再次插入它,我很确定你需要所有的字段和值,否则你的插入默认值。来自manual:
所有列的值都取自中指定的值 REPLACE声明。任何缺少的列都设置为默认值 值,就像INSERT
一样
所以你应该使用:
$query = "UPDATE thesis
SET thesis_Name='$thesis_Name', abstract='$abstract'
WHERE id='$id'";
答案 2 :(得分:0)
你做的一切都是正确的,只是你做错了一件事 您的替换查询变量是$ query并执行$ the_query。 你错了:
$query = "REPLACE INTO thesis ( thesis_Name, abstract) VALUES ('$thesis_Name',
'$abstract') where id='$_SESSION[user_id]'";
if (!mysql_query($the_query)) // this is wrong
echo "the query failed";
将其替换为:
$query = "REPLACE INTO thesis ( thesis_Name, abstract) VALUES ('$thesis_Name',
'$abstract') where id='$_SESSION[user_id]'";
if (!mysql_query($query)) // use $query
echo "the query failed";