我是一个JS/PHP新手,我不知道如何解决以下问题;
首先是代码
PHP代码:
class User {
private $mysqli;
function __construct($connection) {
$this -> mysqli = $connection;
}
public function updateUsername($oldusername, $newusername) {
$statement = $this -> mysqli -> prepare('UPDATE user SET username = ? WHERE username = ?');
$statement -> bind_param('si', $oldusername, $newusername);
$result = $statement -> execute();
if (!$this -> mysqli -> commit()) {
return false; // maybe beacuse an username already exists..
} return true;
}
Javascript 代码:
var oldusername;
$(document).on("click", "span.editusername", function () {
var txt = $(".username").text();
oldusername = txt;
$(".username").replaceWith("<input class='username' style=\"border: 1px solid rgb(231, 231, 231); padding: 3px 5px; color: rgb(81, 81, 81); \"/>");
$(".username").val(txt);
$(this).text('editing..');
$(this).css('text-decoration', 'none');
$(".username").focusToEnd();
});
$(document).on("blur", "input.username", function () {
var newuser = $(this).val();
$(this).replaceWith("<label class='username'></label>");
$(".username").text(newuser);
// Here I want to call the PHP updateUsername function with the two arguments: oldusername, newuser: booleanResult = updateUsername(oldusername, newusername);
$('.editusername').text('edit');
$('.editusername').css('text-decoration', 'underline');
});
HTML 代码草稿:
<h1 id="user-displayname"><label class="username"><?php
if($_SESSION["s_username"]) { echo $_SESSION["s_username"]; } ?></label></h1>
<div class="sub-header-links">
<span class="editusername">edit</span>
<a><?php
if($_SESSION["s_user_id"]) {
?>
<a href="logout.php" title="Logout">logout
<?php } ?></a>
</div>
如下图所示,如果我点击“编辑”标签,用户名标签将变成一个可编辑的文本区域。更改后,通过 PHP 函数 (updateUsername) 更新标签和数据库。
textarea 和 label 的逻辑由 JS 代码处理,而对 DB 的调用应该由 PHP 代码执行,但我不知道如何从 Javascript 文件调用 PHP 函数,我也不会甚至知道这是不是最好的方法,或者至少是明智的方法。
谢谢
最佳答案
看看http://api.jquery.com/jquery.ajax/ AJAX 正是为了满足您的要求而设计的 - 允许客户端运行服务器端代码。
此外,您的 updateUsername 方法绑定(bind)了一个字符串和一个整数,但看起来您传递的是两个字符串。
$statement -> bind_param('si', $oldusername, $newusername);
应该是……
$statement -> bind_param('ss', $oldusername, $newusername);
关于javascript - 从 Javascript 文件调用 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438203/