如何区分foreach循环中的每个提交按钮

时间:2015-05-15 18:48:39

标签: javascript php

我的代码:

<?php
    require_once 'core/init.php';

    if($result = $db->query ("SELECT * from countries")) {
        if($count = $result->num_rows) {
            $rows = $result->fetch_all(MYSQLI_ASSOC);
        }
    }
?>
    <div class="region">
        <h1>Europe</h1>

            <ul class="country" style ="list-style-type:none">
                <?php foreach ($rows as $key => $row) { ?>
                    <li>
                        <a href=""=<?php echo $row['country_id']; ?>">
                        <a href=""=<?php echo $row['region_id']; ?>">
                        <?php echo $row['country_name']; ?></a> <br>
                        <?php
                        if (isset($_FILES['country_img']) === true) {
                            if (empty($_FILES['country_img']['name']) === true) {
                                echo 'please choose a file!';   
                                print_r ($_POST);
                                } else {

                                $allowed = array('jpg', 'jpeg', 'gif', 'png');

                                $file_name = $_FILES['country_img']['name'];
                                $file_extn = end(explode('.', $file_name));
                                $file_temp = $_FILES['country_img']['tmp_name'];
                                if (in_array($file_extn, $allowed) ===true) {
                                    if ($_POST['id'] = $_POST['id']) {
                                    addcountryimage($row['country_id'], $file_temp, $file_extn);
                                    }
                                    header ('Location: tes2.php');
                                    break;
                                    }else {
                                        echo 'Incorrect file type. Allowed: ';
                                        echo implode (', ', $allowed);
                                }
                            }
                        } 
                            if (empty($row['country_img'] === false)) {
                                echo '<img src="', $row['country_img'], '" alt="', $row['country_name'], '\'s Image">';
                            }                           
                        ?>
                        <p> <?php echo $row['country_bio']; ?></p>
                        <?php
                            global $session_user_id;
                            if (is_admin($session_user_id) === true) { ?>
                            <form action="" method="POST" name="" enctype="multipart/form-data">
                                <input type="hidden" name="id" id="hidden_id">
                                <input type="file" name="country_img"> <input type="submit" onclick="document.getElementById('hidden_id').value=$row['country_id']" />
                            </form>
                        <?php } ?>

                        <p> <a href="#">Tour to <?php echo $row['country_name']; ?></a></p>
                    </li>
                <?php } ?>
            </ul>               
            <h3> <a href="#">More European Country </a></h3>                
    </div>

除了无法区分每个提交按钮这一事实外,其他所有功能都有效。例如,当我更新第5个表单上的图像时,它将始终更新第1个表单。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您的问题的根源是在JavaScript事件中使用具有相同值的多个id属性,这被认为是错误的,每个元素ID必须是唯一的,除此之外,提交类型的输入表单的onclick事件是工作不正常。

在循环中添加一个增量计数器,然后用它来区分每个表单隐藏的元素id。

<?php $i = 0;?>
<?php foreach ($rows as $key => $row) { ?>
....
<input type="hidden" name="id" id="hidden_id_<?php echo $i;?>">
....
<input type="submit" onclick="document.getElementById('hidden_id_<?php echo $i;?>').value=$row['country_id']" />
<?php 
 $i++;
} ?>

另一个注意事项,我认为onclick事件对提交类型输入不起作用,因此我建议将其替换为表单中的onsubmit事件:

<form action="" method="POST" name="" enctype="multipart/form-data" onsubmit="document.getElementById('hidden_id_<?php echo $i;?>').value=$row['country_id']">