从MySQL删除PHP问题

时间:2012-07-01 00:56:49

标签: php

我确实有编程经验,但是对php很新。我在本教程中做的一个例子确实存在问题。我看了几百万次,谷歌搜索,等等。我不知道为什么我的代码不起作用。

目的是基本上只使用添加记录和删除记​​录按钮在php中测试sql中的插入和删除。 “添加记录”按钮工作正常,但删除除了重新加载页面之外不会做任何事情。继承人代码......

<?php // sqltest.php

require_once 'login.php';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database, $db_server)
     or die("Unable to select database: " . mysql_error());

if (isset($_POST['author'])   &&
    isset($_POST['title'])    &&
    isset($_POST['type'])     &&
    isset($_POST['year'])      &&
    isset($_POST['isbn']))
{
    $author = get_post('author');
    $title = get_post('title');
    $type = get_post('type');
    $year = get_post('year');
    $isbn = get_post('isbn');

    if (isset($_POST['delete']) && $isbn != "")
    {
        echo "worked!!!!!!!!!!!!!!"; 
        $query = "DELETE FROM classics WHERE isbn='$isbn'";
        $result = mysql_query($query) or die(mysql_error());
        if(mysql_affected_rows($result) > 0) echo 'user deleted';

        //if (!mysql_query($query, $db_server))
        //echo "DELETE failed: $query" . mysql_error();
    }
    else
    {
        echo "nooooooooooooooooooo";
        $query = "INSERT INTO classics VALUES" .
        "('$author', '$title', '$type', '$year', '$isbn')";
        if (!mysql_query($query, $db_server)) 
        {
            echo "INSERT failed: $query" . mysql_error();
        }
    }
}

echo <<<_END
<form action="sqltest.php" method="post"><pre>
Author <input type="text" name="author" />
Title  <input type="text" name="title" />
Type   <input type="text" name="type" />
Year   <input type="text" name="year" />
ISBN   <input type="text" name="isbn" />
<input type='submit' value='ADD RECORD' />
</pre></form>
_END;



$query = "SELECT * FROM classics";

$result = mysql_query($query);

if (!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

for ($j = 0 ; $j < $rows ; ++$j)
{
        $row = mysql_fetch_row($result);

echo <<<_END
<pre>
Author $row[0]
Title $row[1]
Type $row[2]
Year $row[3]
ISBN $row[4]
<form action="sqltest.php" method="post">
<input type="hidden" name="delete" value="yes" />
<input type="hidden" name='isbn' value="$row[4]" />
<input type='submit' value='DELETE RECORD' />
</form>
</pre>
_END;
}

mysql_close($db_server);

function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}

?>

我已多次查看过,仍然不知道为什么这不起作用。这个按钮不起作用的是for循环吗?注意,你会看到echo“working !!!”;并在其他回声“noooooooo”;这是我测试按钮是否正在测试,但没有任何打印。也许我错过了按钮代码本身的一些东西?此外,没有打印错误,我的编辑器(和我自己)错过了语法错误(如果是这样的话)。

在我关闭数据库之前,删除按钮的代码就在最后。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您的问题是您的第一个if阻止。

您正在检查是否存在已发布的变量author title type year isbn。在您的删除代码中,发送的唯一变量是deleteisbn。因此,完全错过了第一个if块(包括删除代码)。

您需要将第一个if修改为if(isset($_POST)) { // a form has been posted。然后它应该工作。

另一种方法:

if(isset($_POST['delete']) && isset($_POST['isbn']) && !empty($_POST['isbn'])){
    //delete code here
}

if(isset($_POST['author']) && isset($_POST['title']) && isset....){
    // insert code here
}

编辑:改写代码:

<?php // sqltest.php

// I don't know what's in here, so I've left it
require_once 'login.php';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());

mysql_select_db($db_database, $db_server)
     or die("Unable to select database: " . mysql_error());

if (isset($_POST))
{

    if (isset($_POST['delete']) && !empty($_POST['isbn']))
    {
        echo "Deleting"; 
        $query = "DELETE FROM classics WHERE isbn='".mysql_real_escape_string($_POST['isbn'])."'";
        $result = mysql_query($query) or die(mysql_error());
        if(mysql_affected_rows($result) > 0) echo 'user deleted';
    }
    else
    {
        echo "Inserting";
        $query = "INSERT INTO classics VALUES ('".mysql_real_escape_string($_POST['author'])."', '".mysql_real_escape_string($_POST['title'])."', '".mysql_real_escape_string($_POST['type'])."', '".mysql_real_escape_string($_POST['year'])."', '".mysql_real_escape_string($_POST['isbn'])."')";
        if (!mysql_query($query)) 
        {
            echo "INSERT failed: $query" . mysql_error();
        }
    }
}

// you don't need echo's here... just html
?>

<form action="sqltest.php" method="post">
    <pre>
        Author <input type="text" name="author" />
        Title  <input type="text" name="title" />
        Type   <input type="text" name="type" />
        Year   <input type="text" name="year" />
        ISBN   <input type="text" name="isbn" />
        <input type='submit' value='ADD RECORD' />
    </pre>
</form>

<?php

$query = "SELECT * FROM classics";

$result = mysql_query($query);

if (!$result) die ("Database access failed: " . mysql_error());

// a better way to do this:
while($row = mysql_fetch_array($result)){
?>

<pre>
    Author <?php echo $row[0]; ?>
    Title <?php echo $row[1]; ?>
    Type <?php echo $row[2]; ?>
    Year <?php echo $row[3]; ?>
    ISBN <?php echo $row[4]; ?>
    <form action="sqltest.php" method="post">
        <input type="hidden" name="delete" value="yes" />
        <input type="hidden" name='isbn' value="<?php echo $row[4]; ?>" />
        <input type='submit' value='DELETE RECORD' />
    </form>
</pre>

<?php
}

mysql_close($db_server);

?>

答案 1 :(得分:0)

验证您在表单中使用的方法。确保它是这样的POST:

表格action="yourpage.php" method="POST"

并在上面的代码中,替换以下内容:

$author = get_post('author');
    $title = get_post('title');
    $type = get_post('type');
    $year = get_post('year');
    $isbn = get_post('isbn');

$author = $_POST['author'];
$title = $_POST['title'];
$type = $_POST['type'];
$year = $_POST['year'];
$isbn = $_POST['isbn'];

最后,您无需再次检查$isbn是否为空,就像您在isset()方法中所做的那样。因此,请删除以下if中的$isbn!=""

if (isset($_POST['delete']) && $isbn != "")
    {
}

变为:

if (isset($_POST['delete']))
    {
}

由于您正在测试,因此检查用户是否单击了删除按钮的重要性较低。因此,您也可以将其删除一段时间并稍后添加,因为您确定在单击删除按钮后可以访问该代码。

答案 2 :(得分:-2)

您没有名为delete的表单字段,因此无法删除代码路径。

我猜你是否尝试使用提交按钮的值来决定该怎么做?在这种情况下,您还在提交按钮上缺少name属性 - 如果没有,则无法使用表单提交任何值。你可能想要:

<input type="submit" name="submit" value="DELETE RECORD" />

然后有

if (isset($_POST['submit']) && ($_POST['submit'] == 'DELETE RECORD')) {
   ...
}