For Loop: Променливата си губи стойността

metal_head

Registered
И така, имам един масив с имена на потребители на име $t, това което искам да нарпавя е от масива да изкарам стринг с ID-тата на потребителите, разделени със запетая. Ето какво правя аз:

($length е големината на масива с имената)

PHP:
for($i = 0; $i < $length; $i++){
$member = dbarray("SELECT user_id FROM users WHERE username='".$t[$i]."'");
echo  $member['user_id']."<br>" ;
 if(!empty($member)){
  $numteam = $numteam.$member['user_id'];
 if($i < $length-1) $numteam = $numteam.", ";
}
}

Странното нещо, което ми се получава е, че echo-то връща само едно ID на потребител (само ID-то на първия потребител в масива). $member изглежда взима ID-то на първия потребител от масива и след това, като се завърти цикъла $member сякаш се нулира и спира да се задава. Сигурен съм, че имам потребители с такива имена в базата данни, ако сложа друго от имената на първо място, цикъла ще изпринти пак само неговото ID.
 
Защо го правиш толкова сложно ?

PHP:
$query = mysql_query("SELECT user_id FROM users LIMIT {$length}'");

$ids = array();
while($row = mysql_fetch_assoc($query)){

         $ids[] = $row['user_id'];

}

echo implode(", ", $ids);

Това е 100х по-правилно и точно.

Или май ти по-точно искаш това...

PHP:
$users = array();
foreach($t as $user)
{
         $users[] = "`username` = '{$user}'";
}

$merge = implode(" AND ", $users);

$query = mysql_query("SELECT `user_id` FROM `users` WHERE {$merge}");

$ids = array();
while($row = mysql_fetch_assoc($query)){
          $ids[] = $row['user_id'];
}

echo implode(", ", $ids);

Нещо такова трябва да се получи.
 
Ами не точно. Идеята ми е да мога да напиша няколко имена на потребители, разделени със запетая в един текст фийлд и после тези имена да се превърнат в ID-та ,разделени със запетая. Това, което съм направил аз има някакъв необясним проблем обаче...

EDIT:

Намерих си грешката:
$t = explode(",", $team);
Е да, ама аз ги записвам така: go6o, ivan, niki, pepi, а разделителя, с който explode-вам е запетая без интервал. Ако ги запиша без интервал, всичко работи.
 
Ами не разделяй с explode

а направи така

PHP:
preg_match_all("#\w+#i", $names, $t);

след това, което ти трябва е $t[0] масива. И все пак като цяло метода ти е не е много добър, но ти си знаеш.
 
Благодаря ти за съвета!
Знам, е не е много добро решение това, което съм направил, но нямам проблеми с него защото:
- в тези текстови полетя няма да се пишат много имена и няма да има много заявки
- това е само за администратори, така че само те ще са ощетени със скорост.

знам и как да го подобря.
 

Back
Горе