簡體   English   中英

如何確定在PHP表單中單擊了哪個動態生成的提交按鈕?

[英]How do I determine which dynamically-generated submit button was clicked in my PHP form?

我想編輯一個動態生成的表單(意思是:我不知道將生成多少行)。 此內容是在while循環內生成的,並且生成的HTML已創建了input-type=submit按鈕,生成的同名按鈕與循環中的迭代次數一樣多。

在生成的按鈕中,我想知道單擊了哪個提交按鈕,以便向用戶提供與單擊該按鈕相同的表單。 忽略數據庫名稱和連接數據庫的密碼; 連接很好。

請隨意提出任何新方法以實現所需功能。

代碼如下:

    echo "you have reached your travel details page. your recent travelling details are as follows".'</br>';
$dbc=mysqli_connect('localhost','xyz','xyz','abc') or die("connection to DB failed");
$query="SELECT * FROM travel_details WHERE emailid='{$_SESSION['username']}' ORDER BY dep_date DESC";
$result=mysqli_query($dbc,$query) or die("error in querying the DB");
?>
<h1>Your travel details are:-</h1>
<form name="showtraveldet" METHOD="POST" action="edittraveldet.php">
    <table border="1">
    <tr>
    <th>Starting point</th><th>Ending point</th><th>No of passengers</th><th>Expected fare</th><th>Departure date</th>
    <th>Departure time</th><th>Arrival Date</th><th>Arrival Time</th><th>Car Model</th><th>Car number</th>
    <th>Who is driving</th><th>Driver's license number</th>
    </tr>
<?php
while ($row=mysqli_fetch_array($result)) 
{
    $tid=$row['travel_id'];
    echo "the value of tid is '{$tid}'";
    echo'<tr><td>'.$row['start_point'].'</td><td>'.$row['end_point'].'</td><td>'.$row['no_of_pass'].'</td><td>'.
    $row['exp_fare'].'</td><td>'.$row['dep_date'].'</td><td>'.$row['dep_time'].'</td><td>'.$row['arr_date'].'</td><td>'.$row['arr_time'].'
    </td><td>'.$row['car_model'].'</td><td>'.$row['car_no'].'</td><td>'.$row['who_is_driving'].'</td><td>'.$row['driver_license_no'].'</td>
    <td><input type="submit" name="edit" value="Edit"></td></tr><input type="hidden" name="travelid" value="'.$row['travel_id'].' ;?>">';

}

edittraveldet.php:-

    $travelid=$_POST['travelid'];
echo "the travel id in the variable is $travelid and got the value from '{$_POST['travelid']}'";
$dbc=mysqli_connect('localhost','xyz','xyz','abc') or die("connection to DB failed");
$query="SELECT * FROM travel_details WHERE travel_id='{$travelid}'";
$result=mysqli_query($dbc,$query) or die("error in querying the DB");
mysqli_close($dbc);
$row=mysqli_fetch_array($result);
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validatewheregoing()" name="wheregoing">
        <h1> Enter your travelling details so that other travellers can join you</h1>
        <fieldset>
            <legend> Travelling details </legend>
            Start Point: <input type="text" name="start" value="<?php echo $row['start_point']; ?>"/><br />
            End point: <input type="text" name="end" value="<?php echo $row['end_point']; ?>"/><br />
            Passengers allowed: <input type="number" name="noofpass" value="<?php echo $row['no_of_pass']; ?>"/><br />
            Expected Fare per passengers in rupees:<input type="number" name="fare" value="<?php echo $row['exp_fare']; ?>"/><br />
            Departure Date:<input type="date" name="depdate" value="<?php echo $row['dep_date']; ?>"/><br/>
            Departure time:<input type="time" name="deptime" value="<?php echo $row['dep_time'] ;?>"/><br/>
            Arrival Date:<input type="date" name="arrdate" value="<?php echo $row['arr_date']; ?>"/><br/>
            Arrival time at destination:<input type="time" name="arrtime" value="<?php echo $row['arr_time']; ?>"/><br/>
            Car Model and name:<input type="text" name="cardet" value="<?php echo $row['car_det']; ?>"/><br/> <!--make this as a dropdown box for better database matching-->
            Car Number:<input type="text" name="carno" /><br/><input type="checkbox" name="taxi" value="check this box if pooling a taxi">
            Is the car self driven or driven by driver?<input type="radio" name="drivedet" value="Selfdriven" checked=""/>Self Driven<input type="radio" name="drivedet" value="driverdriven" />Driver driven<br />
            Driver's License number<input type="text" name="licence_no"/></br>
            <input type="checkbox" name="taxi" value="check this box if pooling a taxi"></br>
            <input type="hidden" name="travelid" value="<?php echo $travelid ;?>" />
            <input type="submit" value="invite travellers" name="editwheregoing"/>
        </fieldset>
     </form>

如果僅您可以更改代碼,建議您將form標記本身放在while循環中,每個標記都具有指向相同url的相同操作,但是向目標頁面提交了不同的信息。 這樣,您不必擔心按鈕被點擊

while($row=mysqli_fetch_array($result))
{
    //<form action="sameactionurl.php" name="form_1">
       //<input type="hidden" name="travelid" value="$row['travelid']" />
    //</form>
}

另一個解決方案,如果您不想更改代碼,請在提交表單之前使用JavaScript將通用隱藏字段設置為當前ID的值

以一種標准的方式命名您的提交按鈕,並在其末尾附加一個三位數的數字,“ button_XXXX _ ###”,其中###是數字,而XXX是按鈕的原始名稱。

提交后,檢查您的請求參數中所有以名稱“ button_XXXX”開頭的變量,並將實際名稱“ button_XXXX _ ####”除以“ _”字符,后綴“ ###”將顯示按鈕的編號按下。

但是,為每行創建一個表單可能會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM