繁体   English   中英

在action.php中的表单外定位按钮?

[英]Targetting button outside of a form in action.php?

我目前有2种表单,这些表单将数据添加到数据库中。 它们都可以工作,但是每个都有自己的提交按钮-我只希望一个提交按钮来收集所有表单中的数据。

我找到了一些应该设定交易条件的JavaScript;

$("#submitbutton").click(function(){
$("#form1").submit();
$("#form2").submit();
});

我要定位的按钮在这两种形式之外,如下所示:

<input id="submitbutton" type="button" value="add">

我很确定它不起作用的原因是因为我的php编写方式。 我针对每种表单中的提交按钮执行php。 您可以在下面查看表格和php。

其中一种形式允许您上传图片;

<form id="form1" action="addimage.php" method="post" enctype="multipart/form-data">
            <input type="file" name="image" />
            <br/><br/>
            <input type="submit" name="sumit" value="Upload" />
        </form>

动作文件包含此php;

<?php
        if(isset($_POST['sumit']))
    {
      if(getimagesize($_FILES['image']['tmp_name'])== FALSE)
      {
        echo "Please select an image.";
      }
      else
      {
        $image= addslashes($_FILES['image']['tmp_name']);
        $name= addslashes($_FILES['image']['name']);
        $image= file_get_contents($image);
        $image= base64_encode($image);
        saveimage($name,$image);
      }
    }
        displayimage();
        function saveimage($name,$image)
        { 
      $con=mysql_connect("localhost","root","");
      mysql_select_db("ssdb",$con);
      $qry="insert into pictures (name,image) values ('$name','$image')";
      $result=mysql_query($qry,$con);
      if($result)
      {
                //echo "<br/>Image uploaded.";
            }
            else
            {
                //echo "<br/>Image not uploaded.";
            }
    }
            function displayimage()
            {
      $con=mysql_connect("localhost","root","");
      mysql_select_db("ssdb",$con);
      $qry="select * from pictures";
      $result=mysql_query($qry,$con);
      while($row = mysql_fetch_array($result))
      {
        echo '<img height="300" width="300" src="data:image;base64,'.$row[2].' "> ';
      }
      mysql_close($con); 
    }
  ?>

另一种形式使您可以在从我的数据库收集的多个类别之间进行选择。

<form id="form2" action="checkbox.php" method="post">
          <label for="Category">Category</label>
          <br />
            <!-- iterate through the WHILE LOOP  -->
            <?php while($row = mysqli_fetch_array($result_category)): ?>
              <!-- Echo out values {id} and {name}   -->
              <input type="checkbox" name="category[]" value=" <?php echo $row['id']; ?> "><?php echo $row['name'] . '<br />'; ?>
            <?php endwhile; ?>
           <input type="submit" name="Submit" value="Submit" class="btn btn-default"/>
         </form>

并具有以下php;

<?php
include("config.php");
$checkbox = $_POST['category'];
if($_POST["Submit"]=="Submit")
{
  for ($i=0; $i<sizeof($checkbox);$i++) {
    $query = "INSERT INTO placecategory (category_id) VALUES ('".$checkbox[$i]."')";
    mysql_query($query) or die(mysql_error());
  }
  echo "Category is inserted";
}
?>

我已经尝试定位要使javascript执行的新按钮,但是它似乎不起作用,因为该按钮不在表格内。

有没有一种方法可以将表单之外的按钮作为目标,因此单击该按钮时php会执行? 或者我该如何重写呢?

任何帮助表示赞赏!

不确定我是否完全了解您要执行的操作,但可以使用HTML5尝试此操作,在第二个form="form2"添加form="form1"form="form2" ,让我知道这是否可行。

<form id="form1" action="addimage.php" method="post" enctype="multipart/form-data">
        <input type="file" name="image" />
        <br/><br/>
        <input type="submit" name="sumit" value="Upload" />
</form>
<input type="submit" name="sumit" value="Upload" form="form1" />

考虑到您的补充注释,假设您具有以下条件,则建议的javascript序列将起作用:

  • 两种形式的抑制按钮,例如<input type="submit"... />
  • 在表单外部添加了新按钮<button name="submitbutton">...</button>
  • 相应地修改了PHP部分,分别引用$_POST['submitbutton']而不是sumitSubmit

你没有报告如何目前还无法工作,所以上面的步骤只针对恰恰关系到你一个独特的外形成一个取代两个形式的按钮的事实的变化。

但是其他地方可能会出错。 我特别注意到(至少对我而言)您获取和处理图像的非常规方式。 另外,您还必须确保您的javascript部分已真正执行。

让我知道它是否仍然无法解决,而不是添加对问题出处的精确描述。


根据您提供的评论和实时预览进行编辑。

完全不可能进行完全测试,因为服务器PHP部分无法访问,因为我们可以使用Firebug调试JS部分。

因此添加断点,我们可以观察到,只要$("#form1").submit(); 执行完毕后,服务器将返回一个新页面,其中显示“已添加位置!”。 信息。
另一方面,在未设置任何断点的情况下,服务器将返回带有“插入类别!”的新页面。 信息。

尽管OP没有显示当前实时预览中的addingplace.php部分,并且未与checkbox.php部分进行比较,但我们可以猜测:

  1. 在减少执行的部分,第一步addingplace.php确实按预期工作。
  2. 我们在整个执行过程中观察到的内容仅意味着这三个部分均按预期工作,但每个部分的返回消息都被下一个部分覆盖,但最后一个部分被覆盖。

换句话说,当您评论“似乎只提交了最后一个表单”时,这是基于您只能看到的内容的错误印象。
为了确保这是真的, 您应该控制数据库中真正更新的内容。
让我知道。

也就是说,必须指出的是,这说明了这种情况下服务器浏览器的工作方式:正如@David在OP下的注释中指出的那样,提交表单会使浏览器立即收到一个新页面,该页面将覆盖当前一个。

在当前示例中,该方法之所以有效,是因为只有很少的几种形式,并且所有三种形式都在非常短的时间内(几乎立即submit() :因此,可以在第一个submit()返回的页面出现之前执行第三个submit()方法。

因此,在您的示例中,建议完成全部工作的方法是仅使用一种表单及其唯一的提交按钮。 顺便说一句,我想知道为什么您想要具有以下三种形式的更复杂的结构:预期收益是什么?

最后一点,除了您所报告的确切问题之外:您应该注意编码方式。 HTML部分中有很多不一致性,例如:已经存在的<body><html><body>部分; 异国情调的<br></br> ; 您还保留了第一个表格中的补充按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM