-1

出于某种原因,此 sql 正在执行并输出:已成功将以下贝宝按钮添加到此产品...但它没有更新。我很感激这方面的任何帮助。

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."; 
}

?>
4

3 回答 3

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. id在表单的操作 URL 中包含
  2. 检查提交
  3. 验证提交的值
  4. 创建数据库查询
  5. 提交查询
  6. 检查查询是否正常

修正:替换is_int()is_numeric()as,在 RTFMing 之后,我发现一个仅由数字组成的字符串,false如果使用is_int().

于 2012-11-19T01:12:18.487 回答
0

更新

请使用$_REQUESTOR $_GETOR$_POST但不要使用全部 3 个。

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

于 2012-11-19T00:20:42.020 回答
0

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

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

于 2012-11-19T00:21:14.870 回答