2016-07-31 16 views
0

ページが読み込まれた後にPHP変数を代入/変更する方法はありますか?たとえば、私が変数$usernameを持っているとしましょう。 $usernameはまだ設定されていませんが、ユーザーが$usernameと設定する入力フィールドを含むフォームを送信すると設定されます。したがって本質的に$username$username = $_POST["username"];になります。ユーザーがユーザー名を再度変更することを決めたとします。 (注:ページはユーザーの投稿時に更新されません。同じページです)$ usernameは$ _POST ["username"]に再度割り当てられます。この現在の方法論では、私のために働いていません。私は以下を構築しました:ページを更新せずにPHP変数を変更する

ユーザーがユーザー名を送信すると、正しく動作します。ユーザーがユーザー名を更新したいときには、正しく動作しなくなります。ユーザー名を更新してもエラーは返されませんが、以前のユーザー名に基づいて更新されることはありません。更新の代わりに、UPDATE SQL文が開始されなかった場合と同じままです。この問題を解決する方法はありますか?セッション変数で

:PHPはstatelessある

session_start(); 
ob_start(); 

$_SESSION["username"]; 
if (isset($_POST["username"])) 
{ 
    if (isset($_SESSION["username"])) 
    { 
     $db->query("UPDATE Users SET username = '{$_POST['username']}' WHERE username = '{$_SESSION['username']}'"); 
    } 

    else 
    { 
     $db->query("INSERT INTO Users (`username`) VALUES ('{$_POST['username']}')"); 
    $_SESSION["username"] = $_POST["username"]; 
    } 
} 
+0

UPDATEクエリですか? –

+1

これらの要求は、完全に異なるスクリプト実行で処理されます。異なるラン間で値が交換されることは、単に期待できません。そのためにセッションを使用する必要があります。詳細については、そのドキュメントを参照してください。 – arkascha

+0

@arkaschaセッション変数を使用する場合でも、私は同じ結果を得ます。私はセッションと通常の両方の変数を使用してみましたが、両方とも正常に動作していないようです。 – user2896120

答えて

0

、これは、要求が行われた後、何もサーバのメモリに格納されていないことを意味します。言い換えれば、PHPは、要求の間に失われるので、$prevUsernameを追跡することができません。より永続的なものに変数を格納することです。セッション:

<?php 
    session_start(); 

    if (isset($_POST['username'])) { 
     if (!isset($_SESSION['prevUsername'])) { 
      $stmt = $db->prepare('INSERT INTO Users (`username`) VALUES (?)'); 
      $stmt->bind_param('s', $_POST['username']) 
      $stmt->execute(); 

      $_SESSION['prevUsername'] = $_POST['username']; 
     }else{ 
      $stmt = $db->prepare('UPDATE Users SET username = ? WHERE username = ?'); 
      $stmt->bind_param('s', $_POST['username']) 
      $stmt->bind_param('s', $_SESSION['prevUsername']) 

      $_SESSION['prevUsername'] = $_POST['username']; 
     } 
} 

そして、あなたはAJAXでそれを使用する場合:

<html> 
    <head> 
     <meta charset="UTF-8" /> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    </head> 
    <body> 
     <form method="POST"> 
      <input type="text" id="txt_username" /> 
      <input type="submit" id="btn_submit" /> 
     </form> 
     <hr /> 
     <div id="username"></div> 
     <div id="output"></div> 
     <hr /> 
     <script> 
      $(function() { 
       $('#btn_submit').on('click', function(e) { 
        e.preventDefault(); 
        request(); 
       }); 
       request(); 
      }); 
      function request() { 
       $.ajax({ 
        type: 'POST', 
        url: 'http://www.darkbee.be/stack/username/process.php', 
        data: {'username':$('#txt_username').val(),}, 
        dataType:'json', 
        success: function(e) { 
        $('#username').html('Current username:'+e.current_username); 
        $('#output').html('Action:'+e.message); 
        }, 
       });     
      } 
     </script> 
    </body> 
</html> 

process.php値がで$ prevUsernameに割り当てられている

<?php 
    session_start(); 
    $output = array(
     'current_username' => '', 
     'message'   => '', 
    ); 

    if (isset($_POST['username']) && trim($_POST['username']) != '') { 
     if (!isset($_SESSION['prevUsername'])) { 
      /* 
      $stmt = $db->prepare('INSERT INTO Users (`username`) VALUES (?)'); 
      $stmt->bind_param('s', $_POST['username']) 
      $stmt->execute(); 
      */ 

      $output['message'] = 'Tracked new username: '.$_POST['username']; 
      $_SESSION['prevUsername'] = $_POST['username']; 

     }else{ 
      /* 
      $stmt = $db->query('UPDATE Users SET username = ? WHERE username = ?'); 
      $stmt->bind_param('s', $_POST['username']) 
      $stmt->bind_param('s', $_SESSION['prevUsername']) 
      */ 

      $output['message'] = 'Changed old username from '.$_SESSION['prevUsername']. ' to '.$_POST['username']; 
      $_SESSION['prevUsername'] = $_POST['username']; 
     } 
    }else{ 
     $output['message'] = 'Nothing happend'; 
    } 
    if (isset($_SESSION['prevUsername'])) $output['current_username'] = $_SESSION['prevUsername']; 

    header('Content-Type: application/json'); 
    echo json_encode($output); 
+0

更新された質問でこのようなことを試みましたしかし何らかの理由でそれが動作していません... – user2896120

+0

また、$ _SESSION ['newUsername']はコードに何も設定されていないので、技術的に$ _SESSION ['prevUsername']は設定されませんか? – user2896120

+0

申し訳ありません、それはタイプミスでした。 '$ _POST ['username'];' – DarkBee

関連する問題