如何删除HTML表的回显?

时间:2015-06-22 21:33:00

标签: php mysqli

我有一个HTML表的echo的以下代码。在表中是一个删除按钮。我想在用户点击删除按钮时从数据库中删除用户的输入。在数据库中,来自同一用户的更多行具有不同的值,并且这些行也显示在此代码中。如何从一个输出(用户命中删除的输出)中删除特定输入?我整天都在这里,并尝试了很多东西,但找不到办法。我只是个初学者..

   $sql = "SELECT publicaties.pub_Id,publicaties.userid,publicaties.titel,publicaties.type,publicaties.linkwerk,publicaties.linkuitgever,publicaties.beschikbaar,publicaties.hierbewerkt, users.username,users.userid FROM publicaties, users  WHERE publicaties.userid=users.userid AND publicaties.userid='$user' ORDER BY pub_Id DESC LIMIT $offset, $rec_limit";
        $retval = mysql_query( $sql, $conn );
        if(! $retval )
        {
      die('Could not get data: ' . mysql_error());
    }
     if ($row["hierbwerkt"] ==1)
        echo $row["hierbewerkt"];


         else 
    {
      echo" ";

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC))
{

       echo "
         <table width='415' border='0' class='tablepublicaties'>
            <tr>
              <td rowspan='2' bgcolor='#1E1E1E'>&nbsp;</td>
              <td rowspan='2' bgcolor='#1E1E1E'><span class='user-imagelarge'><img src='Images/nopicture.png' alt='nopicture' width='273' height='381' class='user-imagelarge'></span></td>
              <td valign='middle' nowrap bgcolor='#1E1E1E'><span class='linkkleur'>".$row["hierbewerkt"]."</td>
              <td valign='middle' bgcolor='#1E1E1E'>".$row["username"]."</td>
            </tr>
            <tr>
              <td valign='bottom' bgcolor='#1E1E1E'>Titel</td>
              <td valign='middle' bgcolor='#1E1E1E'><span class='sterrenkleur'>".$row["titel"]."</span></td>
            </tr>
            <tr>
              <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td nowrap bgcolor='#1e1e1e'>&nbsp;</td>
              <td bgcolor='#1E1E1E'>Type</td>
              <td bgcolor='#1E1E1E'>".$row["type"]."</td>
            </tr>
            <tr>
              <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td bgcolor='#1E1E1E'>Publicatie</td>
              <td bgcolor='#1E1E1E'><a href='$row[linkwerk]'> ".$row["linkwerk"]."</a></td>
            </tr>
            <tr>
              <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td bgcolor='#1E1E1E'>Uitgever</td>
              <td bgcolor='#1E1E1E'><a href='$row[linkuitgever]'> ".$row["linkuitgever"]."</a></td>
            </tr>
            <tr>
              <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td nowrap bgcolor='#1E1E1E'>&nbsp;</td>
              <td bgcolor='#1E1E1E'>Beschikbaar</td>
              <td bgcolor='#1E1E1E'>".$row["beschikbaar"]."</td>
            </tr>
            <tr>
            <td bgcolor='#1E1E1E'>&nbsp;</td>
              <td bgcolor='#1E1E1E'><input type='image' class='backgroundgreyfotoos' src='Images/Icons/crossorangebutton.png' alt='Submit Form' width='15' height='15' border='0'/ ></td>
              <td bgcolor='#1E1E1E'><img src='Images/lijntransparant.png' width='70' height='1' alt='lijn'></td>
              <td bgcolor='#1E1E1E'><img src='Images/lijntransparant.png' width='224' height='1' alt='lijn'></td>
            </tr>
          </table>

            <br>";
}
    }

    mysql_close($conn);

2 个答案:

答案 0 :(得分:1)

您的PHP脚本必须处理此删除。例如,您可以定义名为 action 的GET参数,该参数定义应该执行的操作:

$action = ( isset( $_GET['do'] ? $_GET['do'] : 'index' );
if( $action == 'index') {
    // Print your Table
}elseif( $action == 'delete' ) {
    // Send a SQL-Query to the database-server like 'DELETE FROM TABLE WHERE
    // DELETE FROM publicaties WHERE publicaties.pub_Id = $pub_id [...]
}

对于删除,您可以链接到 yourscript.php?do = delete&amp; pubId = 123 ,以便您通过 pubId 传递的条目(可通过< strong> $ _ GET ['pubId'] )被删除。高级版本将使用ajax。它更加用户友好,您可以安全地重新获得资源,因为没有必要重新加载整个页面。你继续在桌面上,在后台向 yourscript.php?do = delete&amp; pubId = 123 发出ajax请求。当它成功时,您可以通过操作DOM来删除表行。像jQuery这样的库会让那些想法变得更容易。

但作为初学者,最初跳过ajax-part是一个好主意,就像我先解释的简单方法一样。这更容易,您不需要任何Ajax,这是ajax所必需的。

作为第二个提示,您应该获得有关SQL注入的信息。构建动态SQL-Querys,如

$query = 'DELETE FROM table WHERE id = ' . $_GET['id'];

非常不安全,因为每个访问者都可以通过传递有效的SQL作为参数来操作Query。 HTTP-POST甚至不是更好,它只是有点困难,因为POST-Data是在HTTP-Body中发送的。您至少应该通过PreferenceManager documentation过滤来自外部的输入。数值也可以像(int)$_GET['id']一样投放。但最好的方法是使用escaping it,因为通过手动转义,您可能会忘记正确转义,这可能会导致安全风险。通过使用预准备语句,您不会直接在查询字符串中插入来自GET或POST的变量数据。相反,您使用的占位符将在以后被替换。用这些值替换是由php自动完成的,这样你就不会忘记转义了。

答案 1 :(得分:-1)

<?php

// is the page requested in the post method?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // if we have received an x coordinate from the delete-button then it is pressed.
    if(isset($_POST['delete_x']))
    {
        // make your delete query here
        echo 'Now its time to delete record with id=' . $_POST['id'];

        // if everything is working i recommand that you reload the page in the normal GET method.
        // Then you need to uncomment the two following lines

        //header('Location: ' . $_SERVER['SCRIPT_NAME']);
        //exit;
    }

    // dump the $_POST array. Just for learning or debugging
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
}

// dummy variabele, comes normal from your database
$row['id'] = 12;

?>
<form action="" method="post">
    <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
    <input type="image" src="cross.png" name="delete">
</form>

需要为表格中的每一行呈现整个HTML表单(最后4行)!