I have this script that is supposed to insert the information into a MySQL table, but for some reason it will only save it in the ipn.log file but doesn’t run the insert query. Here is the code that I have.
<?php
//Lets do MySql connection stuff
$mysql_host = 'SERVER'; //Leave at localhost
$mysql_user = 'USER'; //DB User
$mysql_pass = 'PASSWORD'; //DB Pass
$mysql_db = 'DATABASE'; //DB Name
//------------------------------------------------------------------
// Open log file (in append mode) and write the current time into it.
// Open the DB Connection. Open the actual database.
//-------------------------------------------------------------------
$log = fopen("ipn.log", "a");
fwrite($log, "\n\nipn - ".gmstrftime("%b %d %Y %H:%M:%S", time())."\n");
$db = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_select_db($mysql_db, $db);
//------------------------------------------------
// Read post from PayPal system and create reply
// starting with: 'cmd=_notify-validate'...
// then repeating all values sent - VALIDATION.
//------------------------------------------------
$postvars = array();
while(list($key, $value) = each($_POST))
{
$postvars[] = $key;
}
$req = 'cmd=_notify-validate';
for($var = 0; $var < count($postvars); $var++)
{
$postvar_key = $postvars[$var];
$postvar_value = $$postvars[$var];
$req .= "&".$postvar_key."=".urlencode($postvar_value);
}
//--------------------------------------------
// Create message to post back to PayPal...
// Open a socket to the PayPal server...
//--------------------------------------------
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($req)."\r\n\r\n";
$fp = fsockopen("www.paypal.com", 80, $errno, $errstr, 30);
//---------------------------------------------
fwrite($log, "Vals: ". $invoice." ". $receiver_email." ". $item_name." ". $item_number." ". $quantity." ". $payment_status." ". $pending_reason." ".$payment_date." ". $payment_gross." ". $payment_fee." ". $txn_id." ". $txn_type." ". $first_name." ". $last_name." ". $address_street." ". $address_city." ". $address_state . " ".$address_zip." ". $address_country." ". $address_status." ". $payer_email. " ". $payer_status." ". $payment_type." ". $notify_version." ". $verify_sign. "\ n");
// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
//----------------------------------------------------------------------
// Check HTTP connection made to PayPal OK, If not, print an error msg
//----------------------------------------------------------------------
if(!$fp)
{
echo $errstr."(".$errno.")";
fwrite($log, "Failed to open HTTP connection!");
$res = "FAILED";
}
//--------------------------------------------------------
// If connected OK, write the posted values back, then...
//--------------------------------------------------------
else
{
fputs($fp, $header . $req);
//-------------------------------------------
// ...read the results of the verification...
// If VERIFIED = continue to process the TX...
//-------------------------------------------
while(!feof($fp))
{
$res = fgets($fp, 1024);
if(strcmp($res, "VERIFIED") == 0)
{
//--------------------------------------
// Insert Transaction details into DB.
//--------------------------------------
$qry = "INSERT INTO DONATIONS (invoice, receiver_email, item_name, item_number, quantity, payment_status, pending_reason, payment_date, payment_gross, payment_fee, txn_id, txn_type, first_name, last_name, address_street, address_city, address_state, address_zip, address_country, address_status, payer_email, payer_status, payment_type, notify_version, verify_sign) VALUES('$invoice', '$receiver_email', '$item_name', '$item_number', '$quantity', '$payment_status', '$pending_reason', '$payment_date', '$payment_gross', '$payment_fee', '$txn_id', '$txn_type', '$first_name', '$last_name', '$address_street', '$address_city', '$address_state', '$address_zip', '$address_country', '$address_status', '$payer_email', '$payer_status ', '$payment_type', '$notify_version', '$verify_sign')";
$result = mysql_query($qry);
}
}
}
//-------------------------------------------
// Close PayPal Connection, Log File and DB.
//-------------------------------------------
fclose($fp);
fclose($log);
mysql_close($db);
?>
The best way is too find out the “some reason” by putting some tests in the code to see where the error is:
Where you connect to the mysql db:
And where you insert the data in the db:
Now you can find out why the info is not entered in the db by looking into the error.
Also be sure to add this to the beginning of your php file while developing to display errors on screen:
This will show the errors on screen and report all type of errors, it will ease your coding.
I hope this is a good start to troubleshoot your problem.