webForumDet fria alternativet

Problem med att skriva till databas

14 svar · 648 visningar · startad av AndreasC

AndreasCMedlem sedan mars 20011 964 inlägg
#1

Har problem med att skriva till databas. Jag har två input-fält på en sida där jag hämtar in information från en databas. Jag vill sedan skriva denna information till en annan tabell i samma databas och detta funkar bra.

Koden ser ut såhär där jag hämtar in datan.

<?php

// hämtar information från den angivna tabellen
$result = mysql_query("SELECT * FROM cache_order WHERE user='{$_SESSION['sess_user']}'")
or die(mysql_error());

// hämtar resultatrader från tabellen
while($row = mysql_fetch_array( $result ))
{
  // skriver ut innehållet radvis
  echo "<input type=hidden name=ordernr value='";
  echo $row["ordernr"];
  echo "'>";
  echo "<input type=hidden name=user value='";
  echo $row["user"];
  echo "'>";
  }
  ?>

När jag trycker på en knapp i formuläret där ovanstående kod ligger, skickas jag till en php-sida med processing-kod. Den ser ut såhär.

<?php
session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen
 
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: loggain.php");
  exit;
}

// Tar bort eventuellt existerande orderinformation
// för inloggad användare, innan ny data skrivs
mysql_query("DELETE FROM cache_orderdelar WHERE user='{$_SESSION['sess_user']}'") 
or die(mysql_error());  

// skriver information till den angivna tabellen
$nyorder = mysql_query("INSERT INTO cache_orderdelar (ordernr, user, artikelnamn, antal, styckpris) 
VALUES('$_POST[ordernr]','$_POST[user]','$_POST[artikelnamn],'$_POST[antal],'$_POST[styckpris]')")

or die("" . mysql_error()); 

// skickar användaren till nästa sida
header('Location: orderComplete.php');
?>

Till synes står i denna fil att datan i fältet "ordernr" respektive "user" ska skrivas till tabellen "cache_orderdelar" men jag har även skrivit att den ska skicka datan i en del andra fält till samma tabell. Dessa fält hämtas in i sidan där den första koden jag skrev i detta inlägg ligger, från en .js-fil

Koden i .js-filen som är aktuell för detta problem ser ut såhär:

         if ( fields[5] == "" )
            strOutput += "<TD CLASS=\"nopentry\"><input style='width:310px' type=text name='artikelnamn' value='"+ fields[3] +"'></TD>";
         else
            strOutput += "<TD CLASS=\"nopentry\">"  + fields[3] + " - <I>"+ fields[5] + "</I></TD>";

         strOutput += "<TD CLASS=\"nopentry\"><input style='width:25px' type=text name='antal' value='"+ fields[1] +"'></TD>";
         strOutput += "<TD CLASS=\"nopentry\"><input style='width:40px' type=text name='styckpris' value='"+ moneyFormat(fields[2]) +"'>" + MonetarySymbol + "</TD>";

Här kan ni se hur jag döpt de olika fälten till "artikelnamn", "antal" och "styckpris". Värdena i dessa tre fält ska skickas tillsammans med värdena i fälten "ordernr" och "user" till databasen när processOrder.php körs, men då får jag upp detta:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,'229.00')' at line 2"

Om jag tar bort den kod i processOrder.php som säger att datan i fälten som hämtas in från .js-filen ska skrivas till databasen så kommer inte felkoden upp. Det som händer är att datan i fälten "ordernr" och "user" skrivs till databasen som det står i processOrder.php att den ska göra, men så fort jag skriver i filen att även datan från .js-filen ska skrivas så får jag felkod.

Något verkar vara fel i .js-filen, men vad?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Felmeddelandet säger ju att du har fel i SQL-frågan - och om du tittar där så ser du att du har tabbat dig lite med apostroferna runt värdena.

AndreasCMedlem sedan mars 20011 964 inlägg
#3

@nders skrev:

Felmeddelandet säger ju att du har fel i SQL-frågan - och om du tittar där så ser du att du har tabbat dig lite med apostroferna runt värdena.

Ja, jag upptäckte det. Slarvigt. Jag har dock en kod till som jag för mitt liv inte kan fatta varför det inte fungerar.

<?php
session_start(); // Alltid överst på sidan

include "conn.php"; // Databasanslutningen
 
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: loggain.php");
  exit;
}

// Skriver orderinformation till permanet ordertabell och rensar
// därefter de temporära tabellerna för inloggad användare

  // Skriver information till den angivna tabellen
  $nyorder1 = mysql_query("INSERT INTO order (ordernr, user, orderdatum) 
  VALUES('$_POST[ordernr]','$_POST[user]','$_POST[orderdatum]')")

  or die(mysql_error()); 

  // Skriver information till den angivna tabellen
  $nyorder2 = mysql_query("INSERT INTO orderdelar (ordernr, user, artikelnamn, antal, styckpris) 
  VALUES('$_POST[ordernr]','$_POST[user]','$_POST[artikelnamn]','$_POST[antal]','$_POST[styckpris]')")

  or die(mysql_error());

  // Tar bort temporär orderinformation
  mysql_query("DELETE FROM cache_order WHERE user='{$_SESSION['sess_user']}'") 
  or die(mysql_error());

  // Tar bort temporär orderinformation
  mysql_query("DELETE FROM cache_orderdelar WHERE user='{$_SESSION['sess_user']}'") 
  or die(mysql_error());  

// Skickar användaren till nästa sida
header('Location: kassa_utford.php');
?>

Jag får meddelandet "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (ordernr, user, orderdatum) VALUES('47','AndreasC','2009-05-27')' at line 1"

Jag får ju värdena från sidan som kallat på scriptet (47, AndreasC osv) men jag kan inte hitta några fel i koden, fattar inte varför det inte funkar. Har checkat den 100 ggr nu.

@ndersMedlem sedan juni 200032 969 inlägg
#4

Och vad är det som inte fungerar? Hur? Felmeddelande?

MeleaMedlem sedan juli 20033 147 inlägg
#5

order är ett skyddat namn. Byt namn på tabellen så ska du se att det funkar. :)

@ndersMedlem sedan juni 200032 969 inlägg
#6

Hmm, var det jag som inte läste ordentligt, eller har någon redigerat in saker efter mitt inlägg?

Melea har helt rätt. Akta dig för att använda reserverade ord som namn på något som helst.

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

MeleaMedlem sedan juli 20033 147 inlägg
#7

Fasen, nu skulle wF-anden ha varit här. :e

@nders skrev:

Melea har helt rätt.

AndreasCMedlem sedan mars 20011 964 inlägg
#8

Tackar :) Har suttit hela natten och hela förmiddagen med att få ett projekt klart. Ska lämna in det på skolan idag och få betyg på det.

Har dock problem med ett javascript. Har ett javascript som är en del av projektet. Det är en varuvagn till en webshop. En del av koden ser ut såhär:

      if ( bDisplay ) {
         strOutput += "<TR>";

         if ( fields[5] == "" )
            strOutput += "<TD CLASS=\"nopentry\"><input style='border:none; width:320px' type=text name='artikelnamn' value='"+ fields[3] +"'></TD>";

         strOutput += "<TD CLASS=\"nopentry\"><input style='border:none; width:25px' type=text name='antal' value='"+ fields[1] +"'></TD>";
         strOutput += "<TD CLASS=\"nopentry\"><input style='border:none; width:40px' type=text name='styckpris' value='"+ moneyFormat(fields[2]) +"'></TD>";

         strOutput += "</TR>";
      }

Som ni ser på namnet för <input>-fälten så är det vad som visas med denna funktion som jag skickar in i databasen. Problemet är bara att jag enbart får in den sista raden som visas i tabellen i varukorgen med detta javascript, inte alla rader/artiklar. Hur fixar man det?

The_HulkMedlem sedan juni 20031 837 inlägg
#9

Har du flera input-fält som har samma namn/id?
om du inte gör en array av namnet så kommer du bara få med dig en rad, ett alternativ är att lägga till radnumret i namnet/id för input-fältet.

Skulle vara enklare om du visade mer kod samt den genererade html-koden.

AndreasCMedlem sedan mars 20011 964 inlägg
#10

Jag postar hela filens innehåll. Om du kan och vill får du väldigt gärna kolla igenom den och se hur man kan göra. Har ingen genererad HTML-kod. Koden i .js-filen länkas in i html-koden med:

<SCRIPT>
CheckoutCart();
</SCRIPT>

//Options for Everyone:
MonetarySymbol        = ' SEK';
DisplayNotice         = false;
DisplayShippingColumn = false;
DisplayShippingRow    = true;
DisplayTaxRow         = false;
TaxRate               = 0.07;
TaxByRegion           = false;
TaxPrompt             = 'For tax purposes, please select if you are an Arizona resident before continuing';
TaxablePrompt         = 'Arizona Residents';
NonTaxablePrompt      = 'Other States';
MinimumOrder          = 0.00;
MinimumOrderPrompt    = 'Your order is below our minimum order, please order more before checking out.';

//Payment Processor Options:
PaymentProcessor      = '';

//Options for Programmers:
OutputItemId          = 'ID_';
OutputItemQuantity    = 'QUANTITY_';
OutputItemPrice       = 'PRICE_';
OutputItemName        = 'NAME_';
OutputItemShipping    = 'SHIPPING_';
OutputItemAddtlInfo   = 'ADDTLINFO_';
OutputOrderSubtotal   = 'SUBTOTAL';
OutputOrderShipping   = 'SHIPPING';
OutputOrderTotal      = 'TOTAL';
AppendItemNumToOutput = false;
HiddenFieldsToCheckout = true;

if ( !bLanguageDefined ) {
   strSorry  = "I'm Sorry, your cart is full, please proceed to checkout.";
   strAdded  = " added to your shopping cart.";
   strRemove = "Click 'Ok' to remove this product from your shopping cart.";
   strILabel = "Product Id";
   strDLabel = "Product Name/Description";
   strQLabel = "Quantity";
   strPLabel = "Price";
   strSLabel = "Shipping";
   strRLabel = "Remove From Cart";
   strRButton= "Remove";
   strSUB    = "SUBTOTAL";
   strSHIP   = "SHIPPING";
   strTOT    = "TOTAL";
   strErrQty = "Invalid Quantity.";
   strNewQty = 'Please enter new quantity:';
   bLanguageDefined = true;
}

function CKquantity(checkString) {
   var strNewQuantity = "";

   for ( i = 0; i < checkString.length; i++ ) {
      ch = checkString.substring(i, i+1);
      if ( (ch >= "0" && ch <= "9") || (ch == '.') )
         strNewQuantity += ch;
   }

   if ( strNewQuantity.length < 1 )
      strNewQuantity = "1";

   return(strNewQuantity);
}

function AddToCart(thisForm) {
   var iNumberOrdered = 0;
   var bAlreadyInCart = false;
   var notice = "";
   iNumberOrdered = GetCookie("NumberOrdered");

   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   if ( thisForm.ID_NUM == null )
      strID_NUM    = "";
   else
      strID_NUM    = thisForm.ID_NUM.value;

   if ( thisForm.QUANTITY == null )
      strQUANTITY  = "1";
   else
      strQUANTITY  = thisForm.QUANTITY.value;

   if ( thisForm.PRICE == null )
      strPRICE     = "0.00";
   else
      strPRICE     = thisForm.PRICE.value;

   if ( thisForm.NAME == null )
      strNAME      = "";
   else
      strNAME      = thisForm.NAME.value;

   if ( thisForm.SHIPPING == null )
      strSHIPPING  = "29.00";
   else
      strSHIPPING  = thisForm.SHIPPING.value;

   if ( thisForm.ADDITIONALINFO == null ) {
      strADDTLINFO = "";
   } else {
      strADDTLINFO = thisForm.ADDITIONALINFO[thisForm.ADDITIONALINFO.selectedIndex].value;
   }
   if ( thisForm.ADDITIONALINFO2 != null ) {
      strADDTLINFO += "; " + thisForm.ADDITIONALINFO2[thisForm.ADDITIONALINFO2.selectedIndex].value;
   }
   if ( thisForm.ADDITIONALINFO3 != null ) {
      strADDTLINFO += "; " + thisForm.ADDITIONALINFO3[thisForm.ADDITIONALINFO3.selectedIndex].value;
   }
   if ( thisForm.ADDITIONALINFO4 != null ) {
      strADDTLINFO += "; " + thisForm.ADDITIONALINFO4[thisForm.ADDITIONALINFO4.selectedIndex].value;
   }

Om man skulle göra en array, behöver man ändra i databasen då också eller räcker det med ett fält för "artikelnamn", ett för "antal" och ett för "styckpris", precis som det är nu?

AndreasCMedlem sedan mars 20011 964 inlägg
#11
   //Is this product already in the cart?  If so, increment quantity instead of adding another.
   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + i;
      database = "";
      database = GetCookie(NewOrder);

      Token0 = database.indexOf("|", 0);
      Token1 = database.indexOf("|", Token0+1);
      Token2 = database.indexOf("|", Token1+1);
      Token3 = database.indexOf("|", Token2+1);
      Token4 = database.indexOf("|", Token3+1);

      fields = new Array;
      fields[0] = database.substring( 0, Token0 );
      fields[1] = database.substring( Token0+1, Token1 );
      fields[2] = database.substring( Token1+1, Token2 );
      fields[3] = database.substring( Token2+1, Token3 );
      fields[4] = database.substring( Token3+1, Token4 );
      fields[5] = database.substring( Token4+1, database.length );

      if ( fields[0] == strID_NUM &&
           fields[2] == strPRICE  &&
           fields[3] == strNAME   &&
           fields[5] == strADDTLINFO
         ) {
         bAlreadyInCart = true;
         dbUpdatedOrder = strID_NUM    + "|" +
                          (parseInt(strQUANTITY)+parseInt(fields[1]))  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strSHIPPING  + "|" +
                          strADDTLINFO;
         strNewOrder = "Order." + i;
         DeleteCookie(strNewOrder, "/");
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         notice = strQUANTITY + " " + strNAME + strAdded;
         break;
      }
   }

   if ( !bAlreadyInCart ) {
      iNumberOrdered++;

      if ( iNumberOrdered > 12 )
         alert( strSorry );
      else {
         dbUpdatedOrder = strID_NUM    + "|" + 
                          strQUANTITY  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strSHIPPING  + "|" +
                          strADDTLINFO;

         strNewOrder = "Order." + iNumberOrdered;
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         SetCookie("NumberOrdered", iNumberOrdered, null, "/");
         notice = strQUANTITY + " " + strNAME + strAdded;
      }
   }

   if ( DisplayNotice )
      alert(notice);
}

function getCookieVal (offset) {
   var endstr = document.cookie.indexOf (";", offset);

   if ( endstr == -1 )
      endstr = document.cookie.length;
   return(unescape(document.cookie.substring(offset, endstr)));
}

function FixCookieDate (date) {
   var base = new Date(0);
   var skew = base.getTime();

   date.setTime (date.getTime() - skew);
}

function GetCookie (name) {
   var arg = name + "=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;

   while ( i < clen ) {
      var j = i + alen;
      if ( document.cookie.substring(i, j) == arg ) return(getCookieVal (j));
      i = document.cookie.indexOf(" ", i) + 1;
      if ( i == 0 ) break;
   }

   return(null);
}

function SetCookie (name,value,expires,path,domain,secure) {
   document.cookie = name + "=" + escape (value) +
                     ((expires) ? "; expires=" + expires.toGMTString() : "") +
                     ((path) ? "; path=" + path : "") +
                     ((domain) ? "; domain=" + domain : "") +
                     ((secure) ? "; secure" : "");
}

function DeleteCookie (name,path,domain) {
   if ( GetCookie(name) ) {
      document.cookie = name + "=" +
                        ((path) ? "; path=" + path : "") +
                        ((domain) ? "; domain=" + domain : "") +
                        "; expires=Thu, 01-Jan-70 00:00:01 GMT";
   }
}

function moneyFormat(input) {
   var dollars = Math.floor(input);
   var tmp = new String(input);

   for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
      if ( tmp.charAt(decimalAt)=="." )
         break;
   }

   var cents  = "" + Math.round(input * 100);
   cents = cents.substring(cents.length-2, cents.length)
           dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;

   if ( cents == "0" )
      cents = "00";

   return(dollars + "." + cents);
}

function RemoveFromCart(RemOrder) {
   if ( confirm( strRemove ) ) {
      NumberOrdered = GetCookie("NumberOrdered");
      for ( i=RemOrder; i < NumberOrdered; i++ ) {
         NewOrder1 = "Order." + (i+1);
         NewOrder2 = "Order." + (i);
         database = GetCookie(NewOrder1);
         SetCookie (NewOrder2, database, null, "/");
      }
      NewOrder = "Order." + NumberOrdered;
      SetCookie ("NumberOrdered", NumberOrdered-1, null, "/");
      DeleteCookie(NewOrder, "/");
      location.href=location.href;
   }
}

function ChangeQuantity(OrderItem,NewQuantity) {
   if ( isNaN(NewQuantity) ) {
      alert( strErrQty );
   } else {
      NewOrder = "Order." + OrderItem;
      database = "";
      database = GetCookie(NewOrder);

      Token0 = database.indexOf("|", 0);
      Token1 = database.indexOf("|", Token0+1);
      Token2 = database.indexOf("|", Token1+1);
      Token3 = database.indexOf("|", Token2+1);
      Token4 = database.indexOf("|", Token3+1);

      fields = new Array;
      fields[0] = database.substring( 0, Token0 );
      fields[1] = database.substring( Token0+1, Token1 );
      fields[2] = database.substring( Token1+1, Token2 );
      fields[3] = database.substring( Token2+1, Token3 );
      fields[4] = database.substring( Token3+1, Token4 );
      fields[5] = database.substring( Token4+1, database.length );

      dbUpdatedOrder = fields[0] + "|" +
                       NewQuantity + "|" +
                       fields[2] + "|" +
                       fields[3] + "|" +
                       fields[4] + "|" +
                       fields[5];
      strNewOrder = "Order." + OrderItem;
      DeleteCookie(strNewOrder, "/");
      SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
      location.href=location.href;      
   }
}
AndreasCMedlem sedan mars 20011 964 inlägg
#12
function GetFromCart( fShipping ) {
   ManageCart( );
}

function RadioChecked( radiobutton ) {
   var bChecked = false;
   var rlen = radiobutton.length;
   for ( i=0; i < rlen; i++ ) {
      if ( radiobutton[i].checked )
         bChecked = true;
   }    
   return bChecked;
} 

QueryString.keys = new Array();
QueryString.values = new Array();
function QueryString(key) {
   var value = null;
   for (var i=0;i<QueryString.keys.length;i++) {
      if (QueryString.keys[i]==key) {
         value = QueryString.values[i];
         break;
      }
   }
   return value;
} 

function QueryString_Parse() {
   var query = window.location.search.substring(1);
   var pairs = query.split("&"); for (var i=0;i<pairs.length;i++) {
      var pos = pairs[i].indexOf('=');
      if (pos >= 0) {
         var argname = pairs[i].substring(0,pos);
         var value = pairs[i].substring(pos+1);
         QueryString.keys[QueryString.keys.length] = argname;
         QueryString.values[QueryString.values.length] = value;
      }
   }
}

function ManageCart( ) {
   var iNumberOrdered = 0;    //Number of products ordered
   var fTotal         = 0;    //Total cost of order
   var fShipping      = 29;    //Shipping amount
   var strTotal       = "";   //Total cost formatted as money
   var strShipping    = "29";   //Total shipping formatted as money
   var strOutput      = "";   //String to be written to page
   var bDisplay       = true; //Whether to write string to the page (here for programmers)

   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   if ( bDisplay )
      strOutput = "<div style=\"padding:5px\"><TABLE cellspacing=\"0\" cellpadding=\"0\" CLASS=\"nopcart\"><TR>" +
                  "<TD style=\"padding-top:5px; border-bottom:1px solid\" CLASS=\"nopheader\" colspan=\"2\"><B>"+strDLabel+"&nbsp;&nbsp;</B></TD>" +
                  "<TD style=\"padding-top:5px; border-bottom:1px solid\" CLASS=\"nopheader\"><B>"+strQLabel+"&nbsp;&nbsp;</B></TD>" +
                  "<TD style=\"padding-top:5px; border-bottom:1px solid\" CLASS=\"nopheader\"><B>"+strPLabel+"&nbsp;&nbsp;</B></TD>" +
                  "<TD style=\"padding-top:5px; border-bottom:1px solid\" CLASS=\"nopheader\"><B>"+strRLabel+"&nbsp;&nbsp;</B></TD></TR>";

   if ( iNumberOrdered == 0 ) {
      strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>Varukorgen är tom</B><BR><BR></CENTER></TD></TR>";
   }

   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + i;
      database = "";
      database = GetCookie(NewOrder);

      Token0 = database.indexOf("|", 0);
      Token1 = database.indexOf("|", Token0+1);
      Token2 = database.indexOf("|", Token1+1);
      Token3 = database.indexOf("|", Token2+1);
      Token4 = database.indexOf("|", Token3+1);

      fields = new Array;
      fields[0] = database.substring( 0, Token0 );                 // Product ID
      fields[1] = database.substring( Token0+1, Token1 );          // Quantity
      fields[2] = database.substring( Token1+1, Token2 );          // Price
      fields[3] = database.substring( Token2+1, Token3 );          // Product Name/Description
      fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
      fields[5] = database.substring( Token4+1, database.length ); //Additional Information

      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
      fShipping  += (parseFloat(fields[4]) );
      strTotal    = moneyFormat(fTotal);
      strShipping = moneyFormat(fShipping);

      if ( bDisplay ) {
         strOutput += "<TR>";

         if ( fields[5] == "" )
            strOutput += "<TD style=\"padding-top:10px; padding-bottom:5px; width:40px;padding-left:6px\" CLASS=\"nopentry\"><span style=\"text-align:left; display:block; width:100%; height:15px; overflow:hidden\">"  + fields[3] + "</span></TD><TD style=\"padding-top:5px; padding-bottom:5px; width:15px; text-align:left\">...</TD>";
         else
            strOutput += "<TD CLASS=\"nopentry\">"  + fields[3] + " - <I>"+ fields[5] + "</I></TD>";

         strOutput += "<TD style=\"padding-top:5px; padding-bottom:5px\" CLASS=\"nopentry\"><INPUT TYPE=TEXT NAME=Q style=\"width:13px; height:8px\" VALUE=\"" + fields[1] + "\" onChange=\"ChangeQuantity("+i+", this.value);\"></TD>";
         strOutput += "<TD style=\"padding-top:5px; padding-bottom:5px\" CLASS=\"nopentry\">"+ moneyFormat(fields[2]) + "</TD>";

         strOutput += "<TD style=\"padding-top:5px; padding-bottom:5px\" CLASS=\"nopentry\" ALIGN=CENTER><input type=button onClick=\"RemoveFromCart("+i+")\" class=\"nopbutton\"></TD></TR>";
      }

      if ( AppendItemNumToOutput ) {
         strFooter = i;
      } else {
         strFooter = "";
      }
      if ( HiddenFieldsToCheckout ) {
         strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
      }

   }
AndreasCMedlem sedan mars 20011 964 inlägg
#13
   if ( bDisplay ) {
      strOutput += "<TR><TD style=\"border-top:1px solid; text-align:right; vertical-align:top\" CLASS=\"noptotal\" COLSPAN=4><B>"+strSUB+"&nbsp;&nbsp;</B></TD>";
      strOutput += "<TD style=\"border-top:1px solid; text-align:left; vertical-align:top\" CLASS=\"noptotal\" COLSPAN=2>" + strTotal + "</TD>";
      strOutput += "</TR>";

      if ( DisplayShippingRow ) {
         strOutput += "<TR><TD style=\"text-align:right; vertical-align:top\" CLASS=\"noptotal\" COLSPAN=4><B>"+strSHIP+"&nbsp;&nbsp;</B></TD>";
         strOutput += "<TD style=\"text-align:left; vertical-align:top\" CLASS=\"noptotal\" COLSPAN=2>29.00</TD>";
         strOutput += "</TR>";
      }

      strOutput += "<TR><TD style=\"text-align:right; vertical-align:top\" CLASS=\"noptotal\" COLSPAN=4><B>"+strTOT+"&nbsp;&nbsp;</B></TD>";
      strOutput += "<TD style=\"text-align:left; vertical-align:top\" CLASS=\"noptotal\" colspan=2>" + moneyFormat((fTotal + 29)) + "</TD>";
      strOutput += "</TR>";

      strOutput += "</TABLE></div>";

      if ( HiddenFieldsToCheckout ) {
         strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ strTotal + "\">";
         strOutput += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ strShipping + "\">";
         strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ moneyFormat((fTotal + fShipping)) + "\">";
      }
   }
   g_TotalCost = (fTotal + fShipping);

   document.write(strOutput);
   document.close();
}

var g_TotalCost = 0;
function ValidateCart( theForm ) {

   if ( MinimumOrder >= 0.01 ) {
      if ( g_TotalCost < MinimumOrder ) {
         alert( MinimumOrderPrompt );
         return false;
      }
   }

   return true;
}

function CheckoutCart( ) {
   var iNumberOrdered = 0;    //Number of products ordered
   var fTotal         = 0;    //Total cost of order
   var fShipping      = 29;    //Shipping amount
   var strTotal       = "";   //Total cost formatted as money
   var strShipping    = "29";   //Total shipping formatted as money
   var strOutput      = "";   //String to be written to page
   var bDisplay       = true; //Whether to write string to the page (here for programmers)
   var strPP          = "";   //Payment Processor Description Field

   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   if ( bDisplay )
      strOutput = "<TABLE width=\"100%\" cellpadding=\"3\" cellspacing=\"0\" CLASS=\"nopcart\"><TR>" +
                  "<TD style=\"border-bottom:1px solid\" CLASS=\"nopheader\"><B>"+strDLabel+"</B></TD>" +
                  "<TD style=\"border-bottom:1px solid\" CLASS=\"nopheader\"><B>"+strQLabel+"</B></TD>" +
                  "<TD style=\"border-bottom:1px solid\" CLASS=\"nopheader\"><B>"+strPLabel+"</B></TD>" +
                  "</TR>";

   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + i;
      database = "";
      database = GetCookie(NewOrder);

      Token0 = database.indexOf("|", 0);
      Token1 = database.indexOf("|", Token0+1);
      Token2 = database.indexOf("|", Token1+1);
      Token3 = database.indexOf("|", Token2+1);
      Token4 = database.indexOf("|", Token3+1);

      fields = new Array;
      fields[0] = database.substring( 0, Token0 );                 // Product ID
      fields[1] = database.substring( Token0+1, Token1 );          // Quantity
      fields[2] = database.substring( Token1+1, Token2 );          // Price
      fields[3] = database.substring( Token2+1, Token3 );          // Product Name/Description
      fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
      fields[5] = database.substring( Token4+1, database.length ); //Additional Information

      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
      fShipping  += (parseFloat(fields[4]) );
      if ( !TaxByRegion ) fTax = (fTotal * TaxRate);
      strTotal    = moneyFormat(fTotal);
      if ( !TaxByRegion ) strTax = moneyFormat(fTax);
      strShipping = moneyFormat(fShipping);

      if ( bDisplay ) {
         strOutput += "<TR>";

         if ( fields[5] == "" )
            strOutput += "<TD CLASS=\"nopentry\"><input style='border:none; width:320px' type=text name='artikelnamn' value='"+ fields[3] +"'></TD>";

         strOutput += "<TD CLASS=\"nopentry\"><input style='border:none; width:25px' type=text name='antal' value='"+ fields[1] +"'></TD>";
         strOutput += "<TD CLASS=\"nopentry\"><input style='border:none; width:40px' type=text name='styckpris' value='"+ moneyFormat(fields[2]) +"'></TD>";

         strOutput += "</TR>";
      }

      if ( AppendItemNumToOutput ) {
         strFooter = i;
      } else {
         strFooter = "";
      }
      if ( PaymentProcessor != '' ) {
         //Process description field for payment processors instead of hidden values.
         //Format Description of product as:
         // ID, Name, Qty X
         strPP += fields[0] + ", " + fields[3];
         if ( fields[5] != "" )
            strPP += " - " + fields[5];
         strPP += ", Qty. " + fields[1] + "\n";
      } else {
         strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
      } 

   }

   if ( bDisplay ) {
      strOutput += "<TR><TD style=\"border-top:1px solid; padding-right:8px; text-align:right\" CLASS=\"nopentry\" COLSPAN=2><B>"+strSUB+"</B></TD>";
      strOutput += "<TD style=\"border-top:1px solid\" CLASS=\"nopentry\" ALIGN=LEFT>" + strTotal + "</TD>";
      strOutput += "</TR>";

      if ( DisplayShippingRow ) {
         strOutput += "<TR><TD style=\"padding-right:8px; text-align:right\" CLASS=\"nopentry\" COLSPAN=2><B>"+strSHIP+"</B></TD>";
         strOutput += "<TD CLASS=\"nopentry\" ALIGN=LEFT>29.00</TD>";
         strOutput += "</TR>";
      }

      strOutput += "<TR><TD style=\"padding-right:8px; text-align:right\" CLASS=\"nopentry\" COLSPAN=2><B>"+strTOT+"</B></TD>";
      strOutput += "<TD CLASS=\"nopentry\" ALIGN=LEFT>" + moneyFormat((fTotal + 29)) + "</TD>";
      strOutput += "</TR>";

      strOutput += "</TABLE>";

      
      if ( PaymentProcessor == 'an') {
         //Process this for Authorize.net WebConnect
         strOutput += "<input type=hidden name=\"x_Version\" value=\"3.0\">";
         strOutput += "<input type=hidden name=\"x_Show_Form\" value=\"PAYMENT_FORM\">";
         strOutput += "<input type=hidden name=\"x_Description\" value=\""+ strPP + "\">";
         strOutput += "<input type=hidden name=\"x_Amount\" value=\""+ moneyFormat((fTotal + fShipping)) + "\">";
      } else if ( PaymentProcessor == 'wp') {
         //Process this for WorldPay
         strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
         strOutput += "<input type=hidden name=\"amount\" value=\""+ moneyFormat((fTotal + fShipping)) + "\">";
      } else if ( PaymentProcessor == 'lp') {
         //Process this for LinkPoint         
         strOutput += "<input type=hidden name=\"mode\" value=\"fullpay\">";
         strOutput += "<input type=hidden name=\"chargetotal\" value=\""+ moneyFormat((fTotal + fShipping)) + "\">";
         strOutput += "<input type=hidden name=\"subtotal\" value=\""+ strTotal + "\">";
         strOutput += "<input type=hidden name=\"shipping\" value=\""+ strShipping + "\">";
         strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
      } else {
         strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ strTotal + "\">";
         strOutput += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ strShipping + "\">";
         strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ moneyFormat((fTotal + fShipping)) + "\">";
      }
   }

   document.write(strOutput);
   document.close();
}
The_HulkMedlem sedan juni 20031 837 inlägg
#14

Du har ju en flagga i ditt första javascript som heter AppendItemNumToOutput = false; det skulle räcka att du ändrar den till true så kommer du att lägga till en siffra efter namnen på input-fälten

Annar för att göra om namnen till arrayer så ska det räcka att lägga till [] efter namnet på input-fälten för de som ska vara arrayer.
T.ex:

strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "[]\" value=\"" + fields[0] + "\">";

för att hämta ut värdena i PHP-filen så behöver du kanske ändra lite så att du loopar över alla värden i arrayerna.

//for-loop
for($i=0;i<sizeof($_POST['ID_']);$i++)
{
    $id = $_POST['ID_'][$i];
}

// foreach-loop
foreach($_POST['ID_'] as $key => $value)
{
    $id = $value;
}

Jag har inte testat koden så det kan säkert finnas fel men du har i alla fall fått lite tips.

AndreasCMedlem sedan mars 20011 964 inlägg
#15

Tack för hjälpen. Lämnade in projektet igår och fick MVG på det. Jag fick ditt svar i på problemet bara 10 minuter innan jag gick ivägg med projektet till skolan, så jag hann aldrig titta på det. Men tack för att du tog dig tid att titta på det iallafall. Man vet aldrig, kanske kan ditt svar vara användbart framöver. Det är ju lätt att bara titta tillbaka på gamla trådar närsomhelst.

148 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)