2017-03-05 64 views
1

我是新来的PHP和MySQL,我目前正在尝试构建一个小型网站作为练习。我有这个小错误,我想在我的数据库中编辑付款,代码运行,它说它是成功的,但它不会在表中更新。我尝试了很多不同的方式,例如在数据库中创建视图,但仍然无法使用。 php页面应该从上一页获得user_id,这个效果很好,但它仍然不会更新表格。SQL查询不更新phpmyadmin中的数据库

这里是我的购物篮表的SQL:

CREATE TABLE IF NOT EXISTS `basket` (


`product_id` int(8) NOT NULL, 
    `user_id` tinyint(4) NOT NULL, 
    `quantity` mediumint(8) NOT NULL, 
    `size` varchar(150) NOT NULL, 
    `payment` varchar(6) NOT NULL default 'No', 
    `checkout` varchar(3) NOT NULL default 'No' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `basket` 
-- 

INSERT INTO `basket` (`product_id`, `user_id`, `quantity`, `size`, `payment`, `checkout`) VALUES 
(1, 1, 1, 'Small', 'No', 'Yes'), 
(3, 1, 1, 'Small', 'No', 'Yes'), 
(20, 1, 1, 'Small', 'No', 'Yes'), 
(3, 2, 1, 'Small', 'Yes', 'Yes'); 

下面是我用叫我的数据库payment_details认为我的PHP代码:

<?php 
require_once('my_connect.php'); 
require_once 'header.php'; 
$user_id=$_GET["user_id"];?> 

<html> 
<head></head> 
<body> 
<H1>Edit Payment Form</H1> 
<table> 

<?php 
if (isset($_POST['change_payment'])): 
     $user_id=$_GET["user_id"]; 
     $payment=$_POST["payment"]; 

     $edit_query= "update basket set 
         payment = '$payment' where 
         user_id='$user_id'"; 

     $edit_result= mysqli_query($connection, $edit_query); 

     if ($edit_result) : 
       header ('location: view_orders.php?confirm=Product item successfully updated'); 
     else : 
       echo "<b>This didn`t work, error: </b>"; 
       echo mysqli_error($connection); 
     endif; 
    endif; 


    $user_id=$_GET['user_id']; 
    $my_query="select * from basket where user_id=$user_id;"; 
    $result= mysqli_query($connection, $my_query); 

    while ($myrow = mysqli_fetch_array($result)): 
     $user_id= $myrow['user_id']; 
     $payment = $myrow["payment"]; 
    endwhile; 

    echo "<form method='POST' action='change_payment.php' > 
     <tr><td><b>Payment:</b> 
     <td><input type='text' name='payment' value='$payment'> 
     <tr><td><input type='submit' name='change_payment' value='Save Changes'> 
     </form>"; 
?> 

</table> 
</body> 
</html> 
</div> 
<?php require_once('footer.php'); ?> 

它不更新我的数据库中的篮子表,我想知道为什么?请帮助我,我会很感激。

+0

是否有打印出来的sql错误? – hassan

+0

完全没有错误,它将我带到前面的页面,并添加了“成功更新的产品项目”,但未更新。 –

+0

print'$ edit_query'并从phpmyadmin手动执行,并检查出什么是错误的 – hassan

回答

0

如果MySQL具有与MS SQL相似的语法,那么我可以看到的唯一问题是插入语句中表名和列名称周围的撇号。您应该只需要撇号来输入要插入的字符串值。

+0

这些是反引号''' - 这是在MySQL中引用标识符的正确方法。 –

+0

不知道它们是否相同,我试着把它们放下,但是显示错误。我想varchar和字符串是一样的,因为我可以在varchar中插入数字或单词(?) –

+0

对于鲱鱼的道歉! – WillCDev

1

因为我不能评论(缺乏声誉我必须写这个答案)。首先,每个mysql/i_query()都应该用棍子打,直到它变成准备语句。正如我看到你正在处理付款,你是SQLInjection脆弱。所以首先读一下SQLInjection和准备好的语句。关于问题,请尝试在脚本顶部设置错误报告以:

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

并写入之后会发生什么。在更新查询之前还要转储$ user_id,并检查是否存在一些问题,因为即使数据库中不存在$ user_id,查询也会成功更新,但它只会查询成功。

+0

我还没有到达付款页面,这是一个管理员只更新数据库的页面,我只是试图练习,它不是一个真正的网站。错误如下:注意:一个会话已经开始 - 忽略第二行 –

0

试试这个工作对我来说,和u有错误这里

"select * from basket where user_id=$user_id;" 

这一点;是错误的。并确保妳域已经user_id说明的index.php?USER_ID = 1名

编辑代码更新了一个检查,如果在URL中存在的user_id如果没有它不会显示形式或更新脚本,因为乌尔形式阅读基于user_id从数据库输入。

<?php 

require_once 'my_connect.php'; 
require_once 'header.php'; 

?> 

<html> 
    <head> 
     <title></title> 
    </head> 
<body> 

<H1>Edit Payment Form</H1> 
<table> 

<?php 

// if submit button is pressed 
if (isset($_POST['change_payment'])) 
{ 

     // check if user_id is exists in a URL 
     if (isset($_GET['user_id']) && !empty($_GET['user_id'])) 
     { 
      // now if user_id exists and is not empty make a variable and run a rest of a script 
      $user_id = (int)$_GET['user_id']; 

      // get name from a form input field payment 
      $payment = $_POST["payment"]; 

      // update basket table with payment where user_id is equal to user_id from a $_GET variable 
      $edit_query = "UPDATE basket SET payment = '$payment' WHERE user_id = '$user_id'"; 

      // run query 
      $edit_result = mysqli_query($connection, $edit_query); 

      // if query is valid redirect user to another location 
      if ($edit_result) 
      { 
       header('location: view_orders.php?confirm=Product item successfully updated'); 
      } 
      else 
      { 
       // if query fails display error message 
       echo "<b>This didn't work, error: </b>" . mysqli_error($connection); 
      } 
     } 

} 

// check if user_id is exists in a URL if not dont display a form 
if (isset($_GET['user_id']) && !empty($_GET['user_id'])) 
{ 
    // now if user_id exists and is not empty make a variable and run a rest of a script 
    $user_id = (int)$_GET['user_id']; 

    // select all data from basket table where user_id is equal to user_id from a $_GET variable 
    $my_query = "SELECT * FROM basket WHERE user_id = '$user_id'"; 

    // run query 
    $result = mysqli_query($connection, $my_query); 

    // get an array with all data from basket table where user_id is equal to user_id from $_GET variable 
    $myrow = mysqli_fetch_array($result); 

    // show a form and set value to $myrow['payment'] where payment is equal to payment data where user_id is equal to user_id from a $_GET variable 
    echo ' 
     <form method="POST" action=""> 
      <b>Payment:</b> 
      <input type="text" name="payment" maxlength="6" value="'.$myrow['payment'].'"> 
      <input type="submit" name="change_payment" value="Save Changes"> 
     </form> 
    '; 
} 

?> 

</table> 
</body> 
</html> 
</div> 
<?php require_once 'footer.php'; ?> 

而且my_connect.php

<?php 

// display errors, comment this 2 functions after make this script to work 
error_reporting(1); 
ini_set('error_reporting', E_ALL); 

// starting session 
session_start(); 

// connection to database 
define('DB_HOST', 'localhost');  // database host 
define('DB_USER', 'root');   // database username 
define('DB_PASSWORD', '');   // database pasword 
define('DB_NAME', 'baza');   // database name 

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

?> 
+0

编辑完成的C:\ WebServ \ wwwroot \ htdocs \ php \ my-shop \ footer.php中的session_start()。 – Mario

+0

我可以知道什么是config.php吗? –

+0

啊对不起,我的连接像你的数据库my_connect.php只是改变它 – Mario

0

你必须考虑,如果它不显示错误这并不意味着更新完成与否。这意味着查询是好的(没有语法错误)。 所以我们可以想象你试图更新一个不存在的用户的记录。 例如:user_id = 10,然后尝试用user_id = 11更新记录。语法正常,SQL将找不到user_id = 11的用户,但会回答“OK,我试过了,语法正常,对我来说很好” 。

你必须考虑的是检查更新记录的数量(例如使用$ result = @mysqli_affected_rows($ handle);)但是,你也必须明白,即使查询是好的,如果更新没有更改值(所以在你的情况下,如果“付款”的旧值和新值相同),mysqli_affected_rows将返回0。

我的建议是在调用前添加一个“回声”查询。然后将该字符串复制到PhpMyadmin中以查看发生了什么。可能在显示查询字符串时,您会看到一些值是错误的。

希望这会有所帮助。

0

谢谢大家,寻求帮助。我想告诉你,我设法知道我的错误在哪里。这仅仅是因为支付是在重复的用户ID的篮子表中,这就是为什么它不能工作。我将它移到用户表中,现在它运行良好。