php
  • mysql
  • 2016-08-15 7 views 0 likes 
    0

    警告フィールドが非表示になっている場合にメッセージを表示し、そのフィールドを更新してメッセージを再度表示できないようにしようとしています。値はdbで更新されていますが、メッセージはまだ表示されています。クエリを取得する際の問題

    <?php 
    $alrt="hidden"; 
    $checkalert=mysql_query("SELECT * FROM user_shift_test WHERE userid='$_SESSION[userid]' AND alert='$alrt' "); 
    if(!empty($checkalert)){ 
    $updatealert=mysql_query("UPDATE user_shift_test SET alert='showed' WHERE userid='$_SESSION[userid]' "); 
    ?> 
    <div class="alert" style="margin:10px;"> 
        Your shift is swapped. 
    </div><?php } ?> 
    
    +0

    あなたは*「?あなたは何を知っている」ことを始めたのです* - 編集:私は推測しますおそらくあなたがあなたの質問を削除した理由はありません。 –

    +0

    ああ、今、あなたは元に戻って、なぜ?セッションを開始しましたか? –

    +0

    いいえ、私は私の質問を削除した理由を試していたが、それは私がそれを再投稿する理由は動作しませんでした。 –

    答えて

    1

    あなたのコードにはいくつかの問題があります。

    • あなたは非推奨mysql_機能を使用します。これらは、過去3年の間に維持されておらず、PHP 7.xx.には存在しません。 mysqli_またはPDOに移動する必要があります。
    • SQL文内に文字列を挿入します。これは、SQLインジェクションに対して脆弱になる可能性があります。代わりにprepared statementsを使用してください。
    • 結果セットが空であっても、テスト!empty($checkalert)は常に真です。これはクエリオブジェクトです。これがメッセージが表示され続ける理由です(BTW:と表示されていません)。
    • get-and-set操作を1つのSQL操作で実行すると、パフォーマンスが向上します。条件付き更新の後、レコードが更新されたかどうかを確認し、更新されている場合はメッセージを表示できます。ここで

    あなたが最初に(また、接続用)mysqli_関数に移動する必要がありますそのためのコードです:

    <?php 
    // Perform update only if value is hidden 
    $stmt = mysqli_prepare($con, 
        "UPDATE user_shift_test 
        SET alert = 'shown' 
        WHERE userid = ? 
        AND coalesce(alert, 'hidden') = 'hidden' "); 
    if ($stmt) { 
        // pass session variable as argument 
        mysqli_stmt_bind_param($stmt, "s", $_SESSION['userid']); 
        mysqli_stmt_execute($stmt); 
        // check if any update was performed 
        if (mysqli_stmt_affected_rows($stmt)) { 
    ?> 
         <div class="alert" style="margin:10px;"> 
          Your shift is swapped. 
         </div> 
    <?php 
        } 
    } 
    ?> 
    
    +0

    は、古いデータベースが現在作業中で、そのすべてのコードがmysql上にあるため、mysqlを使用する方法はありません。いいえmysqli –

    +0

    私の接続ファイルがmysql上にあってもmysqliを適用できますか? –

    +0

    @ S.MTalha、私はあなたに '' PDO''を見てみることをお勧めします。これは非常に使いやすく簡単です。 (正しく使用された場合)。 – Sj03rs

    関連する問題