ArthurTheLearner
ArthurTheLearner

Reputation: 315

PHP doesn't insert in database

I'm working on a Joomla module. I'm trying to take input from a form and insert it into a database. Here's my "helper.php" code:

<?php

/** post form to db module **/

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );



//--build the form------------>
?>
<form name="names" id="names" action="<?php echo JURI::current(); ?>" method="post">
  <p><input type="text" name="fname" id="fname" value="" /></p>
  <p><input type="text" name="lname" id="lname" value="" /></p>
  <p><input id="submit" name="submit" type="submit" value="Submit Names" /></p>
</form>
<!-- //--END BUILD THE FORM--------| -->
<?
if( (isset($_POST['lname'])) || (isset($_POST['fname'])) ) {
   //first name or last name set, continue-->
   $lname = $_POST['lname'];
   $fname = $_POST['fname'];
/*   $data =new stdClass();
   $data->id = NULL;
   $data->firstname = $fname;
   $data->lastname = $lname;*/

   $db =& JFactory::getDBO();
   $query = "INSERT INTO `#__names` (`fname`, `lname`)
      VALUES ($fname, $lname);";
   $db->setQuery( $query );
   $db->query(); 

}  else {
  echo '<h4>One Field Is Required!</h4>';
}

?>

I can see the form, but when I submit the data it doesn't update the database table. I've checked the Apache error log but it doesn't contain any information about it. What am I missing?

Upvotes: 0

Views: 924

Answers (3)

Elin
Elin

Reputation: 6755

For your query it should be more like this, the way you have it will not work in 2.5.

$db = JFactory::getDbo();

$query = $db->getQuery(true)

->insert($db->quoteName('#__names'))
->columns(array($db->quoteName('fname', 'lname')))
->values($db->quote($fname),$db->quote($lname));
$db->setQuery($query);
$db->execute();

Upvotes: 3

Dharmesh Patel
Dharmesh Patel

Reputation: 1891

Try this:

$query = "INSERT INTO `#__names` (`fname`, `lname`)
  VALUES ('$fname', '$lname');";

Upvotes: 0

GautamD31
GautamD31

Reputation: 28763

Remove ; from query and add quotes to the strings $fname and $lname

$query = "INSERT INTO `#__names` (`fname`, `lname`)
          VALUES ('".$fname."', '".$lname."')";

And OPTIONALLY you need to insert NULL if the fields are empty like

$lname = (trim($lname) != '') ? $lname : 'NULL';
$fname = (trim(fname) != '') ? $fname : 'NULL';

Upvotes: 1

Related Questions