Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果数据库中已经存在,如何生成新的随机值?_Php_Jquery - Fatal编程技术网

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();