In this article, btcschool applies google QR service for rapid display. In production, it is advise to have local generator library for better performance.
<?php 
include_once "../libraries/vendor/autoload.php";
include_once("html_iframe_header.php");
$supportChains = ['bitcoin'=>"Bitcoin", 'bitcoincash'=>"Bitcoin Cash", 'ethereum'=>"Ethereum"];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    try {
       $ch1 = urlencode("{$_POST['chain']}:{$_POST['recipient']}?amount={$_POST['amount']}&message={$_POST['message']}");
    ?>
	<div class="alert alert-success">
       <img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=<?php echo $ch1?>&choe=UTF-8"/>
	</div>
<?php 
    } catch (Exception $e) {
        $errmsg .= "Problem found. " . $e->getMessage();
    }
} 
if ($errmsg) {
?>
    <div class="alert alert-danger">
        <strong>Error!</strong> <?php echo $errmsg?>
    </div>
<?php
}
?>
<form action='' method='post'>
    <div class="form-group">
		<label for="chain">Chain:</label>		
		<?php
		foreach($supportChains as $k=>$v) {
		?>
			<div class="form-check-inline">
				<label class="form-check-label">
				<?php
				echo "<input type='radio' class='form-check-input' name='chain' value='{$k}'".($k == $_POST['chain'] ? " checked": "")."/>{$v}";
				?>
				</label>
			</div>
		<?php
		}
		?>
	</div>
	
	<div class="form-group">
        <label for="recipient">Recipient Address:</label>
        <input class="form-control" type='text' name='recipient' id='recipient' value='<?php echo $_POST['recipient']?>'>
    </div>
	
	<div class="form-group">
        <label for="amount">Amount:</label>
        <input class="form-control" type='text' name='amount' id='amount' value='<?php echo $_POST['amount']?>'>
    </div>
	
	<div class="form-group">
        <label for="message">Message:</label>
        <input class="form-control" type='text' name='message' id='message' value='<?php echo $_POST['message']?>'>
    </div>
   
    <input type='submit' class="btn btn-success btn-block"/>
</form>
<?php
include_once("html_iframe_footer.php"); 		
	In case app scanner doesn't work to meet your expectation, such as ethereum's ERC20 token, you may consider to input recipient address only.
<?php 
include_once "../libraries/vendor/autoload.php";
include_once("html_iframe_header.php");
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    try {
       $ch1 = urlencode($_POST['recipient']);
    ?>
	<div class="alert alert-success">
       <img src="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=<?php echo $ch1?>&choe=UTF-8"/>
	</div>
<?php 
    } catch (Exception $e) {
        $errmsg .= "Problem found. " . $e->getMessage();
    }
} 
if ($errmsg) {
?>
    <div class="alert alert-danger">
        <strong>Error!</strong> <?php echo $errmsg?>
    </div>
<?php
}
?>
<form action='' method='post'>
   
	
	<div class="form-group">
        <label for="recipient">Recipient Address:</label>
        <input class="form-control" type='text' name='recipient' id='recipient' value='<?php echo $_POST['recipient']?>'>
    </div>
	
    <input type='submit' class="btn btn-success btn-block"/>
</form>
<?php
include_once("html_iframe_footer.php");