2010-06-11 2 views
2

PHP 폼이 있습니다. 양식은 작동하지만 첫 번째 항목 이외의 값이 선택되었는지 테스트하려고합니다. If 문을 작성하는 방법을 알 수 없습니다. 내 테이블에서

$products = array(
'' => 1, 
'Item 2' => 2, 
'Item 3' => 3, 
'Item 4' => 4, 
'Item 5' => 5, 
'Item 6' => 6 
); 

$html = generateSelect('products', $products); 

function generateSelect($name = '', $options = array()) { 
$html = '<select name="'.$name.'">'; 
foreach ($options as $option => $value) { 
    $html .= '<option value='.$value.'>'.$option.'</option>'; 
} 
$html .= '</select>'; 
return $html; 
} 

는 드롭 다운 상자가 표시됩니다 : 나는 문을 누군가가 전화 번호를 입력했는지 확인하는 경우 다음과 같은 사용

<tr> 
<td style="width:{$left_col_width}; text-align:left; vertical-align:center; padding:{$cell_padding}; font-weight:bold; {$product[3]}">{$product[0]}</td> 
<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"><select name="{$product[1]}"> 
<option value="1"></option> 
<option value="2">Item 2</option> 
<option value="3">Item 3</option> 
<option value="4">Item 4</option> 
<option value="5">Item 5</option> 
<option value="6">Item 6</option> 
</select></td> 
</tr> 

합니다. 전화 번호를 입력하지 않으면 "전화 :"텍스트가 빨간색으로 바뀝니다. 누군가가 드롭 다운 상자에서 제품 옵션을 선택했는지 확인하기 위해 이와 유사한 if 문을 수행하려면 어떻게합니까?

if(!empty($_POST['phone'])) { 
    $phone[2] = clean_var($_POST['phone']); 
    if (function_exists('htmlspecialchars')) $phone[2] = htmlspecialchars($phone[2], ENT_QUOTES); 
    } 
    else { 
    $error = 1; 
    $phone[3] = 'color:#d20128;'; 
    } 

간단하지만 나는 알아낼 수 없습니다.

편집 1 :

나는 제안을 시도하고, 다음에 가장 지금까지 작동합니다

if ($_POST['product'] != 1){ 

을 나는 '제출'버튼을 클릭 한 후. "Product :"텍스트가 예상대로 빨간색으로 변합니다. 그러나 드롭 다운 상자는 옵션 값 1을 표시하도록 재설정되지만 변수는 여전히 선택된 값으로 유지됩니다.

짧은 질문. 드롭 다운 상자에 항목 5와 같이 표시하려면 어떻게합니까?

+0

어떤 상황에서'htmlspecialchars'가 존재하지 않습니까? 내가 생각하는 이름, 전화 번호 또는 주소 항목의 경우 – Matchu

+0

. 입력 유형 = "텍스트"같은 경우? – Phil

답변

1

제가 올바르게 이해한다면, 귀하의 필요를 충족시키지 못할까요?

if ($_POST['product'] != 1) 
1

'' (즉, 빈 문자열)로 모든 "선택할 수없는"또는 "미 충진 된"value 항목의 설정을 고려한다. 그런 식으로 입력하지 않은 텍스트 입력과 PHP를 동일하게 보게됩니다.

!empty($_POST['phone']) 설정이 정상적으로 작동합니다.

1

쉬운 방법은 값이 비어 있지 않은지 확인하는 것입니다. 그들이 뭔가를 선택할 때 그 옵션과 관련된 값이 반환됩니다. 사람들이 일 수 있기 때문에은 허용 된 옵션 (예 : 1 < = x < = 6) 내에 올린 값이 올바른지 확인하는 것이 더 좋은 방법입니다.은 허위 양식을 만들고 7 공백이 아님).

그래서 이런 식으로 뭔가 :

if ($_POST[$product[1]] >= 1 && $_POST[$product[1]] <= 6) { 
    // It's in range, do something 
    // Make sure that $product[1] is defined 
} 
1

어떻게 예를 들어 표시하는 드롭 다운 상자, 항목 5를 알 수 있습니까? 배열뿐만 아니라 값을

$products = array(
'', 
'Item 2', 
'Item 3', 
'Item 4', 
'Item 5', 
'Item 6', // last comma optional, but I tend to put it in when I'm writing a vertical list 
); 

을 그리고 다음 generateSelect() 기능을 수행해야 : 처음에는

$products = array(
'' => 1, 
'Item 2' => 2, 
'Item 3' => 3, 
'Item 4' => 4, 
'Item 5' => 5, 
'Item 6' => 6 
); 

    function generateSelect($name = '', $options = array()) { 
    $html = '<select name="'.$name.'">'; 
    foreach ($options as $option => $value) { 
     $html .= '<option value='.$value.'>'.$option.'</option>'; 
    } 
    $html .= '</select>'; 
    return $html; 
    } 

, 당신의 $products array() 내가 이런 식으로 할 것, 이상한 방법으로 주위에 .당신이 값이 선택된 경우 $currValuegenerateSelect() 함수에 전달하면

function generateSelect($name='', $options=array(), $currValue='') { 
$html = '<select name="' . $name . '">'; 
foreach ($options as $k => $v) { 
    $html .= '<option value="' . $k . '"' . ($k == $currValue ? ' selected="selected"' : '') . '>' . $v . '</option>'; 
} 
$html .= '</select>'; 
return $html; 
} 

지금, 그것은, 유지됩니다. 나는 그것이 당신이 묻고있는 것이라고 생각합니다.

+0

지금 제안을 시도하고 있지만 $ currValue가 설정되지 않았습니다 – Phil

+0

generateSelect()에 어떻게 전달합니까? 사용자가 제출할 때 전달합니까? – Phil

+0

이러한 기능을 통합하는 방법을 설명하기에 충분한 코드 컨텍스트가 없습니다. 내가 이해하는 한 당신은 양식을 표시하고 제출할 때 제출 양식을 채워 넣은 상태로 다시 표시합니다. 예? 이 경우 제출시받은 값 ('$ _POST' 배열에서 yes?)을'$ currValue'로'generateSelect()'함수에 전달하십시오. – TRiG