替换不在数据库中更新

时间:2012-04-28 08:52:25

标签: php mysql

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

3 个答案:

答案 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']

的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";