、これは、要求が行われた後、何もサーバのメモリに格納されていないことを意味します。言い換えれば、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);
UPDATEクエリですか? –
これらの要求は、完全に異なるスクリプト実行で処理されます。異なるラン間で値が交換されることは、単に期待できません。そのためにセッションを使用する必要があります。詳細については、そのドキュメントを参照してください。 – arkascha
@arkaschaセッション変数を使用する場合でも、私は同じ結果を得ます。私はセッションと通常の両方の変数を使用してみましたが、両方とも正常に動作していないようです。 – user2896120