SQL查询不更新phpmyadmin中的数据库
我是新来的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'); ?>
它不更新我的数据库中的篮子表,我想知道为什么?请帮助我,我会很感激。
如果MySQL具有与MS SQL相似的语法,那么我可以看到的唯一问题是插入语句中表名和列名称周围的撇号。您应该只需要撇号来输入要插入的字符串值。
这些是反引号''' - 这是在MySQL中引用标识符的正确方法。 –
不知道它们是否相同,我试着把它们放下,但是显示错误。我想varchar和字符串是一样的,因为我可以在varchar中插入数字或单词(?) –
对于鲱鱼的道歉! – WillCDev
因为我不能评论(缺乏声誉我必须写这个答案)。首先,每个mysql/i_query()都应该用棍子打,直到它变成准备语句。正如我看到你正在处理付款,你是SQLInjection脆弱。所以首先读一下SQLInjection和准备好的语句。关于问题,请尝试在脚本顶部设置错误报告以:
error_reporting(E_ALL);
ini_set('display_errors', 1);
并写入之后会发生什么。在更新查询之前还要转储$ user_id,并检查是否存在一些问题,因为即使数据库中不存在$ user_id,查询也会成功更新,但它只会查询成功。
我还没有到达付款页面,这是一个管理员只更新数据库的页面,我只是试图练习,它不是一个真正的网站。错误如下:注意:一个会话已经开始 - 忽略第二行 –
试试这个工作对我来说,和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);
?>
你必须考虑,如果它不显示错误这并不意味着更新完成与否。这意味着查询是好的(没有语法错误)。 所以我们可以想象你试图更新一个不存在的用户的记录。 例如:user_id = 10,然后尝试用user_id = 11更新记录。语法正常,SQL将找不到user_id = 11的用户,但会回答“OK,我试过了,语法正常,对我来说很好” 。
你必须考虑的是检查更新记录的数量(例如使用$ result = @mysqli_affected_rows($ handle);)但是,你也必须明白,即使查询是好的,如果更新没有更改值(所以在你的情况下,如果“付款”的旧值和新值相同),mysqli_affected_rows将返回0。
我的建议是在调用前添加一个“回声”查询。然后将该字符串复制到PhpMyadmin中以查看发生了什么。可能在显示查询字符串时,您会看到一些值是错误的。
希望这会有所帮助。
谢谢大家,寻求帮助。我想告诉你,我设法知道我的错误在哪里。这仅仅是因为支付是在重复的用户ID的篮子表中,这就是为什么它不能工作。我将它移到用户表中,现在它运行良好。
是否有打印出来的sql错误? – hassan
完全没有错误,它将我带到前面的页面,并添加了“成功更新的产品项目”,但未更新。 –
print'$ edit_query'并从phpmyadmin手动执行,并检查出什么是错误的 – hassan