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句が常にfalseになるため、replaceステートメントが最初の行を挿入する方法がわかりません(そのユーザーIDの行はありません)。where句なしで論文(id、useridなど)に置き換える必要があるreplaceを使用したいと思います。id と userid に一意の制約があり、userid の行が存在する場合は更新されます。存在しない場合は挿入されます。ただし、自動インクリメントを使用している場合はわからないidがわからない場合は、置換でこれを行うことができるかどうかわかりません。http://dev.mysql.com/doc/refman/5.0/en/replace.htmlを参照してください。

行の存在を確認してから、更新または挿入を使用してみませんか?

ところで、ユーザーがフォームに複数の論文を入力できるという考えですか、それとも 1 つだけですか? あなたの表は、複数持つことができることを示唆しています。これがあなたが達成しようとしているものである場合、各論文のIDをフォームデータの一部として非表示フィールドに保存する必要があると思います. 次に、REPLACE INTO thesis (id, user_id, thesis_name, abstract) VALUES ($id, $user_id, $thesis_name, $abstract) を使用できます。id は、各非表示フィールドから取得した論文の ID です。これが存在しない場合、つまりユーザーが新しい論文を入力した場合は、挿入の id に NULL を使用します。id 列は自動インクリメントであるため、これは REPLACE INTO を使用して機能します。

于 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

あなたはすべてを正しく行っていますが、間違っていることは 1 つだけです。置換クエリ変数は $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 に答える