I am trying to insert PHP variables in a mysql table, where the table name is also a variable, using mysqli_query. I've tried multiple solutions from stackoverflow but it still does not work.
I try to do it like this, maybe I am missing something. Thank you in advance!
<?php
session_start();
#include_once "modules/connections/dbconn.php";
$value = $_POST['value'];
$playerid = $_SESSION["steamid"];
$playername = fetchinfo("name","users","steamid",$playerid);
$playeravatar = fetchinfo("avatar","users","steamid",$playerid);
$playercoins = fetchinfo("coins", "users","steamid",$playerid);
if($playercoins - $value < 0){
die(json_encode(array('message' => 'ERROR', 'code' => "Not enough coins!")));
}
$game = fetchinfo("value","parameters","name","raffleRound");
$maxitems = fetchinfo("value","parameters","name","raffleMaxritems");
$items = fetchinfo("itemsnum","rafflegames","id",$game);
$itemname = "Coins";
$itemavatar = "images/creditcardicon.png";
$color = "D2D2D2";
$initialvalue = fetchinfo("value","rafflegames","id",$game);
$from = $initialvalue * 100;
$to = $from + $value * 100;
$tablename = 'rafflegame'.$game;
if($items < $maxitems){
mysqli_query($GLOBALS["connect"], "UPDATE rafflegames SET `value`=`value`+$value, `itemsnum`=`itemsnum`+1 WHERE `id`=$game");
mysqli_query($GLOBALS["connect"], "UPDATE users SET `coins`=`coins`-$value WHERE `steamid`=$playerid");
mysqli_query($GLOBALS["connect"], "INSERT INTO `" . $tablename . "` VALUES ('".$playerid."', '".$playername."','".$itemname."','".$color."','".$value."','".$playeravatar."','".$itemavatar."','".$from."','".$to."')");
}
else {
die(json_encode(array('message' => 'ERROR', 'code' => "Too many items in the current game")));
}
?>
The other two queries work just fine.
The table structure is this:
mysqli_query($GLOBALS['connect'],"CREATE TABLE `rafflegame$roundNumber` (
`id` int(11) NOT NULL auto_increment,
`userid` varchar(70) NOT NULL,
`username` varchar(70) NOT NULL,
`item` text,
`color` text,
`value` float,
`avatar` varchar(512) NOT NULL,
`image` text NOT NULL,
`from` int NOT NULL,
`to` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
mysqli_query($GLOBALS['connect'],"TRUNCATE TABLE `rafflegame$roundNumber`");
There is difference between table structure and insert column coumnt, When you want id column as auto incremented in that case column name should be included in insert query.
Please use the code as below:
<?php
session_start();
#include_once "modules/connections/dbconn.php";
$value = $_POST['value'];
$playerid = $_SESSION["steamid"];
$playername = fetchinfo("name","users","steamid",$playerid);
$playeravatar = fetchinfo("avatar","users","steamid",$playerid);
$playercoins = fetchinfo("coins", "users","steamid",$playerid);
if($playercoins - $value < 0){
die(json_encode(array('message' => 'ERROR', 'code' => "Not enough coins!")));
}
$game = fetchinfo("value","parameters","name","raffleRound");
$maxitems = fetchinfo("value","parameters","name","raffleMaxritems");
$items = fetchinfo("itemsnum","rafflegames","id",$game);
$itemname = "Coins";
$itemavatar = "images/creditcardicon.png";
$color = "D2D2D2";
$initialvalue = fetchinfo("value","rafflegames","id",$game);
$from = $initialvalue * 100;
$to = $from + $value * 100;
$tablename = 'rafflegame'.$game;
if($items < $maxitems){
mysqli_query($GLOBALS["connect"], "UPDATE rafflegames SET `value`=`value`+$value, `itemsnum`=`itemsnum`+1 WHERE `id`=$game");
mysqli_query($GLOBALS["connect"], "UPDATE users SET `coins`=`coins`-$value WHERE `steamid`=$playerid");
mysqli_query($GLOBALS["connect"], "INSERT INTO `" . $tablename . "`(`userid`,`username`,`item`,`color`,`value`,`avatar`,`image`,`from`,`to`) VALUES ('".$playerid."', '".$playername."','".$itemname."','".$color."','".$value."','".$playeravatar."','".$itemavatar."','".$from."','".$to."')");
}
else {
die(json_encode(array('message' => 'ERROR', 'code' => "Too many items in the current game")));
}
?>
Related
I'm trying to figure how to call a query once.
I have 6 different variables for images, title and desc.
In this code, I need to know how to loop for id from 0 to 6.
$date = new DateTime("NOW");
$image1 = 'SSSS';
$title1 = 'AAAA';
$desc1 = 'BBBB';
$image2 = 'RRRR';
$title2 = 'GGGG';
$desc2 = 'VVVV';
/// 4 vars later....
$id = 6;
$get = $this->db->queryRow("UPDATE `featured` SET `image` = '{$image.$id}', `title` = '{$title.$id}', `desc` = '{$desc.$id}', `date` = '{$date->format('Y-m-d H:i:s')}' WHERE id = '{$id}'");
return(object) $get;
To build a collection of Querys use the multi_query function.
Loop to build your Query string to pass to the db and concatenated by a semicolon.
<?php
for($i=0;$i <= $maxquerys;$i++){
$query = "UPDATE `featured` SET `image` = '".$image.$id."', `title` = ".$title.$id."', `desc` = '".$desc.$id."', `date` = '".$date->format('Y-m-d H:i:s')."' WHERE id = '".$id."';"
}
/* execute multi query */
if ($mysqli->multi_query($query)) {
while ($mysqli->next_result());
}
/* close connection */
$mysqli->close();
you may check also the result by
echo $mysqli->affected_rows;
?>
I have tried to use a simple $query model and it works fine.
Create a valid Query string to pass to the db
<?php
$query = "UPDATE `featured` SET `image` = '".$image.$id."', `title` = ".$title.$id."', `desc` = '".$desc.$id}."', `date` = '".$date->format('Y-m-d H:i:s')."' WHERE id = '".$id."';"
$result=$mysqli->query($query);
// Verify results
if(!$result) {
$ErrMessage = "ErrSqlQuery:" . $mysqli->error . "\n";
$mysqli->close();
die($ErrMessage);
}
you can check also the result by
echo $mysqli->affected_rows;
?>
$query_build = "";
foreach($arr as $$image){
$query_build .= "UPDATE `featured` SET `image` = '{$image.$id}', `title` = '{$title.$id}', `desc` = '{$desc.$id}', `date` = '{$date->format('Y-m-d H:i:s')}' WHERE id = '{$id}';";
}
$get = $this->db->queryRow($query_build);
Accumulate all the queries and execute all at once.
I have a issue, my INSERT ... ON DUPLICATE KEY UPDATE is inserting a new record instead of updating the row, the Table i am using has both an primary key and a unique key. So i am confused to why this is happening.
Table
CREATE TABLE `Product` (
`Product_Id` bigint(255) NOT NULL AUTO_INCREMENT,
`Resturant_ID` bigint(255) NOT NULL,
`Product_Desc` text NOT NULL,
`Product_Name` varchar(100) NOT NULL,
`Product_Price` decimal(8,0) NOT NULL,
`Add_On_ID` int(11) NOT NULL,
PRIMARY KEY (`Product_Id`),
UNIQUE KEY `Product_Name` (`Product_Name`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8
QUERY
$add_product_errors = array();
if (isset($_POST['add'])) {
$item_name = $_POST['item_name'];
$desc = $_POST['desc'];
$price = $_POST['price'];
$rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']);
if (empty($_POST['price']) || !filter_var($_POST['price'], FILTER_VALIDATE_FLOAT) || ($_POST['price'] <= 0)) {
$add_product_errors['price'] = "Please enter a product price";
}
if (empty($_POST['item_name'])) {
$add_product_errors['item_name'] = "Please enter a name";
}
if (empty($_POST['desc'])) {
$add_product_errors['desc'] = "Please enter a product description";
}
$query = "INSERT INTO Product(Resturant_ID,Product_Name,Product_Desc,Product_Price) VALUES (?,?,?,?)
ON DUPLICATE KEY
UPDATE
Resturant_ID = VALUES(Resturant_ID)
,Product_Name = VALUES(Product_Name)
,Product_Desc = VALUES(Product_Desc)
,Product_Price = VALUES(Product_Price)";
$run_query = mysqli_prepare($dbc, $query);
if (!$run_query) {
die(mysqli_error($dbc));
}
mysqli_stmt_bind_param($run_query, 'sssd', $rest_id, $item_name, $desc, $price);
$execute = mysqli_stmt_execute($run_query);
$item_name = strip_tags($_POST['item_name']);
$desc = strip_tags($_POST['desc']);
//100 - changes the way the decimal displays in database
$price = strip_tags($_POST['price'] * 100);
if ($execute) {
echo "<script> alert('Addrrss Saved')</script>";
} else {
echo "<b>Oops! we have an issue </b>";
mysqli_stmt_close($run_query);
}
}
?>
The syntax just looks off to me. Maybe try writing the SQL and testing it first in console or MySQL workbench or whatever first? Try this:
$query = "INSERT INTO Product(Resturant_ID,Product_Name,Product_Desc,Product_Price) VALUES (?,?,?,?)
ON DUPLICATE KEY UPDATE
Resturant_ID = ?
,Product_Name = ?
,Product_Desc = ?
,Product_Price = ?";
$run_query = mysqli_prepare($dbc, $query);
if (!$run_query) {
die(mysqli_error($dbc));
}
mysqli_stmt_bind_param($run_query, 'issdissd', $rest_id, $item_name, $desc, $price, $rest_id, $item_name, $desc, $price);
Or maybe ? eight times and binding things twice... not sure off hand if mysqli supports named parameters...
Updated [again] per Martin's feedback.
I have an UPDATE query and using Ajax, I wanted to know if any value is empty can I only update the values that not empty in the database. I don't know if this is possible to have a if statement or something to check to skip the empty values. I know I can just add another form element but just wanted to know if there was another solution.
Only if the data is POST from front end form. If data not POST don't update this Title = '.$title .',
$id = $_POST['id'];
$title = "";
$description = $_POST['Description'];
$date = $_POST['Date'];
$query = 'UPDATE user SET
`id` = '.$id.',
`Title` = '.$title .',
`Description` = '.$description.',
`Date` = '.$date =.'
WHERE `id` = '.$id;
$result = mysql_query($query) or die("<b>A fatal MySQL error occured</b>.<br />Query: ".$query."<br />Error: (".mysql_errno().") ".mysql_error());
Update: This is what worked for me. Thanks Karim Daraf
$query = " UPDATE user SET
Title = Coalesce($title,Title ) etc...
Try it with Coalesce .
$query = " UPDATE user
SET
`Title` = CASE WHEN `Title`='' or `Title` IS NULL THEN '$title' END,
`Description` = CASE WHEN `Description`='' Or `Description` IS NULL THEN '$description' END,
`Date` = CASE WHEN `Date`='' Or Date` IS NULL THEN '$date' END
WHERE `id` = '".$id."' ";
or :
$query = " UPDATE user
SET
`id` = Coalesce('$id''".$id."' , NULLIF(`id`,'')),
`Title` = Coalesce('$title''".$title."',NULLIF(`Title`,'') ) ,
`Description` = Coalesce('$description''".$description."' , NULLIF(`Description`,'') ) ,
`Date` = Coalesce('$date''".$date."',NULLIF(`Date`,''))
WHERE `id` = '$id''".$id."' ";
$query = 'UPDATE user SET
`id` = '.$id.',
`Title` = COALESCE(NULLIF("'.$title.'", ""),`Title`),
`Description` = "'.$description.'",
`Date` = "'.$date.'"
WHERE `id` = "'.$id.'"';
Not sure to understand: you have data and want to update, but only if some fied in the DB are empty?
In the case perfom only a where:
$query = 'UPDATE user SET
`id` = '.$id.',
`Title` = '.$title .',
`Description` = '.$description.',
`Date` = '.$date =.'
WHERE `id` = '.$id.' AND Title = '';
for example
This question already has answers here:
UTF-8 all the way through
(13 answers)
Closed 8 years ago.
Im trying to add some text with this command, included in my php file:
$sql = "INSERT INTO $this->table_name_category (name, marker_icon) VALUES ('".$name."', '".$marker_icon."')";
Everything looks fine in English characters, but in GREEK one's, the parsed text is being converted to question marks "??????"
Is there something else that i must take care off? Is there a way to tell INSERT command to use UTF8 in order to support Greek characters?
Thanks in advance.
My database is set to utf8_unicode_ci (tables too).
My code is:
<?php
class Store_locator_wpress_db {
var $wpdb;
var $table_name;
var $table_name_category;
function Store_locator_wpress_db() {
global $wpdb;
$this->wpdb = $wpdb;
$this->table_name = $wpdb->prefix . "store_wpress";
$this->table_name_category = $wpdb->prefix . "store_wpress_category";
$this->table_name_category2 = $wpdb->prefix . "store_wpress_category2";
}
function setup_tables() {
self::create_tables();
self::update_stores_table();
//self::update_categories_table();
}
function update_stores_table() {
$sql = "DESCRIBE $this->table_name";
$result = $this->wpdb->get_results($sql, 'ARRAY_N');
for($i=0; $i<count($result); $i++) {
$field[] = $result[$i][0];
}
if(!in_array('category_id',$field)) {
$sql = "ALTER TABLE `$this->table_name` ADD `category_id` INT NOT NULL AFTER `post_id`";
$this->wpdb->query($sql);
}
if(!in_array('category2_id',$field)) {
$sql = "ALTER TABLE `$this->table_name` ADD `category2_id` INT NOT NULL AFTER `category_id`";
$this->wpdb->query($sql);
}
if(!in_array('country',$field)) {
$sql = "ALTER TABLE `$this->table_name` ADD `country` VARCHAR( 60 ) NOT NULL AFTER `email`";
$this->wpdb->query($sql);
}
if(!in_array('city',$field)) {
$sql = "ALTER TABLE `$this->table_name` ADD `city` VARCHAR( 60 ) NOT NULL AFTER `email`";
$this->wpdb->query($sql);
}
}
function update_categories_table() {
$sql = "DESCRIBE $this->table_name_category";
$result = $this->wpdb->get_results($sql, 'ARRAY_N');
for($i=0; $i<count($result); $i++) {
$field[] = $result[$i][0];
}
if(!in_array('marker_icon',$field)) {
$sql = "ALTER TABLE `$this->table_name_category` ADD `marker_icon` VARCHAR( 200 ) NOT NULL AFTER `name`";
$this->wpdb->query($sql);
}
}
function create_tables() {
$sql = "CREATE TABLE IF NOT EXISTS " . $this->table_name . " (
`id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` BIGINT NOT NULL ,
`post_id` BIGINT NOT NULL ,
`category_id` INT NOT NULL ,
`name` VARCHAR( 160 ) NOT NULL ,
`logo` VARCHAR( 160 ) NOT NULL ,
`address` VARCHAR( 160 ) NOT NULL ,
`lat` VARCHAR( 20 ) NOT NULL ,
`lng` VARCHAR( 20 ) NOT NULL ,
`url` VARCHAR( 160 ) NOT NULL ,
`description` TEXT NOT NULL ,
`tel` VARCHAR( 30 ) NOT NULL ,
`email` VARCHAR( 60 ) NOT NULL ,
`created` DATETIME NOT NULL
) ENGINE = MYISAM;";
$this->wpdb->query($sql);
$sql = "CREATE TABLE IF NOT EXISTS " . $this->table_name_category . " (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 120 ) NOT NULL,
`marker_icon` VARCHAR( 200 ) NOT NULL
) ENGINE = MYISAM ;";
$this->wpdb->query($sql);
$sql = "CREATE TABLE IF NOT EXISTS " . $this->table_name_category2 . " (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 120 ) NOT NULL
) ENGINE = MYISAM ;";
//$this->wpdb->query($sql);
}
function get_locations($criteria) {
$lat = $criteria['lat'];
$lng = $criteria['lng'];
$page_number = $criteria['page_number'];
$nb_display = $criteria['nb_display'];
$distance_unit = $criteria['distance_unit'];
$category_id = $criteria['category_id'];
$category2_id = $criteria['category2_id'];
$radius_id = $criteria['radius_id'];
$start = ($page_number*$nb_display)-$nb_display;
if($distance_unit=='miles') $distance_unit='3959'; //miles
else $distance_unit='6371'; //km
$sql = "SELECT s.*, c.marker_icon, c.name category_name,
( $distance_unit * acos( cos( radians('".$lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$lng."') ) + sin( radians('".$lat."') ) * sin( radians( lat ) ) ) ) AS distance
FROM ".$this->table_name." s
LEFT JOIN ".$this->table_name_category." c
ON s.category_id=c.id
WHERE 1 ";
if($category_id!='') $sql .= " AND category_id='$category_id'";
if($category2_id!='') $sql .= " AND category2_id='$category2_id'";
if($radius_id!='') $sql .= " HAVING distance<='".$radius_id."'";
if($lat!=''&&$lng!='') $sql .= " ORDER BY distance";
else $sql .= " ORDER BY id DESC";
if($nb_display!='') $sql .= " LIMIT $start, $nb_display";
$locations = $this->wpdb->get_results($sql, 'ARRAY_A');
return $locations;
}
function return_nb_stores($criteria=array()) {
$category_id = $criteria['category_id'];
$sql = "SELECT count(*) as nb
FROM $this->table_name WHERE 1";
if($category_id!='') $sql .= " AND category_id='$category_id'";
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
return $results[0];
}
function return_stores($criteria=array()) {
$id = $criteria['id'];
$post_id = $criteria['post_id'];
$category_id = $criteria['category_id'];
$sql = "SELECT s.*, c.marker_icon
FROM $this->table_name s
LEFT JOIN ".$this->table_name_category." c
ON s.category_id=c.id
WHERE 1";
if($id>0) $sql .= " AND s.id='$id'";
if($post_id>0) $sql .= " AND s.post_id='$post_id'";
if($category_id>0) $sql .= " AND s.category_id='$category_id'";
$sql .= ' ORDER BY s.created DESC';
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
return $results;
}
function return_categories($criteria=array()) {
$id = $criteria['id'];
$sql = "SELECT * FROM $this->table_name_category WHERE 1";
if($id>0) $sql .= " AND id='$id'";
$sql .= ' ORDER BY name';
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
return $results;
}
function return_categories2($criteria=array()) {
$id = $criteria['id'];
$sql = "SELECT * FROM $this->table_name_category2 WHERE 1";
if($id>0) $sql .= " AND id='$id'";
$sql .= ' ORDER BY name';
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
return $results;
}
function return_nb_stores_by_category() {
$sql = 'SELECT c.id, count(*) nb
FROM '.$this->table_name.' s, '.$this->table_name_category.' c
WHERE s.category_id=c.id GROUP BY s.category_id';
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
for($i=0; $i<count($results); $i++) {
$storesCat[$results[$i]['id']] = $results[$i]['nb'];
}
return $storesCat;
}
function return_nb_stores_by_category2() {
$sql = 'SELECT c.id, count(*) nb
FROM '.$this->table_name.' s, '.$this->table_name_category2.' c
WHERE s.category2_id=c.id GROUP BY s.category2_id';
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
for($i=0; $i<count($results); $i++) {
$storesCat[$results[$i]['id']] = $results[$i]['nb'];
}
return $storesCat;
}
function delete_store($id) {
$user_id = get_current_user_id();
$sql = "SELECT * FROM $this->table_name WHERE id='$id' AND user_id='$user_id'";
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
if(count($results)>0) {
$sql = "DELETE FROM $this->table_name WHERE id='%d'";
$this->wpdb->query($this->wpdb->prepare($sql, $id));
return 'The store has been deleted.';
}
else {
return 'Only the author of this store, can delete it.';
}
}
function delete_category($id) {
$sql = "SELECT * FROM $this->table_name WHERE category_id='$id'";
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
if(count($results)>0) {
return "You cannot delete this category because it's containing ".count($results)." store(s). Please delete the stores first then try again.";
}
else {
$sql = "DELETE FROM $this->table_name_category WHERE id='%d'";
$this->wpdb->query($this->wpdb->prepare($sql, $id));
return 'The category has been deleted.';
}
}
function delete_category2($id) {
$sql = "SELECT * FROM $this->table_name WHERE category2_id='$id'";
$results = $this->wpdb->get_results($sql, 'ARRAY_A');
if(count($results)>0) {
return "You cannot delete this category because it's containing ".count($results)." store(s). Please delete the stores first then try again.";
}
else {
$sql = "DELETE FROM $this->table_name_category2 WHERE id='%d'";
$this->wpdb->query($this->wpdb->prepare($sql, $id));
return 'The category has been deleted.';
}
}
function update_store($criteria) {
$sql = "UPDATE $this->table_name SET
post_id='".$criteria['post_id']."', category_id='".$criteria['category_id']."', category2_id='".$criteria['category2_id']."',
name='".$criteria['name']."', logo='".$criteria['logo']."', url='".$criteria['url']."',
address='".$criteria['address']."', lat='".$criteria['lat']."', lng='".$criteria['lng']."',
description='".$criteria['description']."', tel='".$criteria['tel']."', email='".$criteria['email']."'
WHERE id='".$criteria['id']."'";
$this->wpdb->query($sql);
}
function update_category($criteria) {
$sql = "UPDATE $this->table_name_category SET name='".$criteria['name']."', marker_icon='".$criteria['marker_icon']."'
WHERE id='".$criteria['id']."'";
$this->wpdb->query($sql);
}
function update_category2($criteria) {
$sql = "UPDATE $this->table_name_category2 SET name='".$criteria['name']."'
WHERE id='".$criteria['id']."'";
$this->wpdb->query($sql);
}
function add_store($criteria) {
$sql = "INSERT INTO $this->table_name
(user_id, post_id, category_id, category2_id, name, logo, address, lat, lng, url, description, tel, email, created)
VALUES ('".$criteria['user_id']."', '".$criteria['post_id']."', '".$criteria['category_id']."', '".$criteria['category2_id']."', '".$criteria['name']."', '".$criteria['logo']."', '".$criteria['address']."', '".$criteria['lat']."', '".$criteria['lng']."',
'".$criteria['url']."', '".$criteria['description']."', '".$criteria['tel']."', '".$criteria['email']."', '".date('Y-m-d H:i:s')."')";
//echo $sql.'<br>';
$this->wpdb->query($sql);
}
function add_category($criteria=array()) {
$name = $criteria['name'];
$marker_icon = $criteria['marker_icon'];
$sql = "INSERT INTO $this->table_name_category (name, marker_icon) VALUES ('".$name."', '".$marker_icon."')";
$this->wpdb->query($sql);
}
function add_category2($criteria=array()) {
$name = $criteria['name'];
$sql = "INSERT INTO $this->table_name_category2 (name) VALUES ('".$name."')";
$this->wpdb->query($sql);
}
}
?>
before you do any query or CRUD in mysql issue this command
"SET NAMES utf8"
"SET CHARACTER SET utf8"
in PHP...
mysql_query("SET NAMES utf8");
to make sure everything is in UTF-8 and you use PDO... modify your PDO connection into this
depending on what API you use
$pdo = new PDO(
'mysql:host=hostname;dbname=defaultDbName',
'username',
'password',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "utf8")
);
reference:
Accented characters in mySQL table
Couple of things to check are the connection and the column. Columns can have their own char set
http://www.php.net/manual/en/mysqli.set-charset.php
http://dev.mysql.com/doc/refman/5.0/en/charset-column.html
1.Use show create table X to see the encoding of the table.
something like:
mysql> show create table user;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`password` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
2.If charset is not utf8, change it such.
mysql> alter table y character set 'utf8';
I'm new to php and mySql. I'm trying to update multiple row by using php and mysql.
I'm having problem with updating multiple row in MySQL database. It's only update the last row of the table in the database. For example, user click on view product. The page will list 10 product that currently in the database. And user wants to update product information by on-click method. After finishing update, user click submit.
The problem is it only capture and update information of the last product in the table. I tried to put it in the foreach() function. But it doesnt work.
Please help. I just learned PHP and mySQL less than a week. I very much appreciate any helps.
<?php
include 'dbconn.inc.php';
include 'functions.inc.php';
$sql = "SELECT * FROM products";
$res = $mysqli->query($sql);
while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products($row['id']) = 'id';
}
$id = $mysqli->real_escape_string( $_POST['id'] );
$weight = $mysqli->real_escape_string( $_POST['weight'] );
$name = $mysqli->real_escape_string( $_POST['name'] );
$supplier_id = $mysqli->real_escape_string( $_POST['supplier_id'] );
$price = $mysqli->real_escape_string( $_POST['price'] );
$description = $mysqli->real_escape_string( $_POST['description'] );
foreach( $products as $id){
$sql = "UPDATE products
SET
`id` = '$id',
`weight` = '$weight',
`price` = '$price',
`name` = '$name',
`supplier_id` = '$supplier_id',
`description` = '$description'
WHERE `id` = '$id'";
}
A couple of issues:
First, you're declaring the variable $id twice.
You should be using the $key not the $value in the loop
Instead, try this:
foreach( $products as $key => $value){
$sql = "UPDATE products
SET
`id` = '$id',
`weight` = '$weight',
`price` = '$price',
`name` = '$name',
`supplier_id` = '$supplier_id',
`description` = '$description'
WHERE `id` = '$key'";
}
The reason for using the array key rather than its value is because in the below line you are setting the key of the array to the values returned from the first query:
while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products($row['id']) = 'id';
}
I might suggest instead doing this:
$products = array();
while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products[]['id'] = $id;
}
foreach( $products as $product){
$sql = "UPDATE products
SET
`id` = '$id',
`weight` = '$weight',
`price` = '$price',
`name` = '$name',
`supplier_id` = '$supplier_id',
`description` = '$description'
WHERE `id` = '" . $product['id'] . "'";
}