Php 如果数据库中已经存在,如何生成新的随机值?
如果数据库中已经存在该值,如何在文本框中自动生成新的随机值 这是我的代码示例Php 如果数据库中已经存在,如何生成新的随机值?,php,jquery,Php,Jquery,如果数据库中已经存在该值,如何在文本框中自动生成新的随机值 这是我的代码示例 <?php $length = 1; $randomString = substr(str_shuffle("123456789"), 0, $length); $mysqli1 = new mysqli("localhost", "root", "", "k"); $sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$rand
<?php
$length = 1;
$randomString = substr(str_shuffle("123456789"), 0, $length);
$mysqli1 = new mysqli("localhost", "root", "", "k");
$sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$randomString'");
if(($sql->num_rows) > 0){
echo "User id exists already.";
}
echo '<input name="id" value="'.$randomString.'">';
?>
感谢您的先进 现在就用这个strottime'now'
来自W3schools:Strotime将英语文本datetime解析为
Unix时间戳自1970年1月1日起的秒数00:00:00
格林尼治标准时间
这将永远是唯一的。所以不会有任何检查需要
以防两个用户同时出现
附加一个随机字符串..例如:
$unique_id=strtotime('now')."".substr(str_shuffle("abcdefghijklmnopqrstuvwxyz"), 0, 5);
显然,您需要一个独特的价值 uniqid函数基于微秒级的当前时间生成唯一ID
echo uniqid();
编辑:OP只需要6个字符。所以试试类似的方法
$id = uniqid();
$id = substr($id,rand(0,strlen($id) - 6),6);
这会更好,你可以试试这个
$randomString = md5(uniqid(rand(), true));
在这个Linux示例中,可以生成一个相当随意的字符串:
substr(sha1(openssl_random_pseudo_bytes(3)), 0, 6);
尽管如此,由于价值域有限,可能会出现重复;以下算法通常有效:
生成标识符
插入带有生成标识符的记录;使用插入忽略。
如果没有受影响的行,请转到1
再次生成它
<?php
$length = 1;
$randomString = substr(str_shuffle("123456789"), 0, $length);
$mysqli1 = new mysqli("localhost", "root", "", "k");
$sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$randomString'");
if(($sql->num_rows) > 0){
$randomString = substr(str_shuffle("123456789"), 0, $length);
}
echo '<input name="id" value="'.$randomString.'">';
?>
但是仍然有重复的机会,除非你使用md5或其他什么工具做出更好的算法。为什么不只是时间呢?是的……这也是一个问题option@Time_to_leave_earth现在的功能是什么?@user3097736:它提供了Unix的当前时间timestamp@Time_to_leave_earth但是太长了。时间如何?printfuniqid:%s\r\n,uniqid;或回声uniqid;如何将字符限制为6个?您为什么选择md5?您能再解释一下您在这里做什么吗?你们应该为每个条目生成一个新的id吗?@jack我想在textbox中生成一个新代码,若它已经是数据库中的一个值。
substr(str_shuffle("123456789"), 0, $length).time();