$num = rand(0, 10000); $hash = password_hash($num, PASSWORD_BCRYPT, array( 'cost' => 6 ));
Выше – хеш
<p class="reg-code">Hash: <span><?php echo $hash; ?></span><i class="fa fa-refresh" aria-hidden="true" id="refresh-code"></i></p>
Я бы хотел, чтобы это произошло, когда кто-то нажимает на тег, что он генерирует новый хеш в промежутке, как бы мне это понять?
Я не уверен, как это сделать, например, как функция на PHP или что.
Это должно быть. Потому что он не меняет состояние сервера. Просто верните новое значение.
$('.fa-refresh').click(function(){ $.get( "./path/to/hashscript.php", function( data ) { $( ".reg-code > span" ).html( "Hash:" + data ); }); });
и файл hashscript.php должен содержать
echo md5(uniqid(rand(), TRUE));
Ajax позволяет отправлять запрос на другую страницу без обновления. Проверьте эту часть jQuery Выполните асинхронный запрос HTTP (Ajax)
В вашем случае вы настроены следующим образом (1-й, включите jQuery в начало страницы):
<p class="reg-code">Hash: <span></span> <i class="fa fa-refresh" aria-hidden="true" id="refresh-code"></i></p>
Обратите внимание, что <span>, который будет обрабатывать ответ, пуст (но может показывать исходный хеш в начале. Его содержимое будет заменено так или иначе, когда вы нажмете ссылку), когда мы начнем, и что есть идентификатор, прикрепленный к обновленной ссылке
Затем вы используете jQuery:
$(document).ready( function() { $("#refresh-code").click(function(){ // click on element with ID 'refresh-code' $.ajax({ // method default is 'GET' url: "hash.exe.php", // the PHP page that will generate new hash success: function(html){ // if no PHP error 'html' is the response $(".reg-code > span").html(html); // we append the html in the span }, error: function (request, status, error) { // we handle error alert(request.responseText); } }); }); });
PHP (hash.exe.php) будет выглядеть так (оставив процесс обработанным как есть, добавлен ответ echo'd):
<?php error_reporting(E_ALL); ini_set('display_errors', 1); $num = rand(0, 10000); $hash = password_hash($num, PASSWORD_BCRYPT, array( 'cost' => 6 )); echo"$hash"; // this 'invisible' HTML output is echo'd back to the page who initiated it ?>
Пример объединения всех FIDDLE
Это называется Ajax:
<p class="reg-code"> Hash: <span id="hash"><?php echo $hash; ?></span> <i id="click" class="fa fa-refresh" aria-hidden="true" id="refresh-code"></i> </p> $('#click').click(function(){ $.post( "./path/to/hashscript.php", function( data ) { $( "#hash" ).html( data ); }); });
Вы используете события JavaScript для запроса сервера и обновления элементов страницы с ответом. Ваш PHP-скрипт должен повторить $hash
.
echo password_hash($num, PASSWORD_BCRYPT, ['cost' => 6]);