У меня есть таблица HTML с именем и идентификатором сотрудника, которая извлекается из выбора SQL. Я хочу иметь возможность редактировать пароль сотрудника и обновлять его в своей БД. Функция php работает, но я хочу запустить ее из функции onclick в javascript. Мой код:
function update(id) {
var pass = document.getElementById('pass'+id).value;
var Cpass = document.getElementById('Cpass'+id).value;
if (pass != Cpass){
Notify("Passwords don't match. Please reneter passwords");
}
else{
//run php function $this->ea_user_settings->update_password(id, pass);
Notify("Password saved");
document.getElementById('update'+id).style.display = 'none';
}
}
function edit(id) {
if (document.getElementById('update'+id).style.display == 'inline'){
document.getElementById('update'+id).style.display = 'none';
}
else{
document.getElementById('update'+id).style.display = 'inline';
}
}
function Notify($msg) {
$("#notification").text("");
$("#notification").fadeIn(1000).append($msg);
$("#notification").fadeOut(5000);
}<div id = "notification" style = "display : none" value = ""></div>
<?php
$invoice = $this->ea_user_settings->get_employee_name_id();
?>
<table class = "table table-hover table-bordered table-striped" id = "EmployeeList">
<thead>
<tr>
<th style = "background-color:#BA9E5E; position:sticky; top: 0"><p style = "color: white;">Name</p></th>
<th style = "background-color:#BA9E5E; position:sticky; top: 0"><p style = "color: white;">ID</p></th>
<th style = "background-color:#BA9E5E; position:sticky; top: 0"><p style = "color: white;">Update Password</p></th>
</tr>
</thead>
<tbody>
<?php
foreach ($invoice as $report): ?>
<tr>
<td><?php echo $report->Name ?> </td>
<td><?php echo $report->ID ?> </td>
<td>
<div>
<div id = "<?php echo 'update'.$report->ID;?>" style = "display:none">
<input type = "text" id = "<?php echo 'pass'.$report->ID;?>" name = "pass" placeholder = "Password">
<input type = "text" id = "<?php echo 'Cpass'.$report->ID;?>" name = "Cpass" placeholder = "Confirm Password">
<button id='updateBtn' type = "button" onClick='update("<?php echo $report->ID;?>")'>Save</button>
</div>
<div id = "<?php echo 'edit'.$report->ID;?>" style = "display:inline; text-align:right; padding:10px" align = "right">
<button id='editBtn' type = "button" onClick='edit("<?php echo $report->ID;?>")'>Edit</button>
</div>
</div>
</td>
</tr>
<?php endforeach;?>
</tbody>
</table>Я хочу запустить свою функцию обновления php ($ this-> ea_user_settings-> update_password (id, pass);), когда я нажимаю кнопку сохранения.
Я использую codeignitor. Функция php - это папки моделей, но модель загружается на эту страницу. Функция php ($ this-> ea_user_settings-> update_password (id, pass);) будет выполняться из того же файла
вам может потребоваться поместить функцию php ($ this-> ea_user_settings-> update_password (id, pass);) в другой файл php и вызвать ее из javascript с помощью ajax и опубликовать данные
Функция update_password уже находится в другом файле models / app_users_model.php. Не могли бы вы подробнее рассказать, что делать?
Пожалуйста, пройдите по этой ссылке formget.com/submit-form-using-ajax-php-and-jquery
Возможный дубликат Как я могу вызывать функции PHP с помощью JavaScript?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не можете напрямую вызвать функцию PHP из своей функции JavaScript. PHP работает на сервере, а JS - на клиенте.
Однако вы можете отправить запрос на получение или публикацию на свой сервер из функции javascript и выполнить свою функцию php на основе полученных параметров.
[обновление - добавление примера]
Считайте, что ваша php-страница содержит следующую функцию:
<?php
function writeMsg($param) {
echo "Hello ".$param;
}
writeMsg($_GET["name"]);
?>
//Here the parameter 'name' is retrieved from the http request and passed to the function.
Например, если ссылка выглядит как // тестовая php-страница? name = stackoverflow, отображаемая HTML-страница будет содержать Привет, stackoverflow
Из вашего клиентского кода вы не можете вызвать функцию writeMsg. Вам нужно будет отправить действительный HTTP-запрос на сервер с параметром name. Этого можно добиться, просто разместив тег привязки.
<a href = "/test-php-page?name=stackoverflow'>link</a>
или по методу действия формы
<form action = "/test-php-page" method = "get">
<input type = "text" name = "name">
<input type = "submit" value = "Submit">
</form>
или с помощью вызовов ajax с использованием JS.
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "/test-php-page?name=stackoverflow", true);
xhttp.send();
Вы также можете использовать jQuery или любую другую библиотеку для простоты использования вызовов ajax.
Обратитесь к следующей ссылке w3schools для лучшего понимания: https://www.w3schools.com/php/php_ajax_intro.asp
Спасибо. Я использовал предложенный вами метод формы, и он работает, но есть ли способ скрыть пароль от URL-адреса (....? Pass = xxx & Cpass = xxxx & id = xxxx). Пароль не должен быть виден всем вокруг.
Для этого вы можете использовать POST вместо GET. В приведенном выше примере вы можете изменить $ _GET на $ _POST, а в вызове ajax вы можете указать xhttp.open ("POST", "/ link"). В методе формы просто замените method = "get" на method = "post". POST отправляет данные в теле HTTP, тогда как GET отправляет их в URL-адресе.
Спасибо. Работал как шарм.
Настоятельно рекомендуется использовать механизм шифрования для отправки / хранения ваших паролей, а также запускать ваш веб-сервер на https.
Для этого вам нужно использовать ajax.
$.ajax({
url: '/change-password.php',
data: {'user_id':user_id, 'pass': pass, 'new_pass': new_pass},
type: 'POST',
success: function (result)
{
//Do something
}
});
Вы можете сослаться на этот пример кода :)
Где ваша функция обновления php? в другом файле?