2013-04-01 3 views
1

Для небольшого «проекта интернет-магазина» я создаю таблицу с функцией PHP и echo «...». В таблице отображаются некоторые значения, а в последних ячейках должна быть кнопка, которая позволяет пользователю удалить соответствующую строку (или лучше сказать, купить). Данные хранятся в базе данных и считываются, пока страница загружается и отображается в таблице.PHP echo button onclick function

Я использую «идентификатор покупки», чтобы выяснить, какие строки нужно удалить, и он отлично работает, если я просто реализую эту функцию. Проблема в том, что я не могу заставить функцию работать как событие onclick для кнопки.

Итак, некоторый код:

function delete_purchase($purchase_id){ 
mysql_query("DELETE FROM purchase WHERE purch_id = '$purchase_id'");}; 

Это функция PHP, которая удаляет строки, достаточно легко.

$result = mysql_query("SELECT purchase.purch_id, item.name, purchase.amount, purchase.purch_date, delivery.meaning, item.weight FROM purchase, item, delivery WHERE purchase.cust_id='$cust_id' AND delivery.del_id = purchase.delivered AND purchase.item_id = item.item_id"); 

while($row = mysql_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['amount'] . "</td>"; 
    echo "<td>" . $row['weight'] * $row['amount'] . "</td>"; 
    echo "<td>" . $row['purch_date'] . "</td>"; 
    echo "<td>" . $row['meaning'] . "</td>"; 
    echo "<td><button onclick=\"delete_purchase('" . $row['purch_id'] . "')\">Kill</button></td>"; 
    echo "</tr>"; 
    } 

И это часть, которая, похоже, не работает. Я получаю переменную и некоторые другие значения из базы данных и вставляю их в свою таблицу, пока есть значения. Все отображается, даже кнопки; но щелчок по ним ничего не делает.

Исходный код сайта кажется прекрасным:

<td><button onclick="delete_purchase('138')">Kill</button></td> 

Надежда все ясно, и вы, ребята, есть какие-то идеи, что-то не так. Если вам нужно знать дополнительные материалы, просто спросите, и я посмотрю, что я могу сделать.

+0

PHP является серверным. JavaScript запущен в браузере. – Mooseman

ответ

4
onclick="delete_purchase('138')" 

вызывает функцию Javascript под названием delete_purchase, которая, кажется, не существует в вашем коде. У вас есть только функция PHP с этим именем.

Поскольку весь PHP выполняется на стороне сервера, HTML будет построен задолго до того, как клиент когда-либо увидит код, и поэтому вы никогда не сможете вызвать функцию PHP delete_purchase с клиентской стороны.

Только два способа обойти это: - Создать функцию JS, которая затем вызывает файл PHP с использованием AJAX. - Не вызывайте функцию JS onclick и не заставляйте кнопку регулярной формы отправлять, чтобы затем вы поймали на стороне сервера, чтобы удалить покупку. Это, однако, будет включать полное обновление страницы.

+0

Большое спасибо! У меня возникло соблазн использовать JS в первую очередь, но подумал, что php должен работать так же хорошо ... похоже, это не так. +1 для описания решения в полном объеме. – Phil

0

Ваша функция delete_purchase() определена на стороне сервера, которая недоступна на стороне клиента. Вам необходимо отправить запрос на сервер и отправить идентификатор, например:

?action=delete&id=1 

Затем вы можете проверить его на стороне сервера и вызвать функцию

<?php 
if(isset($_GET['action']) && $_GET['action'] == 'delete'){ 
//do some staff 
} 
?> 
+0

Подождите, подождите ... Звучит неплохо, но я не понимаю вашу первую строку кода. Я думал, чтобы ПОЛУЧИТЬ некоторые ценности, мне нужна форма? /edit А, хорошо, я полагаю, что это часть URL-адреса после формы GET? – Phil

+0

да что-то вроде этого – 2013-04-02 08:04:30

0

вы пытаетесь вызвать PHP-функцию непосредственно из HTML (из браузера)

это невозможно!

вы можете вызвать его, используя 2 способа:

1) AJAX-вызов PHP-скрипт, который удалит покупку

2) перенаправлять браузер на PHP-скрипт, который будет удалять покупки, а затем перенаправляет вы обратно

+0

Пойду с переадресацией. Никогда ранее не использовался AJAX и все еще учился правильно использовать JS ... Спасибо, тем не менее, за подсказку! – Phil