2013-12-01 5 views
1

Я хотел бы запустить php-функцию из кода javascript, чтобы быть более конкретным, я получил кнопку, которая удаляет запись из базы данных. Функция, которая делает это с именемИспользование php-функции внутри кода javascript

delete_post($id) 

вот что я пытался:

<input type="submit" name="delete" value="delete" 
onClick="if(confirm('Are you sure?')) {<?php delete_post($row['id']);?>}"> 

Когда я нажимаю кнопку, нет окна предупреждения. Самое смешное, если я не вызываю функцию внутри php-кода, и я делаю что-то еще, например, эхо-предупреждение выдает, но php-код не выполняется.

Итак, как я могу это сделать? Как я могу запустить php-код внутри моего кода javascript onClick.

+4

PHP работает на сервере JS на клиенте. Вашему JS нужно поговорить с сервером, используя AJAX, чтобы он удалял запись (если вы не отправляете форму, которая затем загружает страницу снова). Пожалуйста, подумайте о безопасности - только идентификатор строки не является безопасным. – Popnoodles

+0

лучший способ избежать ошибок безопасности - это JS/ajax ... разделить ваш код и иметь отдельный файл JS и PHP ... если вам нужна помощь в этом, дайте мне знать ... будет вас кричать ответ – jcobhams

+0

@VyrenMedia Мне нужна помощь, никогда не использовалась ajax. –

ответ

2

Вы не можете. Предполагается, что PHP должен быть запущен до загрузки страницы, что дает ему имя Pre-Hypertext Protocol. Если вы хотите запустить PHP после загрузки страницы через JavaScript, лучшим подходом будет ссылка на новую страницу, на которой запущен PHP, а затем вернется обратно.

file1.php:

... 
<input type="submit" name="delete" value="delete" onClick="if(confirm('Are you sure?')) document.location.href='file2.php';"> 
... 

file2.php:

<!doctype html> 
<html> 
<head> 
<?php 
delete_post($row['id']); 
?> 
<meta http-equiv="refresh" content="0; url=file1.php" /> 
</head> 
<body> 
<p>You will be redirected soon; please wait. If you are not automatically redirected, <a href="file1.php">click here</a>.</p> 
</body> 
</html> 

Предполагая, что вы имели бы несколько идентификаторов, вы можете держать их все на один редирект страницы:

if(confirm('Are you sure?')) document.location='file2.php?id=2'; // file1.php 
delete_post($row[$_GET["id"]]); // file2.php 

Но не поместите PHP-код непосредственно в строку запроса или ваш сайт может быть восприимчивым к PHP injection

+1

Хороший ответ, но я должен указать, что PHP теперь означает «PHP: Hypertext Processor» (и используется для обозначения «Персональной домашней страницы» от имени PHP Tools). – Bobulous

+1

А как насчет AJAX? – 11684

+2

Кстати, существует большая защитная ошибка. Каждый сможет загрузить exmaple.com/fil2.php?id=x, и они могут изменить x на каждый идентификатор, который они хотят удалить. –

1

Вы не можете запустить PHP-код в Javascript, но вы можете использовать его через JS/Ajax. Для хорошей практики разделить ваши php и JS, например, создать страницу, которая принимает идентификатор и удаляет его строку (я предполагаю, что вы используете REST) ​​и вызывать ее через JS.

очиститель, эффективный и безопасный

1

Из Вашего вопроса, я хотел бы предложить вам дать JQuery попробовать.

ссылка на Jquery на головной секции вашей страницы,

здесь ваша функция JS

function deleteRow(id) 
{ 
var url='path/to/page.php'; 
$("#loading_text").html('Performing Action Please Wait...'); 
$.POST(url,{ row_id: id } ,function(data){ $("#loading_text").html(data) }); 
} 

Это должно сделать это для вас.

С его удаления, я использую $.post Позвольте мне знать, если вы обнаружите какие-либо другие вопросы

здесь ссылка на JQuery организованного Google CDN //ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js

Это, как ваша форма должна выглядеть

<form> 
<label for="Number"></label> 
<input type="text" name="some_name" id="some_id" value="foo bar"> 
<input type="submit" name="delete" value="delete" 
onClick="javascript: deleteRow(the_id_of_the_row);"> 
</form> 
<br> 
<div id="loader_text"></div> 

теперь ваша страница PHP, что делает удаление может выглядеть следующим образом

<?php 
$row_id = some_sanitisation_function($_POST['row_id']) //so as to clean and check user input 
delete_post($row_id); 
echo "Row deleted Successfully"; //success or failure message 
?> 

Это должно сделать это за вас.

+0

Где соединение с db? Запрос? Все? Lol –

+1

@ImriPersiado Я ожидал, что вы будете обрабатывать соединение с базой данных. Я не знаю, как настроены таблицы ur или как ваше соединение завершено ... из вашего вопроса я увидел php-функцию 'delete_post ($ id)' Я считаю, что у вас было все, что было включено в функцию .... все, что вы do - это файл, который имеет эту функцию, или вы еще не определили функцию 'delete_post ($ row_id)? .. если это так, дайте мне знать, и я расскажу вам, как это сделать. – jcobhams

+0

Я тебя, спасибо. –

Смежные вопросы