我确实有编程经验,但是对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”;这是我测试按钮是否正在测试,但没有任何打印。也许我错过了按钮代码本身的一些东西?此外,没有打印错误,我的编辑器(和我自己)错过了语法错误(如果是这样的话)。
在我关闭数据库之前,删除按钮的代码就在最后。
提前感谢您的帮助。
答案 0 :(得分:2)
您的问题是您的第一个if
阻止。
您正在检查是否存在已发布的变量author
title
type
year
isbn
。在您的删除代码中,发送的唯一变量是delete
和isbn
。因此,完全错过了第一个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')) {
...
}