0

我有一个表,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我知道代码并不完美,但我现在不问这个

4

3 回答 3

1

我看不到您的替换语句将如何插入初始行,因为 where 子句总是错误的(不会有具有该用户 ID 的行)。我想你想使用替换,你需要在没有 where 子句的情况下替换论文(id、userid 等)。如果 id 和 userid 有唯一约束并且存在 userid 的行,那么它将被更新;如果它不存在,它将被插入。但是-如果您不知道 id- 如果您使用自动增量,您将不会知道,那么我不确定您是否可以通过替换来做到这一点。见http://dev.mysql.com/doc/refman/5.0/en/replace.html

为什么不检查是否存在行然后使用更新或插入?

顺便说一句,用户可以在一个表单中输入多个论文,还是只输入一个?你的表表明他们可以有多个。如果这是您要实现的目标,那么我认为您应该将每篇论文的 id 作为表单数据的一部分存储在隐藏字段中。然后,您将能够使用 REPLACE INTO thesis (id, user_id, thesis_name, abstract) VALUES ($id, $user_id, $thesis_name, $abstract) 其中 id 是从每个隐藏字段中获得的论文的 id。如果这不存在,即用户输入了新论文,则在插入中使用 NULL 作为 id。这将使用 REPLACE INTO 工作,因为 id 列是自动递增的。

于 2012-04-28T09:04:58.107 回答
0

也许你的意思user_id不是id

$query = "REPLACE INTO thesis ( thesis_Name, abstract) 
          VALUES ('$thesis_Name','$abstract') 
          WHERE user_id='{$_SESSION['user_id']}'";

或者,如果您确实是指来自的 id$_POST['id']

$query = "REPLACE INTO thesis ( thesis_Name, abstract) 
          VALUES ('$thesis_Name','$abstract') 
          WHERE id='$id'";

另外,REPLACE您应该使用UPDATE. 我很确定它更快,因为 REPLACE 基本上删除了该行然后再次插入它,我很确定你需要所有的字段和值,否则你的插入默认值。从手册

所有列的值均取自 REPLACE 语句中指定的值。任何缺失的列都设置为其默认值,就像 INSERT 一样

所以你应该使用:

$query = "UPDATE thesis 
          SET thesis_Name='$thesis_Name', abstract='$abstract' 
          WHERE id='$id'";
于 2012-04-28T08:57:17.753 回答
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";
于 2012-04-28T11:18:12.960 回答