Delete query won't run

时间:2013-07-19 作者:Ann

这是设置:

<form method="post" action="">
    <input type="hidden" name="delete_app_id" id="delete_app_id" value=\'<?php 
        echo $adoptee->app_id; ?>\' />
    <input type="submit" name="delete" value="delete" />
</form>
<?php

if ( isset( $_POST[\'delete\'] ) ) {
    $delete_id=$_POST[\'delete_app_id\'];
    $adoptees_delete=$wpdb->query( "DELETE 
        FROM $wpdb->rc_vol_adopt_apps 
        WHERE app_id =\'$delete_id\'" );
    if ( $adoptees_delete ) {
        echo \'Record Deleted\';
    } else{
        echo \'Have a ham sandwich - cause this FAILED\';
    }
}
它不会跑的!它正在收集delete_app_id 以及delete 从提交后开始,但之后什么都没有发生。好像看不到if isset 陈述我错过了什么?

2 个回复
SO网友:s_ha_dum

我看不出有什么原因$_POST[\'delete\'] 如果不涉及页面重定向,则不应设置。我无法从您的代码中判断情况是否如此,但表面上看起来并非如此。我确实看到了其他潜在的问题。

您正在设置表单action 到空字符串。虽然这有时确实有效,但有时也会造成麻烦。明确设置。我相信一个空的action 也是无效的,至少在HTML 5和HTML 4中也是如此。

取决于您可能需要的上下文global $wpdb; 在使用之前$wpdb. 只包含该部分比假设它可用更安全。

  • If app_id is a numeric column type you _might be causing yourself trouble by quoting $delete_id.POST 不安全。至少在使用$wpdb->prepare:

    $wpdb->query($wpdb->prepare("DELETE FROM $wpdb->rc_vol_adopt_apps WHERE app_id = %d",$delete_id));
    
    也就是说,我通常run my own checks to make sure the data is what it should be.

  • $wpdb->query 可以同时返回0, 没有行受到影响,并且false,查询失败。PHP将解释0false 所以你应该用if (false !== $adoptees_delete) 而不是简单的,潜在的notice 投掷,检查你的身体。

    处理POST 然后在表格之前unset 这个POST 数据,或者更好的是,将请求重定向回自身。否则,您可能会在多次提交表单时遇到问题。

  • SO网友:user100879

    首先将$wpdb声明为全局。其次,需要使用print\\u r()在$wpdb中调试查询。还可以尝试将该查询复制到mysql中直接运行。

    结束