web-dev-qa-db-ja.com

テーブル内のすべての行の1つの列を更新する

1つのテーブルのすべての行の1つの同じ列を更新したいのですが、誰かがテーブルを更新する方法を教えてもらえますか?すべての行の値を更新する必要がある入力フィールドは1つだけです。このコードは機能していません。インデックスと配列に何か問題があることがわかります。

<?php
    <form method="post" dir="rtl" name="maxcharfield" >                     
        <textarea onKeyDown="textCounter(this,'progressbar1',300)" 
          onKeyUp="textCounter(this,'progressbar1',300)" 
          onFocus="textCounter(this,'progressbar1',300)"  
            style="font-family:'B_yekan';" id="text" name="text" rows="0" cols="0" class="required"></textarea>
        <div class="cleaner h10"></div> 

        <div style="font-family:'B_yekan';" dir="rtl" id="progressbar1" class="progress" ></div>
        <script>textCounter(document.getElementById("maxcharfield"),"progressbar1",100)</script>    

        <input class="styled-button-8" style="margin-top:10px; float:right; margin-right:50px; font-size: 14px;  padding: 5px 14px;" type="submit" value="save" name="Submit"   />
        <input style="font-family:'B_yekan';" type="reset" value="reset" id="reset" name="reset" class="submit_btn float_l" />

    </form>

<?php
// for updating Check if button name "Submit" is active, do this 
if(isset($_POST['Submit']) && $_POST['Submit'] == 'save')
    {
        $sql1="UPDATE `".$tbl_name."` SET `board`='".$_REQUEST['text']."'  ";
                            $result1=mysql_query($sql1);
     }

    }   
?>
22

ソリューションが複雑になりすぎています。すべてのレコードを更新するために、あなたが取ろうとしているアプローチは次のとおりです。

  1. すべてのレコードを選択します。
  2. 各レコードのIDを取得します。
  3. IDをループします。
  4. そのIDで各レコードを更新します。

UPDATE構文には、これを行うためのはるかに簡単な方法があります。 WHERE句をUPDATEステートメントに指定する必要はありません。この句がないと、デフォルトでテーブル内のすべてのレコードが更新されます。

_UPDATE TableName SET `board`='value'
_

Also、コードに SQLインジェクション の脆弱性があることに注意してください。 SQLクエリで_$_REQUEST['text']_を直接使用すると、すべてのユーザーがSQLコードをクエリに送信できるようになります。コードは、送信されたものをすべて実行します。これにより、データが破損または削除されたり、サーバーへの管理アクセスが可能になったりする可能性があります。

まず、_mysql_*_関数の使用を停止してください。 PHPは非推奨になったため、使用しないでください。 a _mysqli__ replacement があります。それに加えて、 mysqli_real_escape_string() function SQLクエリで入力を使用する前に入力をサニタイズし、最後に、値をSQL文字列に直接連結する代わりに 準備済みステートメント を使用します。

52
David