如何在PHP中获取echo中的第二个值?

问题描述 投票:0回答:2

我有一些选项要选择,想根据用户的选择将一些文本输入设置为可见或隐藏。我已经有了这个功能,但是在这种情况下,我需要获取echo的第二个值,并检查它是否等于什么,目前我只能检查echo的第一个值。

<select id="type_id" name="device_type_id" onchange="if (this.value==''){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
   <option value='Select'>Select</option>
   <?php foreach ($result as $row) { ?>
     <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
   <?php } ?>
</select>

所以,我只需要得到回声的第一个值 $row['serial_or_imei'] 并比较 onchange="if (this.value=='') ,如何才能做到这一点?

编辑:进一步解释

我需要读取 $row['serial_or_imei'] 这可能是空的,'序列'或'imei',所以,这三个中的一个。P.S: 我必须保留 $row['id']value 属性,因为我以后会把这个值传给服务器,所以不建议去掉它。

php html conditional-statements echo
2个回答
2
投票

你可以添加 one attributeoption element 并用它进行测试。

<select id="type_id" name="device_type_id" onchange="if (this.getAttribute('data')==''){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
   <option value='Select'>Select</option>
   <?php foreach ($result as $row) { ?>
     <option data="<?php echo $row['serial_or_imei'] ?>" value="<?php echo $row['id'] . $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
   <?php } ?>
</select>

2
投票

你可以在函数中比较一个数组的值。onchange 将值分配给一个变量,这个变量的格式很整齐,如

<?php $value = echo $row['serial_or_imei']; ?>
<select id="type_id" name="device_type_id" onchange="if (this.value=='<?php empty($value)?>'){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
   <option value='Select'>Select</option>
   <?php foreach ($result as $row) { ?>
     <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
   <?php } ?>
</select>

2
投票

你添加了一个新的自定义属性 serial 并提供价值的 serial_or_imei 到它,然后在javascript中用 onchange="if (this.value=='')

<select id="type_id" name="device_type_id" onchange="if (this.value==''){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
    <option value='Select'>Select</option>
    <?php foreach ($result as $row) { ?>
    <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>" data-serial="<?php echo $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
    <?php } ?>
</select>

编辑:"选项 "元素不允许有 "序列 "属性。把它改成了data-seial。


0
投票

你说你需要把值传回服务器,因为它们是动态变化的。一个干净的方法是有一个专门的隐藏字段。

<?php foreach ($result as $row) { ?>
    <input type="hidden" name="map[<?php echo $row['id']; ?>]" value="<?php echo $row['serial_or_imei']; ?>">
<? } ?>

这里有一个完整的脚本来说明这个问题。

<?php

$random_serial_or_imei = range(1000, 9999);
shuffle($random_serial_or_imei);

$result = [];
for ($i = 0; $i < 5; $i++) {
    $result[] = [
        'id' => $i,
        'serial_or_imei' => $random_serial_or_imei[$i],
        'name' => "Name #$i",
    ];
}

?>
<select name="device_type_id">
    <option value="">Select</option>
    <?php foreach ($result as $row) { ?>
        <option value="<?php echo $row['id']?>"><?php echo $row['name']; ?></option>
    <?php } ?>
</select>

<?php foreach ($result as $row) { ?>
    <input type="hidden" name="map[<?php echo $row['id']; ?>]" value="<?php echo $row['serial_or_imei']; ?>">
<? } ?>

打印的内容是这样的:

<select name="device_type_id">
    <option value="">Select</option>
            <option value="0">Name #0</option>
            <option value="1">Name #1</option>
            <option value="2">Name #2</option>
            <option value="3">Name #3</option>
            <option value="4">Name #4</option>
    </select>

    <input type="hidden" name="map[0]" value="9513">
    <input type="hidden" name="map[1]" value="3931">
    <input type="hidden" name="map[2]" value="3971">
    <input type="hidden" name="map[3]" value="4476">
    <input type="hidden" name="map[4]" value="6429">

选择的类型可以在 $_POST['device_type_id'] 和相应的IMEI在 $_POST['map'][ $_POST['device_type_id'] ].


0
投票

根据评论中的信息,我认为这个解决方案就是你要找的。请注意,我移动了 onchange 到一个函数,以使其更清晰。

你可以看到 "三 "选项隐藏了文本输入,因为它没有一个 imei.

另外,请注意我是如何使用 data- 属性,这样你就可以在独立于期权的情况下,检索到这些信息。id. 还注意到 this.form['device_imei_textinput'] 没有工作。该 elements 需要参考。

function check_imei(obj, form) {
    var imei = obj.options[obj.selectedIndex].getAttribute('data-imei');

    if (imei == '') {
        form.elements.device_imei_textinput.style.visibility='hidden';
    } else {
        form.elements.device_imei_textinput.style.visibility='visible';
    }  
}
<form>
    <select id="type_id" name="device_type_id" onchange="check_imei(this, this.form);">
        <option value='Select'>Select</option>
        <option value="1" data-imei="foo">One</option>
        <option value="2" data-imei="bar">Two</option>
        <option value="3" data-imei="">Three</option>
    </select>

    <input type="text" id="device_imei_textinput" name="device_imei_textinput" />
</form>

例子的镜像。https:/jsfiddle.netasp1hewx)。

编辑 : 为了解决PHP方面的问题,上面的表格可以用.NET技术生成。

<form>
    <select id="type_id" name="device_type_id" onchange="check_imei(this, this.form);">
        <option value='Select'>Select</option>
        <?php foreach ($result as $row) { ?>
            <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>" data-imei="<?php $row['serial_or_imei'] ?>"><?php echo $row['name'] ?></option>
        <?php } ?>
    </select>

    <input type="text" id="device_imei_textinput" name="device_imei_textinput" />
</form>
© www.soinside.com 2019 - 2024. All rights reserved.