ScriptPubKey | : OP_0 14<20 Bytes PublicKeyHash> |
ScriptSig | : (Empty as ScriptSig has been moved to witness field.) |
Witness Field | : <Signature> <PublicKey> |
Witness | Serialization of Witness Data. |
Witness Data | All Witness Fields. |
Witness Field | Witness field can refer to its txIn, start with var_int to indicate number of stack items. |
Stack Item | Starts with a var_int to indicate the length. |
<?php use BitWasp\Buffertools\Buffer; use BitWasp\Bitcoin\Address\SegwitAddress; use BitWasp\Bitcoin\Bitcoin; use BitWasp\Bitcoin\Crypto\Random\Random; use BitWasp\Bitcoin\Key\Factory\PrivateKeyFactory; use BitWasp\Bitcoin\Network\NetworkFactory; use BitWasp\Bitcoin\Script\WitnessProgram; include_once "../libraries/vendor/autoload.php"; include_once("html_iframe_header.php"); if ($_GET['tab'] == 'form1_tabitem1' AND $_SERVER['REQUEST_METHOD'] == 'POST') { try { $networkClass = $_POST['network']; Bitcoin::setNetwork(NetworkFactory::$networkClass()); $network = Bitcoin::getNetwork(); $privKeyFactory = new PrivateKeyFactory(); if (!$_POST['input'] OR ctype_xdigit($_POST['input'])) { if (!$_POST['input']) { $rbg = new Random(); if ($_POST['compression'] == 'y') { $privateKey = $privKeyFactory->generateCompressed($rbg); } else { $privateKey = $privKeyFactory->generateUncompressed($rbg); } } else { if ($_POST['compression'] == 'y') { $privateKey = $privKeyFactory->fromHexCompressed($_POST['input']); } else { $privateKey = $privKeyFactory->fromHexUncompressed($_POST['input']); } } } else { $privateKey = $privKeyFactory->fromWIF($_POST['input'], $network); } $publicKey = $privateKey->getPublicKey(); $publicKeyHash = $publicKey->getPubKeyHash(); $p2wpkhWP = WitnessProgram::v0($publicKeyHash); $p2wpkh = new SegwitAddress($p2wpkhWP); ?> <div class="table-responsive"> <table border=0 class='table'> <tr style='background-color:#f0f0f0'><td>Bech32 Address</td><td><?php echo $p2wpkh->getAddress()?></td></tr> <tr><td>Private Key Hex</td><td><?php echo $privateKey->getHex()?></td></tr> <tr><td>Private Key Wif</td><td><?php echo $privateKey->toWif()?></td></tr> <tr><td>Has Compression?</td><td><?php echo $privateKey->isCompressed() ? "Yes" : "No"?></td></tr> <tr style='background-color:#f0f0f0'><td>Public Key Hex</td><td><?php echo $publicKey->getHex()?></td></tr> <tr style='background-color:#f0f0f0'><td>Has Compression?</td><td><?php echo $publicKey->isCompressed()? "Yes" : "No"?></td></tr> <tr style='background-color:#f0f0f0'><td><span data-toggle="tooltip" title="HASH160 (Publiy Key Hex)" class='explaination'>Publiy Key Hash Hex</span></td><td><?php echo $publicKey->getPubKeyHash()->getHex()?></td></tr> <tr><td>Witness Version</td><td><?php echo $p2wpkhWP->getVersion()?></td></tr> <tr><td>Witness Program</td><td><?php echo $p2wpkhWP->getProgram()->getHex()?></td></tr> <tr style='background-color:#f0f0f0'><td>ScriptPubKey Hex </td><td><?php echo $p2wpkhWP->getScript()->getHex()?></td></tr> <tr style='background-color:#f0f0f0'><td>ScriptPubKey Asm</td> <td> <?php $opcodes = $p2wpkhWP->getScript()->getOpcodes(); foreach( $p2wpkhWP->getScript()->getScriptParser()->decode() as $operation ) { try { $op = $opcodes->getOp($operation->getOp()); } catch (\RuntimeException $e) { $op = ""; } echo $op ? $op . " " : ""; if ($op != 'OP_0' AND $operation->isPush()) { $bytes = (int)ltrim($op, 'OP_PUSHDATA'); $bytes = $bytes > 0 ? $bytes : 1; $hexsize = Buffer::int($operation->getDataSize(), $bytes)->getHex(); echo htmlentities("{$hexsize}<{$operation->getData()->getHex()}> "); } } ?> </td> </tr> </table> </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='?tab=form1_tabitem1#hashtag1' method='post'> <div class="form-group"> <label for="network">Network:</label> <select id="network" name="network" class="form-control" > <?php $networks = get_class_methods(new NetworkFactory()); foreach($networks as $network) { echo "<option value='{$network}'".($network == $_POST['network'] ? " selected": "").">{$network}</option>"; } ?> </select> </div> <div class="form-group"> <label for="input">Private Key (Hex) / WIF:</label> <input class="form-control" type='text' name='input' id='input' value='<?php echo $_POST['input']?>'> * Put empty if you want system assign you a random private key. </div> <div class="form-group"> <label for="compression" >Compression:</label> <select name="compression" class="form-control" id='compression'> <?php $yesno = array("y"=>"Yes", "n"=>"No"); foreach($yesno as $yesno_k=>$yesno_v) { echo "<option value='{$yesno_k}'".($yesno_k == $_POST['compression'] ? " selected": "").">{$yesno_v}</option>"; } ?> </select> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");
<?php use BitWasp\Bitcoin\Bitcoin; use BitWasp\Bitcoin\Key\Factory\PrivateKeyFactory; use BitWasp\Bitcoin\Network\NetworkFactory; use BitWasp\Buffertools\Buffer; use BitWasp\Bitcoin\Address\AddressCreator; use BitWasp\Bitcoin\Address\Bech32AddressInterface; use BitWasp\Bitcoin\Transaction\TransactionFactory; use BitWasp\Bitcoin\Transaction\TransactionOutput; use BitWasp\Bitcoin\Transaction\Factory\Signer; use BitWasp\Bitcoin\Script\ScriptFactory; use BitWasp\Bitcoin\Script\Classifier\OutputClassifier; use BitWasp\Bitcoin\Script\ScriptType; include_once "../libraries/vendor/autoload.php"; $noOfInputs = 10; $noOfOutputs = 10; include_once("html_iframe_header.php"); if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $networkClass = $_POST['network']; Bitcoin::setNetwork(NetworkFactory::$networkClass()); $network = Bitcoin::getNetwork(); $ecAdapter = Bitcoin::getEcAdapter(); $privKeyFactory = new PrivateKeyFactory(); $addrCreator = new AddressCreator(); $spendTx = TransactionFactory::build(); $signItems = []; if (!is_numeric($_POST['no_of_inputs']) OR !is_numeric($_POST['no_of_outputs'])) { throw new Exception("Error in 'no_of_inputs' or 'no_of_outputs'."); } foreach(range(1,$_POST['no_of_inputs']) as $thisInput) { $utxoHash = trim($_POST["utxo_hash_{$thisInput}"]); $utxoNOutput = trim($_POST["utxo_n_{$thisInput}"]); $privkeyhex = trim($_POST["privkey_{$thisInput}"]); $utxoScript = trim($_POST["utxo_script_{$thisInput}"]); if (strlen($utxoHash)>0 AND strlen($utxoNOutput) > 0 AND strlen($privkeyhex) > 0) { $spendTx = $spendTx->input($utxoHash, $utxoNOutput); $signItems[] = [$privkeyhex, $utxoScript]; } else { throw new Exception("Error in 'input#{$thisInput}'."); } } foreach(range(1,$_POST['no_of_outputs']) as $thisOutput) { $address = trim($_POST["address_{$thisOutput}"]); $amount = trim($_POST["amount_{$thisOutput}"]); $recipient = $addrCreator->fromString($address); if (!strlen($address) or !strlen($amount)) { throw new Exception("Error in 'output#{$thisOutput}'."); } if (!$recipient instanceof Bech32AddressInterface) { throw new Exception("Invalid P2WPKH address in 'output#{$thisOutput}' (Check bech32Address)."); } $decodeScript = (new OutputClassifier())->decode($recipient->getScriptPubKey()); if ($decodeScript->getType() != ScriptType::P2WKH) { throw new Exception("Invalid P2WPKH address in 'output#{$thisOutput}' (Check scriptPubKey)."); } $spendTx = $spendTx->payToAddress($amount, $recipient); } $thisTx = $spendTx->get(); $signer = new Signer($thisTx, $ecAdapter); foreach($signItems as $nIn=>$signItem) { $privateKey = $privKeyFactory->fromHexCompressed($signItem[0]); $scriptPubKey = ScriptFactory::fromHex($signItem[1]); $txOutput = new TransactionOutput(0, $scriptPubKey ); $signer = $signer->sign($nIn, $privateKey, $txOutput); } ?> <div class="alert alert-success"> <h6 class="mt-3">Final TX Hex</h6> <textarea class="form-control" rows="5" id="comment" readonly><?php echo $signer->get()->getHex();?></textarea> </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="network">Network: </label> <select name="network" id="network" class="form-control"> <?php $networks = get_class_methods(new NetworkFactory()); foreach($networks as $network) { echo "<option value='{$network}'".($network == $_POST['network'] ? " selected": "").">{$network}</option>"; } ?> </select> </div> <div class="row"> <div class="col-sm-6"> <div class="form-row"> <div class="form-group col"> <label for="no_of_inputs">Inputs: </label> <select class="form-control" id="no_of_inputs" name='no_of_inputs' style='width:auto;' onchange=" var self = $(this); var thisvalue = self.val(); var form = self.closest('form'); $('div[id^=row_input_]',form).hide(); for(var i=1; i<= thisvalue; i++) { $('div[id=row_input_'+ i + ']',form).show(); } "> <?php foreach(range(1,$noOfInputs) as $thisInput) { echo "<option value='{$thisInput}'".($thisInput == $_POST['no_of_inputs'] ? " selected": "").">{$thisInput}</option>"; } ?> </select> </div> </div> <?php $selectedNInputs = is_numeric($_POST['no_of_inputs']) ? $_POST['no_of_inputs'] : 1; foreach(range(1,$noOfInputs) as $thisInput) { ?> <div class="form-row" id='row_input_<?php echo $thisInput?>' style="<?php echo ($thisInput > $selectedNInputs) ? "display:none" : "display:;"?>"> <div class="form-group col-sm-1"> #<?php echo $thisInput?> </div> <div class="form-group col-sm-3"> <input class="form-control" title="UTXO Tx Hash" placeholder='UTXO Tx Hash' type='text' name='utxo_hash_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_hash_{$thisInput}"]?>'> </div> <div class="form-group col-sm-1"> <input class="form-control" title="UTXO N Output" placeholder='N' type='text' name='utxo_n_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_n_{$thisInput}"]?>'> </div> <div class="form-group col-sm-3"> <input class="form-control" title="UTXO ScriptPubKey" placeholder='UTXO ScriptPubKey' type='text' name='utxo_script_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_script_{$thisInput}"]?>'> </div> <div class="form-group col-sm-4"> <input class="form-control" title="Private Key Hex, for signing purpose." placeholder='Private Key Hex' type='text' name='privkey_<?php echo $thisInput?>' value='<?php echo $_POST["privkey_{$thisInput}"]?>'> </div> </div> <?php } ?> </div> <div class="col-sm-6"> <div class="form-row"> <div class="form-group col"> <label for="no_of_outputs">Outputs:</label> <select class="form-control" id="no_of_outputs" name='no_of_outputs' style='width:auto;' onchange=" var self = $(this); var thisvalue = self.val(); var form = self.closest('form'); $('div[id^=row_output_]',form).hide(); for(var i=1; i<= thisvalue; i++) { $('div[id=row_output_'+ i + ']',form).show(); } "> <?php foreach(range(1,$noOfOutputs) as $thisOutput) { echo "<option value='{$thisOutput}'".($thisOutput == $_POST['no_of_outputs'] ? " selected": "").">{$thisOutput}</option>"; } ?> </select> </div> </div> <?php $selectedNOutputs = is_numeric($_POST['no_of_outputs']) ? $_POST['no_of_outputs'] : 1; foreach(range(1,$noOfOutputs) as $thisOutput) { ?> <div class="form-row" id='row_output_<?php echo $thisOutput?>' style="<?php echo ($thisOutput > $selectedNOutputs) ? "display:none" : "display:;"?>"> <div class="form-group col-sm-1"> #<?php echo $thisOutput?> </div> <div class="form-group col-sm-6"> <input class="form-control" placeholder='P2WPKH Address' type='text' name='address_<?php echo $thisOutput?>' value='<?php echo $_POST["address_{$thisOutput}"]?>'> </div> <div class="form-group col-sm-5"> <input class="form-control" placeholder='Amount' type='text' name='amount_<?php echo $thisOutput?>' value='<?php echo $_POST["amount_{$thisOutput}"]?>'> </div> </div> <?php } ?> </div> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");
<?php use BitWasp\Buffertools\Buffer; use BitWasp\Bitcoin\Address\AddressCreator; use BitWasp\Bitcoin\Bitcoin; use BitWasp\Bitcoin\Key\Factory\PrivateKeyFactory; use BitWasp\Bitcoin\Network\NetworkFactory; use BitWasp\Bitcoin\Transaction\Factory\Signer; use BitWasp\Bitcoin\Transaction\TransactionFactory; use BitWasp\Bitcoin\Transaction\TransactionOutput; use BitWasp\Bitcoin\Script\ScriptFactory; use BitWasp\Bitcoin\Script\Classifier\OutputClassifier; use BitWasp\Bitcoin\Script\ScriptType; include_once "../libraries/vendor/autoload.php"; $noOfInputs = 10; $noOfOutputs = 10; if ($_SERVER['REQUEST_METHOD'] == 'GET' AND $_GET['ajax'] == '1') { $data = []; if (!ctype_xdigit($_GET['utx'])) { $data = ["error"=>"UTX must be hex."]; } else { $utxHex = $_GET['utx']; $utx = TransactionFactory::fromHex($utxHex); $outputs = $utx->getOutputs(); $data['txHash'] = $utx->getTxHash()->flip()->getHex();//swap endianess $data['outputs'] = []; if (@count($outputs)) { foreach($outputs as $k=>$output) { if ($k < 10) { //limit to retrieve max 10 inputs only $decodeScript = (new OutputClassifier())->decode($output->getScript()); if ($decodeScript->getType() != ScriptType::P2WKH) { $data = ["error"=>"Load fail! Your unspent transaction output (utxo) can only contain P2WPKH ScriptPubKey."]; break; } $data['outputs'][] = ["amount"=>$output->getValue(), "n"=>$k, "scriptPubKey"=>$output->getScript()->getHex()]; } } } } die(json_encode($data)); } include_once("html_iframe_header.php"); if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $networkClass = $_POST['network']; Bitcoin::setNetwork(NetworkFactory::$networkClass()); $network = Bitcoin::getNetwork(); $ecAdapter = Bitcoin::getEcAdapter(); $privKeyFactory = new PrivateKeyFactory(); $addrCreator = new AddressCreator(); $spendTx = TransactionFactory::build(); $signItems = []; if (!strlen($_POST['utx']) or !ctype_xdigit($_POST['utx'])) { throw new Exception("UTX must be hex."); } if (!is_numeric($_POST['no_of_inputs']) OR !is_numeric($_POST['no_of_outputs'])) { throw new Exception("Error in 'no_of_inputs' or 'no_of_outputs'."); } $utxHex = $_POST['utx']; $utx = TransactionFactory::fromHex($utxHex); $utxos = $utx->getOutputs(); foreach($utxos as $k=>$utxo) { $spendTx = $spendTx->spendOutputFrom($utx, $k); $privkeyhex = trim($_POST["privkey_" . ($k+1)]); $privkey = $privKeyFactory->fromHexCompressed($privkeyhex); $utxoScript = $utxo->getScript()->getHex(); $utxoAmount = $utxo->getValue(); $scriptPubKey = ScriptFactory::scriptPubKey()->p2wkh($privkey->getPubKeyHash()/*hash160*/); if ($utxoScript != $scriptPubKey->getHex()) { throw new Exception("Error in 'input#{$k}'. Private key derived Witness PubKeyHash is not matched to UTXO's ScriptPubKey."); } $signItems[] = [$privkeyhex, $utxoScript,$utxoAmount]; } foreach(range(1,$_POST['no_of_outputs']) as $thisOutput) { $address = trim($_POST["address_{$thisOutput}"]); $amount = trim($_POST["amount_{$thisOutput}"]); if (!strlen($address) or !strlen($amount)) { throw new Exception("Error in 'output#{$thisOutput}'."); } $recipient = $addrCreator->fromString($address); $spendTx = $spendTx->payToAddress($amount, $recipient); } $thisTx = $spendTx->get(); $signer = new Signer($thisTx, $ecAdapter); foreach($signItems as $nIn=>$signItem) { $privateKey = $privKeyFactory->fromHexCompressed($signItem[0]); $scriptPubKey = ScriptFactory::fromHex($signItem[1]); $amount = $signItem[2]; $txOutput = new TransactionOutput($amount, $scriptPubKey ); $signer = $signer->sign($nIn, $privateKey, $txOutput); } ?> <div class="alert alert-success"> <h6 class="mt-3">Final TX Hex</h6> <textarea class="form-control" rows="5" id="comment" readonly><?php echo $signer->get()->getHex();?></textarea> <div class="table-responsive"> <table class='table'> <tr><td><span data-toggle="tooltip" class='explaination' title='([nVersion][txins][txouts][nLockTime]).serialize().sha256d();'>TxId</span></td><td><?php echo $signer->get()->getTxId()->getHex()?></td></tr> <tr><td><span data-toggle="tooltip" class='explaination' title='([nVersion][marker][flag][txins][txouts][witness][nLockTime]).serialize().sha256d();'>WtxId</span></td><td><?php echo $signer->get()->getWitnessTxId()->getHex()?></td></tr> </table> </div> <h6 class="mt-3">Base Serialized Transaction (Without Witness)</h6> <textarea class="form-control" rows="5" id="comment" readonly><?php echo $thisTx->getBaseSerialization()->getHex();?></textarea> </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="network">Network: </label> <select name="network" id="network" class="form-control"> <?php $networks = get_class_methods(new NetworkFactory()); foreach($networks as $network) { echo "<option value='{$network}'".($network == $_POST['network'] ? " selected": "").">{$network}</option>"; } ?> </select> </div> <div class="form-group"> <label for="utx">Unspent Transaction (Hex):</label> <div class="input-group mb-3"> <input class="form-control" type='text' name='utx' id='utx' value='<?php echo $_POST['utx']?>'> <div class="input-group-append"> <input class="btn btn-success" type="button" id="form2_tabitem3_load" value="Load" onclick=" var self = $(this); self.val('......'); var form = self.closest('form'); var allInputDivs = form.find('div[id^=row_input_]'); var allInputs = $( ':input', allInputDivs ); allInputs.val(''); allInputDivs.hide(); $('select#no_of_inputs',form).empty(); $('span#total_inputs',form).html('0'); $.ajax({ url: '?ajax=1&utx=' + $('input#utx',form).val(), success:function(result){ try { j = eval('(' + result + ')'); if ('error' in j && j.error.length>0) { var error = true; } else { var error = false; } if (!error) { var txHash = j.txHash; var outputs = j.outputs; var totalInputs = 0; if (outputs.length > 0) { $('select#no_of_inputs',form).prepend('<option value=\''+outputs.length+'\' selected=\'selected\'>'+outputs.length+'</option>'); var x; for (x in outputs) { var divid = parseInt(x) + 1; var amount = parseInt(outputs[x].amount); totalInputs += amount; $('div#row_input_' + divid ,form).show(); $('input[name=utxo_hash_' + divid+']' ,form).val(txHash); $('input[name=utxo_n_' + divid+']' ,form).val(outputs[x].n); $('input[name=utxo_script_' + divid+']',form).val(outputs[x].scriptPubKey); $('input[name=utxo_amount_' + divid+']',form).val(amount); $('input[name=privkey_'+divid+']' ,form).removeAttr('readonly'); } } $('span#total_inputs',form).html(totalInputs); } else { alert(j.error); } } catch(e) { alert('Invalid Json Format.'); } }, complete:function() { self.val('Load'); } }); "/> </div> </div> <!--* This sample will extract UTX Outputs from provided UTX Hex--> </div> <div class="row"> <div class="col-sm-6"> <div class="form-row"> <div class="form-group col"> <label for="no_of_inputs">Inputs: <small>Max 10 inputs only. Please load them from UTX above.</small></label> <div class="row"> <div class="col-sm-2"> <select class="form-control" id="no_of_inputs" name='no_of_inputs' style='width:auto;' onchange=" var self = $(this); var thisvalue = self.val(); var form = self.closest('form'); $('div[id^=row_input_]',form).hide(); for(var i=1; i<= thisvalue; i++) { $('div[id=row_input_'+ i + ']',form).show(); } " readonly> <?php $optionval = $_POST['no_of_inputs']?$_POST['no_of_inputs'] : 0; if ($optionval > 0) { ?> <option value='<?php echo $optionval?>'><?php echo $optionval?></option> <?php } ?> </select> </div> <div class="col-sm-10"> Total Sathoshi: <span id='total_inputs'> <?php echo array_reduce( array_keys($_POST), function($carry, $key) { if (preg_match('/^utxo_amount_/', $key)) { return $carry + (int)$_POST[$key]; } else { return $carry; } }, 0 );?> </span> </div> </div> </div> </div> <?php $selectedNInputs = is_numeric($_POST['no_of_inputs']) ? $_POST['no_of_inputs'] : 0; foreach(range(1,$noOfInputs) as $thisInput) { ?> <div class="form-row" id='row_input_<?php echo $thisInput?>' style="<?php echo ($thisInput > $selectedNInputs) ? "display:none" : "display:;"?>"> <input type='hidden' name='utxo_amount_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_amount_{$thisInput}"]?>'/> <div class="form-group col-sm-1"> #<?php echo $thisInput?> </div> <div class="form-group col-sm-3"> <input class="form-control" title="UTXO Tx Hash" placeholder='UTXO Tx Hash' type='text' name='utxo_hash_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_hash_{$thisInput}"]?>' readonly> </div> <div class="form-group col-sm-1"> <input class="form-control" title="UTXO N Output" placeholder='N' type='text' name='utxo_n_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_n_{$thisInput}"]?>' readonly> </div> <div class="form-group col-sm-3"> <input class="form-control" title="UTXO ScriptPubKey" placeholder='UTXO ScriptPubKey' type='text' name='utxo_script_<?php echo $thisInput?>' value='<?php echo $_POST["utxo_script_{$thisInput}"]?>' readonly> </div> <div class="form-group col-sm-4"> <input class="form-control" title="Private Key Hex, for signing purpose." placeholder='Private Key Hex' type='text' name='privkey_<?php echo $thisInput?>' value='<?php echo $_POST["privkey_{$thisInput}"]?>'> </div> </div> <?php } ?> </div> <div class="col-sm-6"> <div class="form-row"> <div class="form-group col"> <label for="no_of_outputs">Outputs:</label> <select class="form-control" id="no_of_outputs" name='no_of_outputs' style='width:auto;' onchange=" var self = $(this); var thisvalue = self.val(); var form = self.closest('form'); $('div[id^=row_output_]',form).hide(); for(var i=1; i<= thisvalue; i++) { $('div[id=row_output_'+ i + ']',form).show(); } "> <?php foreach(range(1,$noOfOutputs) as $thisOutput) { echo "<option value='{$thisOutput}'".($thisOutput == $_POST['no_of_outputs'] ? " selected": "").">{$thisOutput}</option>"; } ?> </select> </div> </div> <?php $selectedNOutputs = is_numeric($_POST['no_of_outputs']) ? $_POST['no_of_outputs'] : 1; foreach(range(1,$noOfOutputs) as $thisOutput) { ?> <div class="form-row" id='row_output_<?php echo $thisOutput?>' style="<?php echo ($thisOutput > $selectedNOutputs) ? "display:none" : "display:;"?>"> <div class="form-group col-sm-1"> #<?php echo $thisOutput?> </div> <div class="form-group col-sm-6"> <input class="form-control" placeholder='Any Address' type='text' name='address_<?php echo $thisOutput?>' value='<?php echo $_POST["address_{$thisOutput}"]?>'> </div> <div class="form-group col-sm-5"> <input class="form-control" placeholder='Amount' type='text' name='amount_<?php echo $thisOutput?>' value='<?php echo $_POST["amount_{$thisOutput}"]?>'> </div> </div> <?php } ?> </div> </div> <input type='submit' class="btn btn-success btn-block"/> </form> <?php include_once("html_iframe_footer.php");