Avatar billede nolsen89 Juniormester
09. juni 2016 - 19:24 Der er 9 kommentarer og
1 løsning

Select union og update left join tables

Har et problem med og få denne function til og virke, og jeg får ingen feil op når jeg kører den, så sidder lidt fast her.
er ikke erfaren med php mysqli, så kan ikke rtigtig selv se problemet, har prøvet i flere timer nu og nu er jeg bare kommet så langt så der ikke er nogen fejl, men heller ingen function.

$query = query("SELECT basket_product_quantity FROM basket WHERE basket_product_id = " . escape_string($_GET['remove']). "
      UNION
      SELECT product_quantity FROM products  WHERE product_id = " . escape_string($_GET['remove']). " ");
      confirm($query);
     
      $remove_quantity = $row['products.product_quantity'];
      $basket_remove_quantity = $row['basket.basket_product_quantity'];
     
      $query = query("UPDATE products LEFT JOIN basket
      ON products.product_quantity = basket.basket_product_quantity
      SET products.product_quantity = {$remove_quantity} +1 , basket.basket_product_quantity = {$basket_remove_quantity} -1 WHERE products.product_id AND basket.basket_product_id = " . escape_string($_GET['remove']). " ");
      confirm($query);


tablerne ser så ledes ud.

basket
basket_product_id - basket_product_quantity - basket_time


Products
product_id - product_quantity


det er mening at basket_product_quantity skal -1
og product_quantity skal +1

håber i kan se fejlen id får den fra url ?remove
Avatar billede arne_v Ekspert
09. juni 2016 - 19:38 #1
Hvad laver confirm?

Hvor faar $row en vaerdi henne?
Avatar billede arne_v Ekspert
09. juni 2016 - 19:39 #2
Hvorfor  escape_string funktion fremfor prepared statement?
Avatar billede olsensweb.dk Ekspert
09. juni 2016 - 19:39 #3
første øjekast, jeg har ikke kigget nærmere på den.

du mangler din connection i din query

dette
query($sql)
skal være
$conn->query($sql)
eller hvis du er til procedural syntax
mysqli_query($conn, $sql)



hvordan ser din database connection ud ??
Avatar billede arne_v Ekspert
09. juni 2016 - 19:39 #4
Og har du taenkt paa samtidgheds problemer?
Avatar billede olsensweb.dk Ekspert
09. juni 2016 - 20:21 #5
>og jeg får ingen feil op når jeg kører den, så sidder lidt fast her.
hvis du har slået error_reporting til og display error, burde du få en fejl om nogle functioner er ukendte
feks query,escape_string


escape_string($_GET['remove']), mangler også database connection

skal være
// OOP
$conn->escape_string($_GET['remove'])
eller
// OOP
$conn->real_escape_string ($_GET['remove'])
eller
// procedural
mysqli_real_escape_string ($conn, $_GET['remove'])


ref http://php.net/manual/en/mysqli.real-escape-string.php

på sigt bør du anvende Prepare Statement, men det er måske for meget at gabe over i første omgang. (håber også den lille quick guide kommer tilbage på E, som omtalt i dit sidste spm)
jeg vil sige i første omgang få omskrevet din code til mysqli, og så kan du forbedre/optimere den med Prepare Statement


ref http://php.net/manual/en/function.mysqli-connect.php

<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}



ref http://php.net/manual/en/mysqli.construct.php

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

/*
* This is the "official" OO way to do it,
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
*/
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

her kalder de Deres connection for $link, og $mysqli, hvor jeg altid kalder min for $conn, andre kalder den for $db
Avatar billede nolsen89 Juniormester
09. juni 2016 - 20:32 #6
connection til query er fra denne function

function query($sql) {

global $connection;

return mysqli_query($connection, $sql);
Avatar billede nolsen89 Juniormester
09. juni 2016 - 20:33 #7
og har også denne
function confirm($result){

global $connection;

if(!$result) {

die("QUERY FAILED " . mysqli_error($connection));
    }
}

så der er ikke feil med forbindelsen, alt andet på siden bruger sammen query og confirm..
Avatar billede nolsen89 Juniormester
09. juni 2016 - 20:41 #8
nu ændrede jeg fra escape_string($_GET['remove']) til '{$product_id} og fik begge to til og opdatere men ser ud som om at den ikke henter quantity fra nogen av tablerne

$remove_quantity = $row['products.product_quantity'];
$basket_remove_quantity = $row['basket.basket_product_quantity'];

er det pga manglende while loop??? og kan jeg hente alt fra tablerne uden while loop?
Avatar billede arne_v Ekspert
09. juni 2016 - 20:58 #9
Og du burde nok undgaa global - det goer det bare svaert at foelge koden.
Avatar billede olsensweb.dk Ekspert
09. juni 2016 - 21:11 #10
>og kan jeg hente alt fra tablerne uden while loop?
ja
http://php.net/manual/en/mysqli-result.fetch-all.php

#9
enig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester