Вы не инициализируете $random_chars
- попробуйте установить его в пустую строку перед конкатенацией.
...
$random_chars="";
foreach($keys as $key){
$random_chars .= $characters[$key];
}
$randNum = rand(2327,9987); $randLet = rand(2327,9987);
echo $random_chars . $randNum;
...
Причина, по которой вы получаете ошибку, более ясна, если вы используете длинный синтаксис...
$random_chars .= $characters[$key];
совпадает с
$random_chars = $random_chars . $characters[$key];
И при первом запуске этой строки кода $random_chars
не существует.
Что касается проверки базы данных, это зависит от используемого вами механизма доступа к данным.
Вам необходимо выполнить запрос, подобный следующему:
SELECT COUNT(*) As RecordCount FROM MyUserTable WHERE MyIdColumn = 'ABC123'
Затем вы прочитали бы значение RecordCount первой строки возвращенного набора записей.Это должно быть 0, если он еще не существует, и> 0, если он существует.
Редактировать: Для уточнения бита базы данных ...
Основной процессследующим образом:
Во время разработки:
- Создать базу данных
- Добавить таблицу для записи этих идентификаторов
Во время выполнения:
- Создать соединение с базой данных
- Отправить запрос, спрашивающий, сколько записей уже имеет этот Id
- Получить ответ («Набор результатов»)
- Экспериментируя с результирующим набором, вы увидите, что сказал сервер.
Здесь можно найти многословное, но подробное введение в PHP и MySQL: http://www.freewebmasterhelp.com/tutorials/phpmysql
Вы также должны прочитатьо том, что называется «SQL-инъекция», о котором вы должны знать при разработке любого веб-сайта, который использует базу данных и может быть просмотрен кем-либо, кроме вас.
Ниже приведен пример кода.Вам нужно изменить имена таблиц и столбцов в соответствии с тем, что вы использовали при создании базы данных.Я предполагаю, что Db-сервер - это та же машина, что и веб-сервер - если нет, измените localhost на соответствующий IP / имя хоста.
$user="username";
$password="password";
$database="database";
mysql_connect("localhost",$user,$password); //Connect to server
@mysql_select_db($database) or die( "Unable to select database"); //Select your database
$query="SELECT * FROM MyUserTable WHERE MyIdColumn = '" . mysql_real_escape_string($random_chars . $randNum) . "'"; //Define the query
$recordset = mysql_query($query);//Run it
$matchingRecordCount = mysql_numrows($recordset)
mysql_close();//Close the Db connection
if(matchingRecordCount>0) {
//It's already in there, generate another
} else {
//It's not already in there
}
Просто чтобы убедиться, что базы данных уже ОЧЕНЬхорош и быстр в выдаче уникальных идентификаторов (читайте в AUTO_INCREMENT), поэтому, если вы по какой-то причине НЕ ДЕЙСТВИТЕЛЬНО хотите использовать его в этом формате, подумайте только об этом.