2013-05-19 201 views
0

我遇到了一个问题,我试图从Mysql表中删除一行。这是我写的代码:删除行留下空单元格?

$sql = "DELETE FROM members WHERE name='$_POST[delmember]'"; 
$retval = mysql_query($sql); 
if(!$retval) { 
    die("Couldn't delete data: " . mysql_error()); 
} 

代码打印我的数据库:

$sql = 'SELECT name FROM members'; 
$retval = mysql_query($sql, $conn); 
if(!$retval) { 
     die("Couldn't get data: " . mysql_error()); 
    } 
while($row = mysql_fetch_array($retval, MYSQL_NUM)) { 
    if($col == $cols) { 
      $col = 0; 
      echo '</tr><tr>'; 
     } 
     echo '<td align="center"><a class="stats" href="members.html?stats='.$row[0].'">' . $row[0] . '</a></td>'; 
     $col++; 
} 

这实际上“清空”行,但留下当我打印我的数据,实际上显示了一个空单元格。我必须然后去phpMyAdmin手动删除空的空间。我不明白为什么会这样做。

我还是个初学者,程序设计真的只是我的一个爱好,但如果有人会给我提供线索并指向正确的方向,我将不胜感激。

非常感谢!

+1

如果你运行'SELECT * FROM成员会发生什么情况,其中name = '{$ _ POST [' delmember ']}''并获得关联数组** **后,你已经删除的行? –

+1

**不要**从'$ _POST'将用户变量注入查询字符串。你必须使用[适当的SQL转义方法](http://bobby-tables.com/php)转义任何和所有的值。您还将使用在未来版本的PHP中将被删除的不推荐使用的'mysql_query'接口。如果你想让你的代码继续工作,你需要切换到支持的东西,如[PDO](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps- PDO换数据库访问/)。如果你刚刚开始使用PHP,[尝试遵循最佳实践](http://biasedphp.com/php-commandments)。 – tadman

+0

我知道我做错了很多事情,我会研究一下你们先生们的建议,以使我的代码合适和清洁。然而,我仍然有我的下面的代码(目前'工作',尚未弃用)的问题。另外为什么你建议不在我的查询字符串中使用$ _POST?是关于SQL注入攻击吗?如果是这样,你建议使用什么? –

回答

1

为了更好地学习MySQL语法,请启动控制台到MySQL会话并直接输入一些命令。您的语法看起来正确,但我们不知道您使用的数据库规则或您正在查看的视图。

很难判断您是否看到phpMyAdmin的工件,或者这是数据库某些其他方面的后果,或者是您用来“打印”数据的代码的结果。

+0

感谢您的及时回复。有关更多信息,我只使用一个名为name的字段。我没有附加任何ID,所以我会假设通过删除这个名称字段,整个行将被删除。我将添加我用于在原始帖子上打印数据的代码。 –

+0

@JonathanLachapelle我们仍然无法看到用来打印数据的代码,'(代码来组织和打印我的数组)'实际上没有帮助。 –

+0

@Jake Ball我只是把整个事情,但这真的不是这里的问题。我的数组格式工作起来非常好,问题在于从我的数据库中删除条目,当我尝试这样做时,它不会删除字段,只会清空数据并留下空行,然后由我的打印显示。 –

1

尝试这样。

$sql = "DELETE FROM members WHERE name='" . mysql_real_escape_string($_POST["delmember"]) . "'"; 

顺便说一句,如果name场不是唯一的话,就不是一个好主意按名称删除用户,你应该使用id字段作为主键,用ID来进行操作。

另一件事是使用mysqli或pdo代替mysql。

read the warning

+1

将** mysql_real_escape_string **添加到被访问的变量在这件事上没有任何区别。 –

+0

我没有添加转义功能,他使用发布数据错误,我实际上纠正了它。 – rcpayan

+0

事实上@rcpayan OP的工作原理,即使它确实会发出警告。 –