【问题标题】:header('Location: ) in php switch to execute url with onclick functionphp 中的 header('Location: ) 切换以使用 onclick 函数执行 url
【发布时间】:2012-01-14 21:23:33
【问题描述】:

简单地说,我有一个带有超链接的变量:

$test3 = '<a href="#" onclick="archiveMove(\''.$mulmov.'\'); return false;">Move to Quotes</a>';

而我需要的是在如下的 switch case 中执行这个变量:

switch ($_POST['dropdown'])  { 

    case "Select Folder":
    echo "Please select";
    break;

    case "One":
    exec($test3); <-- //here i want to run (if this is not execute, my misunderstanding) the link.


    break;

    case "Two":
    header('Location: http://www.facebook.com/'); <-- //this is just a test

    break;


default:
  echo "<br></br>";
  echo "Move multiple files:";
  echo "<br></br>";

  }


  ?>

  <form method="post" name="theform" action="">
    <select name="dropdown">
    <option value="Move to Folder">Select</option>
    <option value="One">One</option>
    <option value="Two">Two</option>
    </select>
    <input type="submit" value="Move"/>
</form>

我想知道如何在用户不点击的情况下执行 ahref 链接,但只需将此链接设置为案例,当用户提交表单时,所选案例将操作超链接。

任何帮助表示赞赏。


更多细节

我知道 javascript 和 php 都是不同的语言,更好的选择是使用 Ajax,但我对 Ajax 的理解有限。

为了更好地解释它,这就是全部发生的事情:

1)我有一个邮箱,里面有一些邮件。

2) 您可以检查这些邮件,然后单击“已选择垃圾箱”链接删除所选邮件。这是链接:

<a href="#" onclick="deleteInbox(\''.$muldel.'\'); return false;">Trash Selected</a>

javascript 函数对所有选定消息执行 $muldel 中的 php 函数并更新数据库。

这是有问题的javascript函数:

function inboxDelete(url) {
    document.messages.action = url;
    document.messages.submit();
}

archiveMove() 是完全一样的,只是为了让事情清楚而临时复制。

3) 我现在重新使用 ahref 代码来执行相同的过程,但这次是将选定的邮件移动到文件夹中。

4)可以从下拉框中选择这些文件夹 - 这是表单的来源。

5) 所以虽然我可以通过添加这样的链接来让它工作:

 $test3 = '<a href="#" onclick="archiveMove(\''.$mulmov.'\'); return false;">Move to Quotes</a>';

echo $test3;

6) 我现在需要它以相同的方式工作,但链接正在更改,具体取决于选择的文件夹。

这就是我的问题的全部范围,我希望这更清楚。

我知道您可以使用 GET 或 POST 将变量发送到 javscript,然后完全通过 javascript 执行该功能。我尝试了以下类似的方法,但无济于事:

<form method=post name="myform" action="<?php echo $PHP_SELF;?>">
    <input type="hidden" name="formVar" value="">
    <input type="text" value="Enter Text Here" name="myText">
    <input type="text" value="Enter Text Here" name="myText2">
    <input type="submit" value="Send form!" onClick="readmove()">
</form>



 <?php
    // Retrieve the hidden form variable (using PHP).

    $myvar = $_POST['formVar'];

    if ($myvar == "$mulmov"){
        echo $mulmov; 
    }

    ?>
        <script language="JavaScript">
    <!--
    function setText(){
      document.myform.myText.value = document.myform.myText.value.toUpperCase();
    }


     function readmove(){
        document.myform.myText.value = "<?php echo $myvar; ?>" ; 
        readmove2();

    }


    function readmove2(){
        if (document.myform.myText.value == "$mulmov"){
            document.myform.myText2.value = "<?php echo $mulmov; ?>" ; 
            <?php exec ('archiveMove(\''.$mulmov.'\');  return false;'); ?>
    } else if (document.myform.myText.value == "$mulmov2"){
            document.myform.myText2.value = "<?php echo $mulmov2; ?>" ; 
    }
    }

</script>

【问题讨论】:

  • “执行一个 URL”?你真的需要弄清楚(然后告诉我们)你的意思是什么。
  • 很难弄清楚你想在这里做什么。您知道客户端 Javascript、服务器端 PHP 以及“执行”的确切含义...?

标签: php location exec href switch-statement


【解决方案1】:

首先,您不能像这样在 PHP 中执行 JavaScript。此时,控件已移至服务器,并且 JavaScript 在客户端运行。

其次,我假设您不想只关注链接,您想运行链接的 onClick 事件,因为 href 只是一个标签。所以你正试图用 PHP 运行一个 JavaScript 函数。您不能从另一种语言的函数中调用一种语言的函数。

很难说你到底想做什么,但是如果你想在用户选择某个下拉菜单时运行一个函数,写一个 php 函数来做 archiveMove() 所做的。如果您希望在不刷新页面的情况下发生这种情况,您可以停止提交过程并使用 javaScript 和 Ajax 调用您的 archiveMove() 函数。

如果详细说明您到底想做什么,也许我们可以提供更多帮助。


好的,那么您的工作代码和不工作代码之间的唯一区别是您想根据下拉列表中选择的内容来指定提交的 URL?

所以你可以使用 JavaScript 来设置下拉列表被选中时的表单动作。

但是,最好每次都使用相同的操作提交表单,然后使用 PHP 来决定要做什么。看起来这就是你最初的目标。只需在 switch 语句中获取文件夹 id 并调用函数进行编辑:

PHP 可以与您拥有它的方式相似:

  switch ($_POST['dropdown'])  { 
    case "Two":
       // set folder id
       $folder_id = 2;
    break;
  }

  moveMessages($_POST['Messages'], $folder_id);

将消息移动到需要去的地方的功能。

    function moveMessages($messages, $folder_id){
        // depending on your form setup
        foreach($data as $id => $value ){
          if($value){
            // code to move to folder
          }
        }

        return true;
    }

如果涉及其他因素,请告诉我。

【讨论】:

    【解决方案2】:

    您可以编写JavaScript 代码,在click hadler 中使用window.location.href 请求网址。

    window.location.href="http://example.com";
    

    【讨论】:

      【解决方案3】:

      好的,这是我的解决方案,但也感谢您的解决方案 Jeff Ryan,这也有效。

      <script language="javascript">
      
      
      
       function buttons(str) 
      {
      document.getElementById("txtHint").innerHTML = str; 
      
      if (document.f1.users.options[1].selected){
          document.getElementById("txtHint").innerHTML ="<?php echo $mulmov; ?>";
          document.messages.action = document.getElementById("txtHint").innerHTML;
      
      
      }
      else if (document.f1.users.options[2].selected){
          document.getElementById("txtHint").innerHTML ="<?php echo $mulmov2; ?>";
          document.messages.action = document.getElementById("txtHint").innerHTML;
      
      
      }
      }
      
      function submit_mes(str)
      {
      
          document.messages.submit();
      }
      
          </script>
      
          <form name="f1">
      <select name="users" onChange="buttons(this.value)">
      <option value="">Select a folder:</option>
      <option value="Quotes">Quotes</option>
      <option value="Projects">Projects</option>
      
      <input type="button" value="Move" onClick="submit_mes(this.value)">
      </select>
      </form>
      
      <div id="txtHint"><b>Folder will be listed here.</b></div>
      

      【讨论】:

        猜你喜欢
        • 2011-12-17
        • 2013-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 2022-01-16
        • 2020-07-28
        相关资源
        最近更新 更多