【问题标题】:Forms action field in html form - not redirecting to correct php codehtml 表单中的表单操作字段 - 不重定向到正确的 php 代码
【发布时间】:2020-07-18 22:24:46
【问题描述】:

添加进一步的解释。我对 php 很陌生,但一般不会编程。 我有一个用于在 wordpress 中创建模板并添加到 WP 页面编辑屏幕的插件 这些模板在一个文件夹中,见下文 C:\Wamp64\www\cbjaxon\wp-content\plugins\cgdmaintroutines\templates
这些 php 文件模板是文件维护例程 有时我需要在 00 和 01 文件之间来回移动 然后有“非页面” php 文件用于插入、删除记录以及 诸如 db_connect.php、错误处理等这些文件位于一个文件夹中 在网站文件夹 cbjaxon 下,即 cbjaxon/Code 单击添加、更新等按钮时,我需要在代码文件夹中调用(?)这些。 还需要从insert.php 循环回01 维护程序。 我会从我在 Stackoverflow 中看到的内容中想到,如果在 C:\Wamp64\www\cbjaxon\wp-content\plugins\cgdmaintroutines\templates
目录我可以使用 $url = 'filename' 并将其放在表单的操作字段中,然后 它会起作用的。但事实并非如此。 我知道我在胡言乱语,但我已经为此奋斗了好几天。

使用 Wordpress 创建页面。 文件实际位于“c:/wamp64/www/cbjaxon/Code/schoolInsert.php” 尝试将 $url 设置为适当的 url,以便可以插入、删除和更新。所有代码文件(插入、更新、删除)位于同一文件夹“c:/wamp64/www/cbjaxon/Code/?????.php。 Wordpress 页面代码位于 C:\Wamp64\www\cbjaxon\wp-ontent\plugins\cgdmaintroutines\templates\schoolMaint01-tpl.php 因此,尝试将表单中的操作字段设置为适当的 $url(并加载到操作字段)以插入、删除或更新。 我尝试使用 ../'s 等将 $url 设置为各种事物,并明确设置为实际文件位置,如下面的最后一个。 问题是我不知道如何让操作字段导航到我的 php 代码。我对php相当陌生。 显示的版本(用于添加)并且是我用作测试的版本,因为它最容易测试。 JS 函数 validateFormOnSubmit 正在工作,因为它不会产生错误。 从下面的路径可以看出,目前这一切都在我的本地计算机上完成。

$url = "/cgdschoolInsert.php"; #
$url = "c:/wamp64/www/cbjaxon/Code/cgdschoolInsert.php";
?>
<div class="maintScreen">
    <form action="<?php echo $url ?>" name="schoolMaintForm"                          
                                  onsubmit="return(validateFormOnSubmit());" method="post">

【问题讨论】:

  • 你会想在this 抢夺。
  • 如果文件位于当前脚本所在的同一文件夹中,则从 $url = "/cgdschoolInsert.php"; 中删除前面的 /

标签: php html action


【解决方案1】:

您似乎正在尝试使用该表单向cgdschoolInsert.php 发送发布请求。您的问题缺少很多信息,但我的假设是:

  • 根据目标 PHP 文件,我假设此 PHP 代码是您的 INSERT 操作,并且您有类似的 cgdschoolDelete.php 用于 DELETE 操作等。
  • 上面带有表单的代码 sn-p 发布在 Web 服务器上的某种网站上(我将在这里使用 http://example.com/mydoc.php 作为工作示例)。

首要任务: 我不确定您的模板和其他设置,但关键是知道您网站上cgdschoolInsert.php 的位置:

  • cgdschoolInsert.php 必须可以通过您网站上的浏览器直接访问
  • 您的$url 必须反映cgdschoolInsert.php 在您的网站上的位置,而不是在您服务器的文件系统中。

换句话说,您应该能够在浏览器中输入cgdschoolInsert.php 的URL 并访问它。例如,如果它与mydoc.php(包含您的表单的文档)位于同一目录中,您应该能够以cgdschoolInsert.php(无斜线)从该表单访问它。如果它位于网站的根目录中,您可以使用http://example.com/cgdschoolInsert.php/cgdschoolInsert.php 访问它。如果它在不同的目录中,您必须自己找出它的实际 URL。我不熟悉您的设置,因此无法提供更多帮助。

请在您的浏览器中尝试。如果不确定,您可以在cgdschoolInsert.php 脚本的顶部放置一个大的&lt;?php echo '&lt;h1&gt;I am here&lt;/h1&gt;' ?&gt;,以确保您的浏览器加载正确的脚本。

那么: 操作 URL 可能包含也可能不包含域。例如,如果您的 mydoc.php 脚本是从 http://example.com/mydoc.php 提供的,则 $url = "/cgdschoolInsert.php" 将具有与 $url = "http://example.com/cgdschoolInsert.php" 相同的效果。 (如果您决定将来将您的网站移动到其他域,前者可能会更好,可以为您节省大量返工。)

最后: 您想要实施不同的操作。您可以通过多种方式做到这一点。您的脚本中建议使用不同的 PHP 脚本进行 INSERT、DELETE、UPDATE。在这种情况下,您可以使用 PHP switch statement 设置正确的 $url “基于传入的变量”(如您所述):

switch($passedVariable) {
    case "INSERT":
        $url = "/cgdschoolInsert.php";   // Change per your finding from the first point
        break;
    case "UPDATE":
        $url = "/cgdschoolUpdate.php";   // Change per your finding from the first point
        break;
    case "DELETE":
        $url = "/cgdschoolDelete.php";   // Change per your finding from the first point
        break;
    default:
        throw new Exception('Bad form action');
}
?>
<div class="maintScreen">
    <form action="<?php echo $url ?>" name="schoolMaintForm"  onsubmit="return(validateFormOnSubmit());" method="post">
    ...

或其他方式

您可以为所有操作使用一个脚本,例如cgdSchoolCRUD.php。您可以在表单中添加隐藏的表单字段:

<form ...>
    <input type="hidden" id="myAction" name="myAction" value="<?php echo $passedVariable ?>">
    ...
</form>

cgdSchoolCRUD.php 中可以使用switch 语句来处理动作:

$myAction = $_POST["myAction"];

switch($myAction) {
    case "INSERT":
        // ... code to insert school
        break;
    case "UPDATE":
        // ... code to update school
        break;
    case "DELETE":
        // ... code to delete school
        break;
    default:
        throw new Exception('Bad form action');
}

另一个小提示: 根据您的系统是否启用它,您可以考虑使用PHP short tags,这可以使您的 HTML 更具可读性。您可以使用&lt;?=$url ?&gt; 的简写代替&lt;?php echo $url ?&gt;

【讨论】:

  • 请查看已编辑的问题。也许它更清楚。顺便说一句:我非常感谢您花时间做出回应。我现在正在尝试不同的东西。如果我在收到回复之前弄清楚了,会告诉你的。
  • 好吧,我发誓我试过这个:$url = "./Code/schoolInsert.php";它没有用。但只是尝试过,它确实做到了。非常感谢您的努力和指导。
  • 不客气!请不要忘记为答案投票:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2013-07-08
  • 2014-10-17
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多