【问题标题】:Two different actions in one form一种形式的两种不同的动作
【发布时间】:2013-12-21 16:19:43
【问题描述】:

我有一个带有两个不同提交按钮的表单。一种是删除MySQL中对应的行,在同一个页面上完成,另一种是将该行保存到另一个数据库,在一个单独的页面上完成。删除操作工作正常,但我无法弄清楚如何将保存表单数据发送到其他页面而不将其放入“操作”值中。我尝试过 JavaScript,但运气不佳。这篇文章有点长,但我认为我提供的信息越多,就越容易找到解决方案。

这里只是保存提交按钮:

   echo "<td><input type=\"submit\" name=\"save\" value=\"Save\" onclick=\"this.form.action='publishmod.php'\"></td>";

这是表单代码(主页):

   echo "<form name=\"editmod\" method=\"post\">";
   echo "<tr class='modlist'>";
   echo "<td>".$row['id']."</td>";
   echo "<td><div class=\"edit\" id=\"div_1\">".$row['title']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_2\"><a href=".$row['mod_url'].">".$row['mod_url']."</a></div></td>";
   echo "<td><div class=\"edit\" id=\"div_3\">".$row['developer']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_4\">".$row['type']."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_5\">".$v162."$nbsp".$v164."$nbsp".$v172."</div></td>";
   echo "<td><div class=\"edit\" id=\"div_6\">".$row['title'].",$nbsp".$row['developer']."</div></td>";
   echo "<td><input type=\"submit\" name=\"save\" value=\"Save\" onclick=\"this.form.action='publishmod.php'\"></td>";
   echo "<td><input type=\"submit\" name=\"delete\" value=\"Delete\"></td>";
   echo "</tr>";
   echo '<input type="hidden" name="id" value="', htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="id" value="', htmlspecialchars($row['mod_url'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="id" value="', htmlspecialchars($row['developer'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="id" value="', htmlspecialchars($row['type'], ENT_QUOTES, 'UTF-8'), '" />';
   echo '<input type="hidden" name="id" value="', htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8'), '" />';
   echo "</form>";
   }

发布代码(保存操作应该重定向到的页面):

出于 Stack Overflow 目的而省略了变量清理。

$name = $_GET['title'];
$desc = "Installation tutorial for '.$name.'";
$url = ereg("^[A-Za-z_\-]+$", $name) + ".php";
$keywords = "'.$name.', '.$dev.'";
$type = $_GET['type'];
$link = $_GET['mod_url'];
$dev = $_GET['developer'];
$id = $_GET['id'];

// Query

$savequery = "INSERT INTO search (title, description, url, keywords, type, mod_url, developer, v162, v164, v172)
            VALUES ('$name', '$desc', '$url', '$keywords', '$type', '$link', '$dev', '$v162', '$v164', '$v172')";

// Mod file creation

$file = ereg("^[A-Za-z_\-]+$", $name) + ".php"; 
$handle = fopen($file, 'w');
$data = '<?php
    $title = "'. $name. '";
    $keywords = "'. $name. ','. $developer. '";
    $description = "How to install '. $name. ' for PC and Mac.";

    include("templates/modheader.php");
    include("templates/modfooter.php");
    ?>';

$save = $dbsave->query($savequery) or die(mysqli_error($dbsave));

// Run creation

echo $save;
fwrite($handle, $data); 
print " mod file created!"; 
fclose($handle);
?>

【问题讨论】:

标签: javascript php html mysql forms


【解决方案1】:

不要将它发送到另一个页面。使用一页并使用if(或switch 或其他)语句进行分支。

例如

if (isset($_POST['save'])) {
    include('save.php');
} elseif (isset($_POST['delete'])) {
    include('delete.php');
} else {
    # logic for when the page is arrived at without the form being submitted with a submit button
}

顺便说一句。 &lt;form&gt; 可能不是&lt;tr&gt; 的父元素,并且没有可能有&lt;td&gt; 作为子元素的元素也可能有&lt;input&gt; 作为子元素,你会发现有些浏览器会移动元素以一种会破坏你的形式的方式让它们被接受。写validHTML。

【讨论】:

    【解决方案2】:

    我认为您应该将提交类型更改为删除和保存按钮的类型,并使用以下 jquery 代码:

    $("#savebutton_id").onclick(function(){
    $("#formid").attr('action','Your save Page');
    $("#formid").submit();
    });
    $("#deletebutton_id").onclick(function(){
    $("#formid").attr('action','Your delete Page');
    $("#formid").submit();
    });
    

    【讨论】:

    • 您是否建议我将删除操作保留在同一页面上,但只需使用此脚本处理这两个操作?
    • 在同一个页面上没问题,但只需将类型更改为按钮而不是提交。
    【解决方案3】:

    您可以使用超链接将数据发送到其他页面

    例如:&lt;a href="page.php?category=1"&gt;Shoes&lt;/a&gt;

    我们可以通过使用获取下一页中的类别变量

    $_GET['category'];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 2011-02-03
      • 2020-12-06
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多