2016-05-12 2 views
0

このコードはうんざりです。本当に。私はこれを修正するために昨日働いていて、うまく機能していません。私は誰でも彼らに彼らの入力を与えるだろうappriciateだろう。1回の送信クリックでデータベース値を変更するPHP

私はいくつかの素晴らしい機能を備えた古いCMSを見つけました。しかし、そのCMSは2008年のもので、まだMySQL上で動作しており、もう更新されていません。だから私はそれからいくつかのスクリプトを取り出した。 1つは、送信ボタンを1回クリックするだけで複数のデータベース行onoffを調整することができます。

データベースは次のようになります。

値はオンまたはオフを意味します。オランダではaanuitです。私はオランダのCMSを作っているので、オランダ語で作成していますので、お客様も理解できます。

2008年のCMSのコードはhttp://pastebin.com/EkmB8rFr(私はペーストビンに貼り付けています。これはコードが乱雑でSOが小さすぎるためです)。

私の仕事は、この2008年のコードをすべてのSQLインジェクションが固定された2016年のコードに変換することです。ここに私の結果があります:

<?php 
    if(isset($_POST['opslaan'])) { 
     $stmt = $dbConnection->prepare('SELECT * FROM settings'); 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     while ($row = $result->fetch_assoc()) { 
      $id = $_POST[$row["id"]]; 
      $row = $row["id"]; 
      $stmt1 = $dbConnection->prepare('UPDATE settings SET value = ? WHERE id = ?'); 
      $stmt1->bind_param('ss', $id, $id); 
      $stmt1->execute(); 
     } 

     //header('Location: index.php?page=instellingen'); 
    } else { 
     $stmt = $dbConnection->prepare('SELECT * FROM settings ORDER BY id ASC'); 
     $stmt->execute(); 

     $result = $stmt->get_result(); 
    ?> 
    <form method="POST" action=""> 
     <table> 
     <tr> 
      <th>Naam</th> 
      <th>Laatst gewijzigd</th> 
      <th>Waarde</th> 
     </tr> 
     <?php 
    while ($row = $result->fetch_assoc()) { 
    ?> 
     <tr> 
      <td><?php echo $row["code"]; ?></td> 
      <td><?php echo $row["updated"]; ?></td> 
      <td> 
       <select name="<?php echo $row["id"]; ?>"> 
        <option value="aan"<?php if($row["value"] == "aan") {echo ' selected';} ?>>Aan</option> 
        <option value="uit"<?php if($row["value"] == "uit") {echo ' selected';} ?>>Uit</option> 
       </select> 
      </td> 
     </tr> 
    <?php } ?> 
     </table> 
    <input type="submit" value="Opslaan" name="opslaan"> 
    </form> 
    <?php 
} 

このコードは2008コードのようには機能しませんし、何が起こっているのか分かりません。 IDはデータベースに格納され、<select>の値は格納されません。


出力は次のようにする必要があります:

+0

これが問題 '$ stmt1-> bind_param( 'SS'、$のIDは、$ id)をisthe;' –

+0

@Dagonそれは固定ガット、あなたの入力ダゴンに感謝を! –

答えて

1

いくつかのものは、あなたの更新に混ざっているように見えます。私は、これはより良い動作するはずだと思う:

while ($row = $result->fetch_assoc()) { 

    $id = $row["id"];      // get the id from the row 
    $value = $_POST[$id];     // find the corresponding POST value 

    $stmt1 = $dbConnection->prepare('UPDATE settings SET value = ? WHERE id = ?'); 

    $stmt1->bind_param('ss', $value, $id); // Bind the correct variables here 
    $stmt1->execute(); 
} 
+1

私はパニックにならないように教えてください、もし私がahrhrherhrharharhjeahrakwrkescrjmeuicyhtuiawmtlchに電話したいのであれば、 –

+0

ああ、それは問題を修正したようです。私は昨日戻ってくることができないと思うが、あなたは私の晩を作りました。ありがとう、パニックにはならないよ! –

+0

@ダゴンそれは単なる提案であり、要求ではありません。 :) –

関連する問題