01. marts 2011 - 18:27Der er
14 kommentarer og 1 løsning
Problemer med indsætning af mange rækker i MYSQL på en gang.
Kære eksperter. Jeg har et php script jeg har brugt på min webshop, som sørger for at varerne som mine kunder lægger i kurven indsættes i mysql når kunden godkender købet.
Problemet er, at scriptet kun vil sætte eks. 7 varer/rækker ind i mysql selvom der er 10 varer/rækker i kurven. Hvis jeg fjerner informationer fra varerne/rækkerne eks. varenummer og telefon, så kan scriptet nå at køre en vare/række mere ind, altså 8 ud af 10 varer. Min erfaring er, at jo færre informationer pr. række, jo flere rækker kan scriptet indlæses.
Kan nogen give mig en forklaring på hvordan jeg får indlæst alle rækkerne fra kurven i mysql.
HER ER FILERNE:
// Denne funtion henter data fra en anden form som kunden har udfyldt som her flettes sammen med indholdet i kurven.
function InsertTemporary() { global $db; $cart = $_SESSION['cart']; if ($cart) { $items = explode(',',$cart); $contents = array(); foreach ($items as $item) { $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1; } $output[] = '<form action="kundeoplysninger.php" method="post">';
// Her samles kundeoplysninger og ordre/kurven foreach ($contents as $id=>$qty) { $sql = 'SELECT * FROM produkter WHERE id = '.$id; $result = $db->query($sql); $row = $result->fetch();
//Tilknytter hver array til en variabel foreach($_POST['p_titel'] as $row=>$p_titel) { $p_titel=$p_titel; $navn_fak=$_POST['navn_fak'][$row]; $adresse_fak=$_POST['adresse_fak'][$row]; $postnr_fak=$_POST['postnr_fak'][$row]; $bue_fak=$_POST['bue_fak'][$row]; $telefon=$_POST['telefon'][$row]; $email=$_POST['email'][$row]; $antal=$_POST['antal'][$row]; $pris=$_POST['pris'][$row]; $varenummer=$_POST['varenummer'][$row]; $ordreid=$_POST['ordreid'][$row]; }
60000 er måske lige lidt overdrevet da der sandsynligvis er sket en fejl hvis det vare så længe, prøv at sætte den til 25 så afbryder den først scriptet hvis det køre længere end 25 sekunder. Hvis nødvendigt så hæver du den selvfølgelig.
INSERT INTO tabel_navn(id,var1,var2)VALUES(1,2,3); INSERT INTO tabel_navn(id,var1,var2)VALUES(2,3,4); INSERT INTO tabel_navn(id,var1,var2)VALUES(3,4,5);
Insert kan bruges sådan her:
INSERT INTO tabel_navn(id,var1,var2)VALUES(1,2,3),(2,3,4),(3,4,5);
Okay.. Kan du vise mig hvordan koden skal se ud, hvis jeg skal skrive den om til din metode. Jeg kan ikke gennemskue hvordan jeg skal formulere den. På forhånd tak!
// Her samles kundeoplysninger og ordre/kurven foreach ($contents as $id=>$qty) { $sql = 'SELECT * FROM produkter WHERE id = '.$id; $result = $db->query($sql); $row = $result->fetch();
Det er jo svært at forstå den fulde kode. Men hvorfor så mange informationer, når du skal sende info ? Hvorfor ikke bare nøjes med at sende nogle vare_id'er ?
Jeg kan godt få det nødvendige antal rækker med ind i mysql hvis jeg kund angiver produkt_id og antal. Men hvordan får jeg så kundens infomationer med ind i basen?
Det kommer an på om det er der hvor kunden skal smide sin bestilling ind? Enten kan du lave det i steps, så du modtager ordren i step1, kunde info i step2 etc...
Og det bør nu også kunne laves i et HUG. Du skal nok bare prøve ikke at sende så mange informationer, samt lave sql'er inde i loops. Så tager tingene for lang tid. Du bør kunne nøjes med få sql'er. Et udtræk og en indsættelse (i den ideelle verden) :o)
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.