为什么这个SQL执行但不更新任何东西?

时间:2012-11-19 00:18:25

标签: php sql

由于某种原因,这个sql正在执行并输出: 成功将以下paypal按钮添加到此产品...但它没有更新。我对此表示感谢。

if(isset($_REQUEST['submitedform'])) {

    if ($_POST['paypal']) {

        $paypal=$_POST['paypal'];

        $id = $_GET['id'];

        $query = "UPDATE `video_info` SET paypal_button_html='".$paypal
        ."' WHERE id='".mysql_real_escape_string($id) ."'";

        mysql_query($query) or die(mysql_error());
        echo "successfully added the following paypal button to this product:
        <br /><br />
        {$paypal}";
    }
}

?>

<? 
if ($_GET['id']) { 
?>
<h1>Add PayPal Button In for this product:</h1>
<form action="add_paypal.php" method="POST"> 
    *Paypal button html: <br><textarea rows="2" cols="20" name="paypal"></textarea><br> 
    <input type="hidden" name="submitedform" value="true" /> 
    <input type="submit" value="Add paypal button in for this product"> 
</form>

<? 

} else {

    echo "You can not come to this page manually."; 
}

?>

3 个答案:

答案 0 :(得分:1)

一些问题:

  • 您在清理数据库输入方面并不一致
  • 您没有明确的验证规则
  • 您的表单未设置$_GET['id']字段(因此数据库提交始终失败)

修改后的代码:

<?php

// Init an Array to hold any error messages
$errors = array();

if( isset( $_REQUEST['submitedform'] ) ){

  // Validate the required fields
  if( !isset( $_POST['paypal'] ) || $_POST['paypal']=='' )
    $errors['paypal'] = 'No value for "paypal"';
  if( !isset( $_GET['id'] ) || !is_numeric( $_GET['id'] ) )
    $errors['id'] = 'No value for "id"';

  // If Validation was successful
  if( !$errors ){

    // Prepare the Variables for Database Usage
    $paypal = mysql_real_escape_string( $_POST['paypal'] );
    $id = (int) $_GET['id'];

    // Template and Complete the SQL Query
    $sqlTpl = 'UPDATE `video_info` SET paypal_button_html="%s" WHERE `id` = %s';
    $sqlStr = sprintf( $sqlTpl , $paypal , $id );

    // Submit the Query
    if( !mysql_query( $sqlStr ) ){

      // Something went wrong
      $errors[] = 'An error occured when submitting the data to the database';

    }else{

      // Submitted OK
      echo 'Successfully added the following paypal button to this product:'.$paypal;

    }

  }

}

// Check for any errors
if( $errors ){

  // Show errors to user
  echo 'The following errors occurred:';
  echo '<ul><li>'.implode( '</li><li>' , $errors ).'</li></ul>';

}

?>

<? 
if( isset( $_GET['id'] ) && is_int( $_GET['id'] ) ){
?>
<h1>Add PayPal Button In for this product:</h1>
<form action="add_paypal.php?id=<?php echo $_GET['id']; ?>" method="POST"> 
  *Paypal button html: <br><textarea rows="2" cols="20" name="paypal"></textarea><br> 
  <input type="hidden" name="submitedform" value="true" /> 
  <input type="submit" value="Add paypal button in for this product"> 
</form>

<? 

} else {

    echo "You can not come to this page manually."; 
}

?>

此代码......

  1. 在表单的操作网址
  2. 中包含id
  3. 检查提交
  4. 验证提交的值
  5. 创建数据库查询
  6. 提交查询
  7. 检查查询是否正常
  8. 已修改:将is_int()替换为is_numeric(),因为在RTFMing之后,我发现如果经过测试,只包含数字的字符串显然会返回falseis_int()

答案 1 :(得分:0)

<强>更新

请使用$_REQUEST$_GET$_POST但不是全部3个。

另外,为什么不mysql_real_escape_string变量$_POST['paypal']

答案 2 :(得分:0)

您混合了$_GET$_POST个变量。您应该使用GET或POST,但不能同时使用两者。如果这是发布请求,请将$_GET['id']更改为$_POST['id']

在这种情况下,由于where id = '',更新不会失败。这不会更新任何内容,因为没有id的空字符串。但它也不会失败,因为它是一个有效的更新声明。