2015-04-18 2 views
1

Кажется, я ничего не могу найти на этом, и я не могу исправить это самостоятельно после нескольких часов!Loop продолжает получать одну и ту же строку

Код это:

function generatecode() 
{ 
    $token = md5(uniqid(rand(), true)); 
    return $token; 
} 


$number = $_POST['number']; 
$service = $_POST['service']; 
$token = generatecode(); 
if ($service == ""){ 

} 
else { 
    for ($x = 0; $x <= $number; $x++) { 
     $con = mysql_connect($host,$username,$password); 
     mysql_select_db("$db_name", $con); 
     mysql_query("INSERT INTO tokens (id, token, service, used, usedby) VALUES(NULL, '$token','$service','0','')"); 
    } 
} 

Код выше, предполагают, чтобы создать строку случайно столько раз, сколько вы хотите с помощью простого целого [POST].

Когда петли все это выходит только один уникальный идентификатор, когда они должны были (5),

и 1 идентификатор будет одинаковым для всех строк (31a66b9885dba85316d399d6e898b308), так что это выглядит следующим образом:

- 31a66b9885dba85316d399d6e898b308 
- 31a66b9885dba85316d399d6e898b308 
- 31a66b9885dba85316d399d6e898b308 
- 31a66b9885dba85316d399d6e898b308 
- 31a66b9885dba85316d399d6e898b308 

Если кто-то понимает, что я пытаюсь сказать, пожалуйста, оставьте комментарий о том, как это исправить, спасибо!

ответ

2

Вы должны вызвать функцию в каждой итерации, чтобы получить еще один:

function generatecode() { 
    $token = md5(uniqid(rand(), true)); 
    return $token; 
} 

$number = $_POST['number']; 
$service = $_POST['service']; 
if ($service == ""){ 

} 
else { 
    for ($x = 0; $x <= $number; $x++) { 
     $con = mysql_connect($host,$username,$password); 
     // instead of outside, put it inside the loop 
     $token = generatecode(); 
     mysql_select_db("$db_name", $con); 
     mysql_query("INSERT INTO tokens (id, token, service, used, usedby) VALUES(NULL, '$token','$service','0','')"); 
    } 
} 

Я предложил бы использовать PDO с подготовленными операторами. В этой ревизии вам не нужно каждый раз звонить/подключаться, подключаться и снаружи, а также составлять инструкцию, которая также делает ваши запросы более безопасными для SQL-инъекций.

if (!empty($_POST['service'])){ 

    $number = $_POST['number']; 
    $service = $_POST['service']; 

    $db = new PDO("mysql:host={$host};dbname={$dbname}", $username, $password); 
    $insert = $db->prepare("INSERT INTO `tokens` (id, token, service, used, usedby) VALUES(NULL, :token, :service, '0', '')"); 
    for ($x = 0; $x <= $number; $x++) { 
     $token = generatecode(); 
     $insert->execute(array(
      ':token' => $token, 
      ':service' => $service, 
     )); 
    } 
} 
else { 
    // do something else 
} 
+0

Спасибо, это сработало, вы мой спаситель! – Melternet

+0

уверен, что @Melternet я рад, что это помогло – Ghost

Смежные вопросы