У меня проблема с сообщением об успехе или сообщением об ошибке. Мой код ниже, но проблема в том, что, несмотря ни на что, сообщение об успехе всегда показывает — даже до того, как запрос происходит. Если я удаляю сообщение об успехе if
команда, то он не делает то, что должен делать.
isset($_POST['delete']);
$systemid = $_POST['systemid'];
$clientiddel = $_POST['clientiddel'];
$querydel = "DELETE FROM ... WHERE customer = '" . $clientiddel . " ' AND system_id = '" . $systemid . "'";
if(mysql_query($querydel))
{
echo 'SUCCESS';
}
else
{
echo 'FAILED' .mysql_error();
}
Моя форма
<form method='post' action='" . $_PHP_SELF . "'>
<input name='systemid' type='hidden' id='systemid' value='" . $row['system_id'] . "'><input name='clientiddel' type='hidden' id='clientiddel' value='" . $row['customer'] . "'><input name='delete' type='image' src='images/delete.gif' id='delete' alt='Delete' onclick='return confirm_delete()'>
</form>
Функция onclick
<script type='text/javascript'>
function confirm_delete() {
return confirm('Are you sure you want to delete \'".$row['system_id']."\' from this account? ');
}
</script>
РЕДАКТИРОВАТЬ:
Проблема решена — добавление дополнительного скрытого поля в форму с именем «delete» заставляет его работать так, как должно. Кроме того, это последний источник для этой операции:
if(isset($_POST['delete'])){
$systemid = $_POST['systemid'];
$clientiddel = $_POST['clientiddel'];
$querydel = "DELETE FROM .... WHERE system_customer = '".$clientiddel." ' AND system_id = '".$systemid."'";
if(mysql_query($querydel))
{
echo 'SUCCESS';
}
else
{
echo 'FAILED' .mysql_error();
}
}
<?php
if(isset($_POST['delete'])){
$systemid = $_POST['systemid'];
$clientiddel = $_POST['clientiddel'];
$querydel = "DELETE FROM ... WHERE customer = '" . $clientid . " ' AND system_id = '" . $systemid . "'";
if(mysql_query($querydel))
{
echo 'SUCCESS';
}
else
{
echo 'FAILED' .mysql_error();
}
?>
Попробуйте, как это, и дайте мне знать, если это работает. Если не работает, включите error_reporting (). Поместите эти две строки в начале страницы
ini_set('display_errors',1);
error_reporting(E_ALL);
РЕДАКТИРОВАТЬ:
+ Изменить $_PHP_SELF to $_SERVER['PHP_SELF']
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" >
Начнем с формы. $_PHP_SELF
не существует. То, что вы хотели использовать, было $_SERVER['PHP_SELF']
, Лучше не пытаться разобраться с этой переменной и оставить действие пустым:
<form method="post" action="">
Ваш PHP всегда будет работать …. Вам нужно сделать что-то вроде этого:
if(isset($_POST['delete'])) {
// run the PHP here.
}
mysql_*
библиотека устарела и установлена для удаления в будущем. Пожалуйста, посмотрите на использование более надежных библиотек, таких как PDO
или же MySQLi
, Это совсем не сложно. Вот простой пример PDO, чтобы добиться того, что вы пытаетесь.
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = "DELETE FROM table WHERE customer = :client_id AND system_id = :system_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':client_id', $_POST['clientiddel'], PDO::PARAM_INT);
$stmt->bindParam(':system_id', $_POST['systemid'], PDO::PARAM_INT);
$stmt->execute();
Подробнее о PHP PDO читайте здесь
Вам необходимо предоставить код для confirm_delete()
что присутствует в вашем delete
кнопки onClick
приписывать.
Ваша проблема связана с переменной $ clientid, вы объявили ее как $ clientiddel
Попробуй это:
<?php
if(isset($_POST['delete'])){
$systemid = $_POST['systemid'];
$clientid = $_POST['clientiddel'];
$strSQL = "DELETE FROM ... WHERE customer = '" . $clientid . " ' AND system_id = '" . $systemid . "'";
$queryDel = mysql_query($strSQL);
if(!$queryDel){
echo "FAILED:" . mysql_error();
} else {
echo "SUCCESS";
}
}
?>
РЕДАКТИРОВАТЬ:
Они правы, вы также сделали ошибку в своем теге формы, используйте это:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">