SQL so'rovi phpmyadmin da ma'lumotlar bazasini yangilamaydi

PHP va MySQL-ga yangi bo'lib kelganman va hozirda kichik veb-saytni amaliyot sifatida yaratishga harakat qilyapman. To'lovni bazamda tahrirlashni istagan kichik xatolik bor, kod ishlaydi va u muvaffaqiyatli deb hisoblanadi, lekin u jadvalda yangilanmaydi. Ma'lumotlar bazasida fikrlarni yaratish kabi ko'plab turli usullardan foydalanishga harakat qildim, ammo u hali ishlamadi. Php-sahifa oldingi sahifada user_id-ni olishni talab qiladi va bu yaxshi ishlaydi, lekin u hali ham jadvalni yangilamaydi.

Mana, men basketbol stoli uchun 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');

Mening bazamda to'lov_details deb nomlangan ko'rinishni foydalanganda menda PHP kodim bor:

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

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

Edit Payment Form

<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 "This didn`t work, error: ";
                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>Payment:
        <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'); ?>

It doesn't update the basket table in my database and I wanna know why? Please help my with this and I'll be thankful.

1
SQLda chop etilgan har qanday xato bormi?
qo'shib qo'ydi muallif hassan, manba
$ edit_query yozib oling va uni phpmyadmin-dan qo'lda bajaring va noto'g'ri tekshiring
qo'shib qo'ydi muallif hassan, manba
keyin require_once ("my_connect.php"); bilan savolingizni yangilang
qo'shib qo'ydi muallif hassan, manba
keyin require_once ("my_connect.php"); bilan savolingizni yangilang
qo'shib qo'ydi muallif hassan, manba
Kodimni tahrir qildim, hozir uni tekshirib ko'ring, hech qanday xatolikka yo'l qo'ymaslik kerak.
qo'shib qo'ydi muallif Mario, manba
Kodimni tahrir qildim, hozir uni tekshirib ko'ring, hech qanday xatolikka yo'l qo'ymaslik kerak.
qo'shib qo'ydi muallif Mario, manba
Avval $ _GET ['user_id'] faylini tekshirish uchun tugmani bosish tugmasini bosing; $ _GET o'zgaruvchiga sizning $ user_id = (int) $ _ GET ['user_id'] qiymatiga bo'sh qiymat bo'lmasa, u bo'sh emas va bu tamsayı. va keyin bir buyruq fayli ishlating.
qo'shib qo'ydi muallif Mario, manba
Avval $ _GET ['user_id'] faylini tekshirish uchun tugmani bosish tugmasini bosing; $ _GET o'zgaruvchiga sizning $ user_id = (int) $ _ GET ['user_id'] qiymatiga bo'sh qiymat bo'lmasa, u bo'sh emas va bu tamsayı. va keyin bir buyruq fayli ishlating.
qo'shib qo'ydi muallif Mario, manba
Hech qanday xatolik yo'q, oldingi sahifani so'ragandim va "Mahsulot elementi muvaffaqiyatli yangilandi", lekin yangilanmadi.
qo'shib qo'ydi muallif Maryam Adnan, manba
Hech qanday xatolik yo'q, oldingi sahifani so'ragandim va "Mahsulot elementi muvaffaqiyatli yangilandi", lekin yangilanmadi.
qo'shib qo'ydi muallif Maryam Adnan, manba
Men buni sinab ko'rdim va u mukammal ishladi. SQL kodi ishlaydi, lekin bitta sabab tufayli jadvalni yangilamaydi
qo'shib qo'ydi muallif Maryam Adnan, manba
Kimdir kodni sinab ko'rishni taklif qildi va bu menga bildirildi: bir sessiya allaqachon boshlandi - 2-satrda C: \ WebServ \ wwwroot \ htdocs \ PHP \ my-shop \ footer.php-da sessiya_start() ga e'tibor bermaslik kerak nima deb o'ylaysiz?
qo'shib qo'ydi muallif Maryam Adnan, manba
Kimdir kodni sinab ko'rishni taklif qildi va bu menga bildirildi: bir sessiya allaqachon boshlandi - 2-satrda C: \ WebServ \ wwwroot \ htdocs \ PHP \ my-shop \ footer.php-da sessiya_start() ga e'tibor bermaslik kerak nima deb o'ylaysiz?
qo'shib qo'ydi muallif Maryam Adnan, manba
Xato ham user_id, chunki men uni o'chirganimda ma'lumotlar bazasi yangilanadi.
qo'shib qo'ydi muallif Maryam Adnan, manba
Xato ham user_id, chunki men uni o'chirganimda ma'lumotlar bazasi yangilanadi.
qo'shib qo'ydi muallif Maryam Adnan, manba

7 javoblar

Men izoh bera olmaganimdan (reputatsiya etishmasligimdan men buni javob sifatida yozish kerak). Birinchidan, har bir mysql/i_query() tayyorlangan so'zga kelgunga qadar tayoq bilan kaltaklanishi kerak. Ko'rib turganingizdek, siz to'lovlarni ko'rib chiqasiz va SQLInjection himoyasizsiz. Shunday qilib, birinchi taklif SQLInjection va tayyorlangan so'zlar haqida o'qiladi. Savol haqida, buyruq faylining yuqori qismidagi xato hisobotini sozlashga harakat qilib ko'ring:

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

keyin nima sodir bo'lishini yozing. Bundan tashqari, $ user_id faylini yangilash so'rovi va ba'zi muammolar borligini tekshiring, chunki agar $ user_id ma'lumotlar bazasida mavjud bo'lmasa ham, so'rovlar muvaffaqiyatli yangilanadi, ammo so'rov natijalari muvaffaqiyatsiz bo'ladi.

1
qo'shib qo'ydi
Men hali to'lov sahifasiga kirmadim, bu administratorlar uchun faqatgina ma'lumotlar bazasini yangilash uchun sahifadir va faqat amaliyot uchun bu haqiqiy veb-sayt emas. Xatolik quyidagicha: Izoh: Bir sessiya allaqachon boshlangan edi - satrda C: \ WebServ \ wwwroot \ htdocs \ PHP \ my-shop \ footer.php "da session_start() funksiyasini rad etish
qo'shib qo'ydi muallif Maryam Adnan, manba

Men izoh bera olmaganimdan (reputatsiya etishmasligimdan men buni javob sifatida yozish kerak). Birinchidan, har bir mysql/i_query() tayyorlangan so'zga kelgunga qadar tayoq bilan kaltaklanishi kerak. Ko'rib turganingizdek, siz to'lovlarni ko'rib chiqasiz va SQLInjection himoyasizsiz. Shunday qilib, birinchi taklif SQLInjection va tayyorlangan so'zlar haqida o'qiladi. Savol haqida, buyruq faylining yuqori qismidagi xato hisobotini sozlashga harakat qilib ko'ring:

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

keyin nima sodir bo'lishini yozing. Bundan tashqari, $ user_id faylini yangilash so'rovi va ba'zi muammolar borligini tekshiring, chunki agar $ user_id ma'lumotlar bazasida mavjud bo'lmasa ham, so'rovlar muvaffaqiyatli yangilanadi, ammo so'rov natijalari muvaffaqiyatsiz bo'ladi.

1
qo'shib qo'ydi
Men hali to'lov sahifasiga kirmadim, bu administratorlar uchun faqatgina ma'lumotlar bazasini yangilash uchun sahifadir va faqat amaliyot uchun bu haqiqiy veb-sayt emas. Xatolik quyidagicha: Izoh: Bir sessiya allaqachon boshlangan edi - satrda C: \ WebServ \ wwwroot \ htdocs \ PHP \ my-shop \ footer.php "da session_start() funksiyasini rad etish
qo'shib qo'ydi muallif Maryam Adnan, manba

Yangilash amalga oshirilganligini anglatmaydi, xato ko'rsatilmasa, e'tiborga olishingiz kerak. Bu so'rovning yaxshi ekanligini anglatadi (sintaksis xatosi yo'q). Shunday ekan, mavjud bo'lmagan foydalanuvchi yozuvini yangilashga harakat qilmoqchiman. Misol uchun, user_id = 10 va foydalanuvchi_id = 11 bilan yozuvni yangilashga harakat qilasiz. Sintaksis OK, foydalanuvchi user_id = 11 bilan hech qanday foydalanuvchi topa olmaydi, lekin "OK, sinab ko'rdim, sintaksis OK, shuning uchun men uchun yaxshi".

Yangilangan yozuvlar sonini tekshirish kerak (masalan, $ result = @mysqli_affected_rows ($ handle);) Lekin siz ham, so'rovlar yaxshi bo'lsa ham, agar siz yangilanishingiz qiymati o'zgartirmasa ( shuning uchun sizning "eski" va "to'lov" qiymati yangi bo'lsa, mysqli_affected_rows 0 ga qaytariladi.

Men taklif qilmoqchisiz, qo'ng'iroqdan oldin so'rovingizning "echo" ni qo'shing. Keyin nusxa ko'chiring - nima sodir bo'lishini ko'rish uchun ushbu satrni PhpMyadmin-ga o'tkazing. Ehtimol so'rovning satrini ko'rsangiz, ayrim qiymatlar noto'g'ri ekanini ko'rasiz.

Umid qilamiz, bu yordam beradi.

0
qo'shib qo'ydi

Buni men uchun harakat qilib ko'ring va u erda xato bor

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

bu; xatolik. Domeningizning index.php? User_id = 1 dagi foydalanuvchi_idiga ishonch hosil qiling

EDIT code updated with a checking if user_id exists in a URL if not it will not display form or update a script, because ur form reading input from database based on user_id.

<?php

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

?>

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

Edit Payment Form

<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 "This didn't work, error: " . 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="">
            Payment:
            <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'; ?>

And 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
qo'shib qo'ydi
bu $ user_id = $ _ GET ['user_id'] ni olib tashlashga harakat qiling; va $ user_id = 1 ni belgilang; va u u yangilangan foydalanuvchini identifikatsiya qilish kerak bo'ladi. Agar u sizning $ _GET o'zgaruvchingizda o'z muammoini o'zgartirsa. va header.php va footer.php da pochta indeksi, ehtimol u erda xato bor.
qo'shib qo'ydi muallif Mario, manba
var_dump ($ myrow) shaklidan oldin foydalanishga harakat qiling; va u qatorni olish kerak. agar ma'lumotlar bazasiga ulanishni tekshirib ko'rmasangiz. $ Connection = mysqli_connect ("host", "username", "password", "database name"); Va sizning $ user_id = $ _ GET ['user_id']; bo'sh yoki ma'lumotlar bazasida 1 yoki 2 mavjud emas.
qo'shib qo'ydi muallif Mario, manba
oh my_connect.php kabi sizning ma'lumotlar bazasiga bo'lgan aloqamga shunchaki afsus
qo'shib qo'ydi muallif Mario, manba
to'liq ish bilan tahrirlangan.
qo'shib qo'ydi muallif Mario, manba
Men hamma narsani sinab ko'rdim, ammo xatoga yo'l qo'ymayapman. Ma'lumotlarning bazasiga o'tishga ruxsat bermaydigan yagona narsa user_id. Uni o'chirganimda, ma'lumotlar bazasi yangilanmoqda (albatta har bir narsa uchun), lekin uni qaytarib olayotganda hech narsa bo'lmaydi.
qo'shib qo'ydi muallif Maryam Adnan, manba
Yo'q, yaxshi. Kodingizni qo'yib, uni my_connect manziliga o'zgartirganman, lekin ". $ Myrow [" to'lov "] tufayli xatolikni ko'rsataman
qo'shib qo'ydi muallif Maryam Adnan, manba
Config.php nima ekanligini bilsam bo'ladimi?
qo'shib qo'ydi muallif Maryam Adnan, manba

Yordam uchun, barchangizga rahmat. Men sizning xatolaringizni qaerdan bilganimni sizga ma'lum qilmoqchiman. Buning sababi, pulni qayta ishlaydigan foydalanuvchi identifikatori bilan birga savat stolida bo'lganligi sababli, u ishlamay qoldi. Uni foydalanuvchilar jadvaliga ko'chirdim va u hozir yaxshi ishlaydi.

0
qo'shib qo'ydi

MySQL-ning MS SQL-ga o'xshash sintaksisi bo'lsa, men ko'rib turgan yagona masala - bu sizning tabrik nomi va ustun nomlari atrofidagi so'rovlardagi iboralar. Siz kiritgan string qiymatlari uchun faqat ochish belgilariga kerak.

0
qo'shib qo'ydi
Bunlar backtics ` - MySQL identifikatorlarini kiritishning to'g'ri usuli.
qo'shib qo'ydi muallif Paul Spiegel, manba
Agar ular bir xil yoki yo'qligini bilmasa, men ularni olib tashlashga harakat qildim, lekin u xato ko'rsatmoqda. Men varcharni string bilan bir xil deb o'ylayman, chunki raqamlar yoki so'zlarni varchar (?)
qo'shib qo'ydi muallif Maryam Adnan, manba
Qizil rangbo'yi uchun apologiyalar!
qo'shib qo'ydi muallif WillCDev, manba

MySQL-ning MS SQL-ga o'xshash sintaksisi bo'lsa, men ko'rib turgan yagona masala - bu sizning tabrik nomi va ustun nomlari atrofidagi so'rovlardagi iboralar. Siz kiritgan string qiymatlari uchun faqat ochish belgilariga kerak.

0
qo'shib qo'ydi
Bunlar backtics ` - MySQL identifikatorlarini kiritishning to'g'ri usuli.
qo'shib qo'ydi muallif Paul Spiegel, manba
Agar ular bir xil yoki yo'qligini bilmasa, men ularni olib tashlashga harakat qildim, lekin u xato ko'rsatmoqda. Men varcharni string bilan bir xil deb o'ylayman, chunki raqamlar yoki so'zlarni varchar (?)
qo'shib qo'ydi muallif Maryam Adnan, manba
Qizil rangbo'yi uchun apologiyalar!
qo'shib qo'ydi muallif WillCDev, manba
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin