Ferdia O'Brien
Ferdia O'Brien

Reputation: 869

INSERT won't run for some reason

I'm sure this is something stupid that I'm missing but can anyone identify why the following won't work:

#sanitise variables
$player1 = GetSQLValueString($_POST['player1'], "text");
$battle = GetSQLValueString($_POST['battle'], "text");
$subject = "You Have Registered For ".$battle."";
$subject = GetSQLValueString($subject, "text");
$message = "You Have Registered For ".$battle."<br /><br />
  Keep an eye on your PM's, it won't take long before your challenger appears!";
$message = GetSQLValueString($message, "text");

echo $player1;
echo "<br />";
echo $subject;
echo "<br />";
echo $message;
echo "<br />";
echo $time;
echo "<br />";

#insert alerts into private message databases
mysql_select_db($database_conn, $conn);
$query_rsSendAlert = "INSERT INTO site_private_messages 
  (sender, recipient, read_status, subject, message, `timestamp`) 
  VALUES ('Admin', $player1, 'n', $subject, $message, `$time`)";
mysql_query($query_rsSendAlert, $conn) or die(mysql_error());

The echos are just so I can see the variable before they get inserted (to help spot the problem in other words. Here is an example of what it spits out:

'ferdia'
'You Have Registered For \'Fifa 11 Fracus!\''
'You Have Registered For \'Fifa 11 Fracus!\'

Keep an eye on your PMs, it won\'t take long before your challenger appears!'
1304866340

Here is the table format:

CREATE TABLE `site_private_messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sender` varchar(30) DEFAULT NULL,
  `recipient` varchar(30) DEFAULT NULL,
  `read_status` varchar(1) DEFAULT NULL,
  `subject` varchar(200) DEFAULT NULL,
  `message` text,
  `timestamp` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

Any suggestions?

Upvotes: 2

Views: 101

Answers (3)

h3xStream
h3xStream

Reputation: 6621

The values part should look like this:

VALUES ('Admin', '$player1', 'n', '$subject', '$message', '$time')";

Upvotes: 3

Johan
Johan

Reputation: 76537

Change this:

$query_rsSendAlert = "INSERT INTO site_private_messages 
                        (sender, recipient, read_status, subject, message, `timestamp`) 
                      VALUES 
                        ('Admin', $player1, 'n', $subject, $message, `$time`)";
             //Error, no ` allowed in values, use ' instead.         ^     ^

...into this:

$query_rsSendAlert = "INSERT INTO site_private_messages 
                        (sender, recipient, read_status, subject, message) 
                      VALUES 
                        ('Admin', $player1, 'n', $subject, $message)";

MySQL will fill the timestamp automatically.

Upvotes: 3

Mark Baker
Mark Baker

Reputation: 212412

Chances are, you'll find that your column name timestamp is a reserved word. If you want to use reserved words as column or table names, you must enclose them in backticks

But echo the actual SQL statement, and put in error handling to identify the exact error message that you are getting. Get yourself in the habit of using error handling whenever you use SQL, it will save you a lot of trouble if you get PHP to actually display any MySQL errors when they occur.

Upvotes: 2

Related Questions