2013-10-15 5 views
0

관리자가 선택한 여러 사용자를 무작위로 지정하려고합니다.POST에서 동적 변수 가져 오기

먼저, "Users"테이블에서 모든 이름을 읽는 페이지가 있습니다. 그런 다음 관리자가 옆에있는 확인란을 사용하여 이름을 표시하므로 관리자는 참여하지 않을 이름을 선택 취소 할 수 있습니다.

<input name="User<? echo $rows['UserID']; ?>" type="checkbox" value="1" checked/> 

따라서 User1 = 1; User2 = 0; User3 = 1 등등 ...

다음으로 참가자를 무작위 화하기 위해 해당 테이블을 다시 읽을 수 있도록 양식에 선택된 사용자를 데이터베이스에 쓰려고합니다. 이전 양식에서 동적 변수를 읽으려면 어떻게해야합니까? 나는 POST에서 변수를 읽고 변수 플레이어에 저장하기 위해 노력하고있어 (예 : 사용자 1의 값은 재생기 변수에 저장됩니다)이 있지만 작동하지 않는 것 :

$x = 1; 
while ($x <= $total_records) { 
    ${"Player" . $x} = $_POST[ ${"User" . $x} ]; 
    $x++; 
    echo "Player" . $x . " = " . ${"Player" . $x} . "<BR>"; 
} 

결과를 "Player1 =", "Player2 ="입니다. 항상 비어 있습니다.

어떤 아이디어입니까, 더 쉬운 방법일까요? ;) 고마워요!

답변

2

별도의 접근 방법을 권하고 싶습니다. 각 확인란마다 다른 이름을 만드는 대신 배열을 만들고 그 값을 사용자 ID로 지정하는 방법은 무엇입니까? 예를 들어

: 다음

<input type="checkbox" name="User[]" value="<? echo $rows['UserID']; ?>" /> 

, 당신은 제출 된 배열을 반복해야합니다 :

if (isset($_POST['User']) && is_array($_POST['User'])) { 
    foreach ($_POST['User'] as $userId) { 
     // do something with the user id! 
    } 
} 

당신이 "목록", 음, 같은 목록을 유지하려면 다시 사용할 필요가있을 때 재사용 할 수, 당신은 게시 있어요 배열 및 explode()implode() 수 :

$combinedIds = implode(',', $_POST['User']); 
// now you have 1,3,17 

$splitIds = explode(',', $combinedIds); 
// now you have array(1, 3, 17) 
,

db, 세션 변수 등에서 목록을 저장할 수 있습니다. 세션 변수에 저장하는 경우 배열을 직접 저장할 수도 있습니다 (어느 것이 더 쉬운가 = P).

+0

+1. 이것은 훨씬 깨끗합니다. –

+0

그건 정말 좋은 소리. 따라서 데이터베이스에 참가자를 쓰지 않아도 arry를 처리 할 수 ​​있다면 UserID가 "UserName"으로 직접 바뀌면 UserID가 필요 없으므로 목록을 임의로 교체하는 것이 좋습니다. 그래서 UserID 대신 UserName 값을 설정하는 양식을 변경하면 여전히 작동합니까? 나는 User []가 폼에서 무엇을하는지 확신 할 수 없다 ... – Andrewww

+0

@Andrewww 네, 당신이 원하는 고유 한 식별자로'UserId'를 대체 할 수 있습니다; 이름이 엄격히 고유하지 않으면 실제 이름을 사용하지 말 것을 권장합니다. 'User []'는 HTML 폼 요소의 관점에서 그 이름을 공유하는 모든 요소가'User'라는 이름의 "배열"의 일부라는 것을 의미합니다. 양식을 제출하면 사용할 수있는 배열로 제출되어 직접 작성해야하는 작업을 절약 할 수 있습니다.]] – newfurniturey