Problem med php-script, mysql möjligtvis involverat.

Permalänk
Medlem

Problem med php-script, mysql möjligtvis involverat.

Tjena swecare. Jag har ett litet problem med ett PHP script som vägrar att ta emot data från en http get och/eller vägrar att skicka denna data till en databas. Inga felmeddelande dyker upp i varken apache eller i scriptet i sig. Allt verkar funka men ingen data skrivs till databasen. Jag använder mig av Mals-E som shoppingtjänst och data som scriptet får kan läsas här https://www.mals-e.com/support_topicbody.php?topic_id=26.

Mjukvara på servern:
Apache 2.2.14 (Win32) DAV
PHP 5.2.17, med extensions: php_msql, php_ssql, php_mysql, php_mysqli, php_sockets
MySQL 5.5

Själva PHP-scriptet:

<?PHP include("config.php"); mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database $DBName"); mysql_select_db($DBName) or die("Unable to select database $DBName"); $order_date=time("m j y h:i"); mysql_query("REPLACE INTO orders (username,id,ip,date,method,cart,discount,subtotal,shipping,tax,total,shipping_zone,inv_name,inv_company,inv_addr1,inv_addr2,inv_state,inv_zip,inv_country,del_name,del_addr1,del_addr2,del_state,del_zip,del_country,tel,fax,email,message) VALUES ('$username',$id,'$ip','$order_date','$method','$cart','$discount','$subtotal','$shipping','$tax','$total',$shipping_zone,'$inv_name','$inv_company','$inv_addr1','$inv_addr2','$inv_state','$inv_zip','$inv_country','$del_name','$del_addr1','$del_addr2','$del_state','$del_zip','$del_country','$tel','$fax','$email','$message')"); ?> Done

Konfigurations fil till scriptet:

<?PHP // fill in your data for the variables below $DBhost = "127.0.0.1"; $DBuser = "rättanvändare"; $DBpass = "rättlösenord"; $DBName = "cartorders"; ?>

Databas struktur:

# -------------------------------------------------------- # # Table structure for table 'orders' # CREATE TABLE orders ( id int(10) unsigned DEFAULT '0' NOT NULL, username varchar(8), ip varchar(16), date varchar(18), method varchar(18), cart text, discount decimal(13,2) default '0.00', subtotal decimal(13,2) default '0.00', shipping decimal(13,2) default '0.00', tax decimal(13,2) default '0.00', total decimal(13,2) default '0.00', shipping_zone tinyint(10) unsigned default 0, inv_name varchar(50), inv_company varchar(40), inv_addr1 varchar(50), inv_addr2 varchar(50), inv_state varchar(25), inv_zip varchar(15), inv_country varchar(15), del_name varchar(50), del_addr1 varchar(50), del_addr2 varchar(50), del_state varchar(25), del_zip varchar(15), del_country varchar(15), tel varchar(20), fax varchar(20), email varchar(50), message text, PRIMARY KEY (id) );

Access loggen från Apache då någon beställer:

173.203.201.103 - - [04/Sep/2011:13:26:41 +0200] "GET /orderpopulate/cart_insert.php?username=82339881&id=8786306&ip=78.72.68.127&date=4+Sep+2011+-+13%3A29&method=Other&pay_data=&cart=Test+Slots%2C+Test+%3A+1+%3A+0+%3A+0+%3A+&discount=0.00&subtotal=0.00&shipping=0.00&tax=0.00&total=0.00&shipping_zone=0&shipping_calc=&inv_name=Erik+Andersson&inv_company=Hej&inv_addr1=Nogangata&inv_addr2=Nej&inv_state=Ja&inv_zip=12341&inv_country=GB&del_name=&del_company=&del_addr1=&del_addr2=&del_state=&del_zip=&del_country=&del_tel=&tel=3421523423&fax=&email=oscarreimer93%40hotmail.com&currency=0&extra=&vval=0.00&voucher=&edata=&message=&inv_id=&giftvouchers=&giftvcode=&giftvamount=0.00 HTTP/1.1" 206 6

Visa signatur

Dator1: Chassi Silverstone Fortress II : Cpu AMD Ryzen 7 1700 @ 3.85 GHz : GPU Sapphire R9 390 Nitro (backplate) : MB ASUS Crosshair VI Hero : Ram G.Skill 3200CL14 2x16 @ 1.35V 2933 MHz CL14 : SSD totalt ~2.5 TB : HDD totalt 6 TB
http://hwbot.org/user/oggy_dz2/

Permalänk
Medlem

Testat lägga till or die(mysql_error()) efter mysql_query() ? Från access loggen ser det ju ut som en hel del variabler är tomma.

Permalänk
Inaktiv

För att få variabler från URLen måste du använda dig av $_GET['VARIABEL'];
Du kan skriva som du gjort med register_globals on, men det har varit off sedan PHP4 (om inte minnet sviker mig), och borde inte användas.

Sen border du ALLTID escapa (mysql_real_escape_string($string);) när du sätter in något i databasen, annars finns en stor risk att folk kommer göra sql-injections mot din databas.

Permalänk
Medlem
Skrivet av Oggyoc:

<?PHP include("config.php"); mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database $DBName"); mysql_select_db($DBName) or die("Unable to select database $DBName"); $order_date=time("m j y h:i"); mysql_query("REPLACE INTO orders (username,id,ip,date,method,cart,discount,subtotal,shipping,tax,total,shipping_zone,inv_name,inv_company,inv_addr1,inv_addr2,inv_state,inv_zip,inv_country,del_name,del_addr1,del_addr2,del_state,del_zip,del_country,tel,fax,email,message) VALUES ('$username',$id,'$ip','$order_date','$method','$cart','$discount','$subtotal','$shipping','$tax','$total',$shipping_zone,'$inv_name','$inv_company','$inv_addr1','$inv_addr2','$inv_state','$inv_zip','$inv_country','$del_name','$del_addr1','$del_addr2','$del_state','$del_zip','$del_country','$tel','$fax','$email','$message')"); ?> Done

Hej, du skriver fel i din SQL query

mysql_query("REPLACE INTO orders (username,id,ip,date,method,cart,discount,subtotal,shipping,tax,total,shipping_zone,inv_name,inv_company,inv_addr1,inv_addr2,inv_state,inv_zip,inv_country,del_name,del_addr1,del_addr2,del_state,del_zip,del_country,tel,fax,email,message) VALUES ('$username',$id,'$ip','$order_date','$method','$cart','$discount','$subtotal','$shipping','$tax','$total',$shipping_zone,'$inv_name','$inv_company','$inv_addr1','$inv_addr2','$inv_state','$inv_zip','$inv_country','$del_name','$del_addr1','$del_addr2','$del_state','$del_zip','$del_country','$tel','$fax','$email','$message')");

Det ska vara INSERT INTO i början, inte REPLACE, Alltså:

mysql_query("INSERT INTO orders (username,id,ip,date,method,cart,discount,subtotal,shipping,tax,total,shipping_zone,inv_name,inv_company,inv_addr1,inv_addr2,inv_state,inv_zip,inv_country,del_name,del_addr1,del_addr2,del_state,del_zip,del_country,tel,fax,email,message) VALUES ('$username',$id,'$ip','$order_date','$method','$cart','$discount','$subtotal','$shipping','$tax','$total',$shipping_zone,'$inv_name','$inv_company','$inv_addr1','$inv_addr2','$inv_state','$inv_zip','$inv_country','$del_name','$del_addr1','$del_addr2','$del_state','$del_zip','$del_country','$tel','$fax','$email','$message')");

Annars ser det rätt ut och du ska även tänka på det som havsmonstret skrev.

Permalänk
Medlem
Skrivet av MaxG:

Hej, du skriver fel i din SQL query

mysql_query("REPLACE INTO orders (username,id,ip,date,method,cart,discount,subtotal,shipping,tax,total,shipping_zone,inv_name,inv_company,inv_addr1,inv_addr2,inv_state,inv_zip,inv_country,del_name,del_addr1,del_addr2,del_state,del_zip,del_country,tel,fax,email,message) VALUES ('$username',$id,'$ip','$order_date','$method','$cart','$discount','$subtotal','$shipping','$tax','$total',$shipping_zone,'$inv_name','$inv_company','$inv_addr1','$inv_addr2','$inv_state','$inv_zip','$inv_country','$del_name','$del_addr1','$del_addr2','$del_state','$del_zip','$del_country','$tel','$fax','$email','$message')");

Det ska vara INSERT INTO i början, inte REPLACE, Alltså:

mysql_query("INSERT INTO orders (username,id,ip,date,method,cart,discount,subtotal,shipping,tax,total,shipping_zone,inv_name,inv_company,inv_addr1,inv_addr2,inv_state,inv_zip,inv_country,del_name,del_addr1,del_addr2,del_state,del_zip,del_country,tel,fax,email,message) VALUES ('$username',$id,'$ip','$order_date','$method','$cart','$discount','$subtotal','$shipping','$tax','$total',$shipping_zone,'$inv_name','$inv_company','$inv_addr1','$inv_addr2','$inv_state','$inv_zip','$inv_country','$del_name','$del_addr1','$del_addr2','$del_state','$del_zip','$del_country','$tel','$fax','$email','$message')");

Annars ser det rätt ut och du ska även tänka på det som havsmonstret skrev.

Det är inget fel med replace into om det är det han vill ha. Replace into är ungefär samma sak som insert into ... on duplica key update. Dvs, den ersätter en hel rad om en primary-key krockar.