12. september 2008 - 22:13Der er
19 kommentarer og 1 løsning
Insert into database
Hej Eksperter Jeg er kørt fast i følgende problem:
Jeg har en tabel "store_shoppertrack" som rummer forskellige værdier - i dette tilfælde forskellige bestilling (pizza, drikkevarer, menuer osv.)
I en anden tabel "store_orders" har jeg nogle andre værdier - i dette tilfælde navn og adresse osv. på den person, der har bestilt fx pizzaerne.
Da den samme person sagtens kan have bestilt både en pizza og en cola, så skal navn og adresse knyttes sammen med hver enkelt bestilling i tabellen store_shoppertrack.
Men følgende script knytter kun den sidste værdi i "store_shoppertrack" sammen med navn og adresse fra "store_orders". Og det er en fejl. Giver det mening?
<?php session_start();
//connect to database include ('dbconnect.php');
$session_id = session_id(); //check for cart items based on user session id $sel_item_id = array(); $sel_item_size = array(); $sel_item_color = array(); $sel_item_qty = array();
$get_cart = "select st.id, st.sel_item_id, si.item_title, si.item_price, st.sel_item_qty, st.sel_item_size, st.sel_item_color from store_shoppertrack as st left join store_items as si on si.id = st.sel_item_id where session_id = '$session_id' order by st.id"; $get_cart_res = mysql_query($get_cart) or die(mysql_error()); while ($cart = mysql_fetch_array($get_cart_res)) { $sel_item_id[] = $cart['sel_item_id']; $sel_item_size[] = $cart['sel_item_size']; $sel_item_color[] = $cart['sel_item_color']; $sel_item_qty[] = $cart['sel_item_qty']; }
//check for cart items based on user session id $get_cart = "select * from store_orders where session_id = '$session_id'"; $get_cart_res = mysql_query($get_cart) or die(mysql_error()); while ($cart = mysql_fetch_array($get_cart_res)) { $order_name = $cart['order_name']; $order_address = $cart['order_address']; $order_zip = $cart['order_zip']; $order_city = $cart['order_city']; $order_tel = $cart['order_tel']; }
Din kode her: //check for cart items based on user session id $get_cart = "select * from store_orders where session_id = '$session_id'"; Forventer du ikke kun at finde en række ? Hvis jo, smid LIMIT 1 på.
Samtidig kunne du så også rette: while ($cart = mysql_fetch_array($get_cart_res)) { til bare: $cart = mysql_fetch_array($get_cart_res);
Så burde du have adressen gemt engang for alle.
Hvis den så ikke indsætter korrekt i din for($i = 0; $i < count($sel_item_id); $i++) så må der jo være noget galt et sted.
Jeg værdsætter virkeligt din hjælp ;-) Jeg er kørt helt fast!
Det virker ikke... dvs. scriptet formår godt nok at tage den første værdi i store_shoppertrack og kombinere den med værdien i store_orders. Jeg kan nemlig se i tabellen: store_final at en værdi fra de to tabeller bliver kombineret. Men jeg får altså kun dannet en linie for den føste bestilling - og ikke en linie for hver bestilling.
Udfordringen består i, at en kunde sagtens kan have bestilt flere pizzaer. Dvs. for hver gang jeg looper igennem store_shoppertrack og får en værdi ud (fx en pizza), så skal værdien fra store_orders knyttes dertil.
Jov, jeg forventer kun at finde en værdi i store_orders - dvs. en kunde. Jeg er ikke lige sikker på, hvordan jeg sætter LIMIT 1 ind.
$sel_item_id indeholder id´et på bestillingen. Jeg har bygget databasen op således, at hvert ret/pizza osv. har fået sit eget unikke id.
Jeg har ryddet lidt op i scriptet:
<?php session_start();
//connect to database include ('dbconnect.php');
$session_id = session_id(); //check for cart items based on user session id $sel_item_id = array(); $sel_item_size = array(); $sel_item_color = array(); $sel_item_qty = array();
$get_cart = "SELECT * FROM store_shoppertrack WHERE session_id = '$session_id'"; $get_cart_res = mysql_query($get_cart) or die(mysql_error()); while ($cart = mysql_fetch_array($get_cart_res)) { $sel_item_id[] = $cart['sel_item_id']; $sel_item_size[] = $cart['sel_item_size']; $sel_item_color[] = $cart['sel_item_color']; $sel_item_qty[] = $cart['sel_item_qty']; }
//check for cart items based on user session id $get_cart = "SELECT * FROM store_orders where session_id = '$session_id'"; $get_cart_res = mysql_query($get_cart) or die(mysql_error()); $cart = mysql_fetch_array($get_cart_res); $order_name = $cart['order_name']; $order_address = $cart['order_address']; $order_zip = $cart['order_zip']; $order_city = $cart['order_city']; $order_tel = $cart['order_tel'];
Kan det ikke være fordi du bruger $i og tæller op ? Det ene array (adresse og lign) skal jo ikke tælles op. Det array med varerne skal tælles op. Kan det ikke være der din kæde hopper af ?
Tænker du på primary key? Jeg er ret sikker på, at id er min primary key Jeg er ikke sikker på, hvad autonummering er? Er det det samme som auto_increment?
;-) Ja, i tabellen store_final havde jeg session_id som primary key. Jeg har nu sat et almindeligt id ind, som så er primary... og nu virker det!!!!!!!!!!!!!!!!!!!!!!!!
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.