3

...通常はそれほど難しくないはずですが、何らかの理由で動作しません。私はおそらく何かを見逃しているか、タイプミスをしたのでしょうか、わかりませんが、それが何であれ、私はそれを見つけることができません.

include('connect-db.php');

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$query = "SELECT * FROM articles ORDER BY orderid";
$result = mysql_query($query) or die(mysql_error());

$count = mysql_num_rows($result);
?>
<div class="content-holder">
    <form action="" method="post">
        <table border='1' cellpadding='10' id='ViewTable'>
            <tr>
            <th>Volgorde</th>
            <th>Titel</th>
            </tr>
            <?php
            while($row = mysql_fetch_array($result))
            {
                $orderid = $row['orderid'];
                $title = $row['title'];
            ?>
            <tr>
                <td><input type="textbox" class="TextAreaTitle" name="order" value="<?=$orderid?>"></td>
                <td><?=$title?></td>
            </tr>
            <?php
            }
            ?>
        </table>
        <input type="submit" name="submit" class="submitlink" Value="Verzenden">
    </form>
</div>

<?php
if(isset($_POST['submit']))
{
    mysql_query("UPDATE articles SET orderid=$orderid  WHERE title=$title");
    echo "Updated!";
}
?>

念のため、コード全体をここに貼り付けました。Web ページでは、基本的に、orderid 列と title 列、それぞれのすべての行を含むテーブルの場合に表示されます。orderid はテキストボックスなので変更できます。私が達成しようとしているのは、1 つ (または複数) の orderid が変更され、ボタンをクリックすると、データベースで orderid がそれに応じて変更されることです。

よろしくお願いします。ご不明な点がございましたら、お尋ねください。

編集:これについて言及するのを完全に忘れていましたが、ボタンをクリックすると何が起こるか、「更新されました!」というエコーが返されます。しかし、データベースは実際には更新されません。

4

4 に答える 4

2
mysql_query("UPDATE articles SET orderid=$orderid  WHERE title=$title");

<input>これは、次のようにフォーム内のフィールドを参照する必要があります。

$orderid = $_POST['order'];
$title = $_POST['title'];
mysql_query("UPDATE articles SET orderid=$orderid  WHERE title=$title");

titleフォームから値を返信することはありません。フォームにが必要な<input name="title" />ので、それを追加します。それ以外の場合は、while ループの最後の値が常に使用されます。

$_POST から読み取る場合は、入力検証を追加する必要があります。そうしないと、攻撃に対して脆弱になります。

編集:少し修正しました。

include('connect-db.php');

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");


$query = "SELECT * FROM articles ORDER BY orderid";
$result = mysql_query($query) or die(mysql_error());

$count = mysql_num_rows($result);
?>
<div class="content-holder">
    <form action="" method="post">
        <table border='1' cellpadding='10' id='ViewTable'>
            <tr>
            <th>Volgorde</th>
            <th>Titel</th>
            </tr>
            <?php
            while($row = mysql_fetch_array($result))
            {
                $orderid = $row['orderid'];
                $title = $row['title'];
            ?>
            <tr>
                <td><input type="textbox" class="TextAreaTitle" name="order[]" value="<?=$orderid?>"><input type="hidden" name="title[]" value="<?=$title?>"></td>
                <td><?=$title?></td>
            </tr>
            <?php
            }
            ?>
        </table>
        <input type="submit" name="submit" class="submitlink" Value="Verzenden">
    </form>
</div>

<?php
if(isset($_POST['submit']))
{
    for ($i=count($_POST['title']); $i--;) {
        $orderid = $_POST['order'][$i];
        $title = $_POST['title'][$i];
        mysql_query("UPDATE articles SET orderid=$orderid  WHERE title=$title");
    }
    echo "Updated!";
}
?>
于 2013-03-21T14:15:24.960 に答える
0

使用name="order[]" すると配列が返され、foreachを使用して配列を文字列に変換する必要があります

于 2014-10-24T07:17:53.243 に答える
-1

見えることを願っています

mysql_query("UPDATE article SET orderid=' " . $orderid . " ' WHERE title=' " . $title . " ' "); echo "更新されました!";

于 2013-03-21T14:05:33.677 に答える
-1

時々、これらのタイプのエラーが発生します。データの挿入中またはデータベースからの取得中に構文が異なるため、すべての解決策を試す必要があります

mysql_query("UPDATE article SET orderid='". $orderid ."' WHERE title='". $title ."'"); echo "更新されました!";

于 2013-03-21T14:02:05.160 に答える