Ошибка в сообщении PHP. БД проверить как? - PullRequest
0 голосов
/ 18 ноября 2011

Сообщение об ошибке Уведомление:

Undefined variable: random_chars in wamp\www\php_sandbox\idgen.php on line 21

Call Stack:
#   Time    Memory  Function    Location
1   0.0045  678928  {main}( )   ..\idgen.php:0
GPB7446 

Как мне исправить эту ошибку?

Использование этого кода подобно автоматическому генератору уникальных идентификаторов. Как подключиться к БД, чтобы убедиться, что код действительно уникален, прежде чем разрешить назначать его пользователю, создающему новую учетную запись?

Спасибо

<?php
$characters = array(
"A","B","E","F","G","H","J","K","M","N","P","R","S","T","W","X","Y","Z");
$keys = array();
while(count($keys) < 3) {
$x = mt_rand(0, count($characters)-1);
if(!in_array($x, $keys)) {
$keys[] = $x;
}
}
foreach($keys as $key){
$random_chars .= $characters[$key];}
$randNum = rand(2327,9987); $randLet = rand(2327,9987);
echo $random_chars . $randNum;
?>

Ответы [ 4 ]

2 голосов
/ 18 ноября 2011

Вы не инициализируете $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), поэтому, если вы по какой-то причине НЕ ДЕЙСТВИТЕЛЬНО хотите использовать его в этом формате, подумайте только об этом.

0 голосов
/ 18 ноября 2011

Вы должны объявить и инициализировать $random_chars перед тем, как начать с ним что-либо связывать.

Исправлено ниже.Я установил random_chars в пустую строку.$random_chars = "";

$characters = array("A","B","E","F","G","H","J","K","M","N","P","R","S","T","W","X","Y","Z");
$keys = array();
while(count($keys) < 3) {
         $x = mt_rand(0, count($characters)-1);
         if(!in_array($x, $keys)) {
         $keys[] = $x;}
}

$random_chars = ""; //Here

foreach($keys as $key){
      $random_chars .= $characters[$key];
}
$randNum = rand(2327,9987); $randLet = rand(2327,9987);
echo $random_chars . $randNum;
0 голосов
/ 18 ноября 2011

Вы можете просто объявить $random_chars = ""; выше foreach($keys as $key), и это должно исправить

0 голосов
/ 18 ноября 2011

Просто инициализируйте $random_chars пустой строкой перед циклом:

$random_chars = "";
foreach($keys as $key) {
  $random_chars .= $characters[$key];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...