web-dev-qa-db-ja.com

MySQLテーブルからデータを取得し、PHPを使用してQRコードに挿入するにはどうすればよいですか?

私はこれを持っていますPHP MySQLデータベースからデータを取得してQRコードに埋め込むコード:

 <?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.'" />';
    ?>

ただし、画像のアイコンしか表示されません。誰か助けてもらえますか?ありがとう!

ダニ

2
Dani Valverde

更新:

さて、私はテストをしました。 #__usersテーブルに接続し、現在ログインしているユーザーのIDのnameusernameを次のようにプルしました。

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.'" />';

これによりQRコードが作成されました。その後、スマートフォンでスキャンしたところ、正しいデータが表示されました。したがって、あなたのケースでは、dtabaseテーブル名を任意の名前に変更し、そのテーブルから取得するフィールドに入力します。

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

次に、次のように定義する必要があります。

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

.(equals)記号の前に=(ドット)が表示されます。これは、私のコードに示されているように、最初の1つを除くすべてのユーザーに対して実行する必要があります。

お役に立てれば

1
Lodder