2

I have this PHP code that should retrieve data from a MySQL database and embed it into a a QR code:

 <?php
    include(JPATH_LIBRARIES . '/phpqrcode/qrlib.php');

$db     = JFactory::getDbo(); 
$user   = JFactory::getUser();

$query = $db->getQuery(true);    
$query->select($db->quoteName(array('Nom', 'Cognoms', 'eCorreu')))
      ->from($db->quoteName('#__rsform_socis'))
      ->where($db->quoteName('Username') . ' = '. $db->quote($user->Username));     
$db->setQuery($query);
$codeContents = $db->loadObjectList();

$data  = $codeContents[0]->Nom;
$data .= $codeContents[0]->Cognoms;
$data .= $codeContents[0]->eCorreu;

$tempDir  = JPATH_SITE . '/images/';   
$fileName = 'qr_'.md5($data).'.png';   
$pngAbsoluteFilePath = $tempDir.$fileName;
$urlRelativeFilePath = JUri::root() .'images/' . $fileName;

if (!file_exists($pngAbsoluteFilePath)) {
    QRcode::png($data, $pngAbsoluteFilePath);
}       
echo '<img src="'.$urlRelativeFilePath.'" />';
    ?>

However, I just get an image icon. Can anyone help? Thanks!

Dani

1

Update:

Ok I've done a test. I connected to the #__users table and pulled the name and username of the ID of the current logged in user like so:

include(JPATH_LIBRARIES . '/phpqrcode/qrlib.php');

$db     = JFactory::getDbo(); 
$user   = JFactory::getUser();

$query = $db->getQuery(true);    
$query->select($db->quoteName(array('name', 'username')))
      ->from($db->quoteName('#__users'))
      ->where($db->quoteName('id') . ' = '. $db->quote($user->id));     
$db->setQuery($query);
$codeContents = $db->loadObjectList();

$data  = $codeContents[0]->name;
$data .= $codeContents[0]->username;

$tempDir  = JPATH_SITE . '/images/';   
$fileName = 'qr_'.md5($data).'.png';   
$pngAbsoluteFilePath = $tempDir.$fileName;
$urlRelativeFilePath = JUri::root() .'images/' . $fileName;

if (!file_exists($pngAbsoluteFilePath)) {
    QRcode::png($data, $pngAbsoluteFilePath);
}       
echo '<img src="'.$urlRelativeFilePath.'" />';

This created the QRCode. I then scanned it on my phone and it displayed the correct data. So in your case, change the dtabase table name to whatever you wish and type in the fields you want to get from that table.

array('name', 'username') // Add what you want here

Then you need to define them like so:

$data .= $codeContents[0]->NAME_OF_FIELD;

You will see a . (dot) before the =(equals) symbol. This needs to be done for all of them apart from the first one as shown on my code.

Hope this helps

  • I cannot check it right now, but I've been studying the code. So then, I would write $codeContents = $results to pass this information into the QR code? – Dani Valverde Oct 3 '14 at 11:15
  • @DaniValverde - I've updated my answer with some more code which loops through all the results and applies them to the QR – Lodder Oct 3 '14 at 11:29
  • You're awsome Lodder. I'll try it when I'm back at home. Thanks – Dani Valverde Oct 3 '14 at 12:14
  • I've tried your code, but I get a MySQL error. Check my updated question for details. – Dani Valverde Oct 3 '14 at 17:33
  • Table doesnt exist? Are you sure you you need to get the data from that table? – Lodder Oct 3 '14 at 17:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.