2016-07-23 9 views
1

フォームに変数をフォーム自体に投稿しようとしています。フォームには、PHPファイルを指すiframeがあります(これには、投稿する必要がある要素があります)。未定義のインデックス:iframeのPHP POST変数

//clerkingpatient.php 
    <?php 
    if ($_SERVER["REQUEST_METHOD"] == "POST") { 

     $con = @pg_connect("host=localhost dbname=datamed user=admin password=admin "); 

     $name = test_input($_POST["name"]); 
     $patient_no = test_input($_POST["patientNo"]); 
     $complains = test_input($_POST["complains"]); 
    } 
    ?> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" target="myframe" onsubmit="return validateForm()" > 
     <table cellpadding="5"> 
<tr> <td><input type="text" name="name" value=""/></td> </tr> 
<tr> <td><input type="text" name="patientNo" value=""/></td> </tr> 
... 
... 
<tr><td> 
      <iframe name="myframe" src="ttabcontrol.php" width="1160px" height="200px" frameborder="0"></iframe> 
       </td> </tr> 
<tr><td width="200px"><button type="submit" value="save" style="height: 35px">Save Data</button></td></tr> 
     </table> 
    </form> 

ザ・テキストフィールドは、私が「お知らせこのエラーを取得するフォームを送信でttabcontrol.php

 //ttabcontrol.php 
     <input type="text" name="complains" value="complains"/> 

である不平を言う:ここでは

は、コードの抽出物である不平を言いますC:\ wamp \ www \ bossmed \ clerking \ clerkingpatient.php(32行目) iframe内の要素を使いたいので間違っています。

+0

いただきました時点? –

+0

フォームを送信するにはjavascriptを使用する必要がありますが、フォームを同じページに送信するのではなく、iframeにアクションを設定する必要があります – RamRaider

+0

フォームの 'action'を' ttabcontrol.php'に設定するだけです。 'PHP_SELF'ではありません。さらに、iframe間でフォームを分割する方法はありません。 –

答えて

0

ページをリロードせずにiframeにデータを投稿する方法の例として、次の簡単な例を使用できます。

<!doctype html> 
<html> 
    <head> 
     <title>Post to an iFrame using Ajax</title> 
     <script type='text/javascript' charset='utf-8'> 

      function ajax(m,u,p,c){ 
       /* 
        m=method 
        u=url 
        p=params {name:value} 
        c=callback 
       */ 
       var xhr=new XMLHttpRequest(); 
       xhr.onreadystatechange=function(){ 
        if(xhr.readyState==4 && xhr.status==200)c.call(this,xhr.response); 
       }; 

       var params=[]; 
       for(var n in p)params.push(n+'='+p[n]); 

       switch(m.toLowerCase()){ 
        case 'post': p=params.join('&'); break; 
        case 'get': u+='?'+params.join('&'); p=null; break; 
       } 

       xhr.open(m.toUpperCase(), u, true); 
       xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
       xhr.send(p); 
      } 


      function initialise(){ 
       var bttn=document.querySelectorAll('input[type="button"]')[0]; 
        bttn.onclick=function(event){ 
         var params={}; 
         var fd=new FormData(document.forms['myform']); 
         for(var key of fd.keys()) params[key]=fd.get(key); 
         ajax.call(this, 'post', document.querySelectorAll('iframe[name="ifr"]')[0].src, params, cbfd); 
        }; 
      } 

      function cbfd(r){ 
       var iframe=document.querySelectorAll('iframe[name="ifr"]')[0].contentWindow.document; 
       iframe.body.innerHTML=r; 
      } 


      document.addEventListener('DOMContentLoaded',initialise,false); 
     </script> 
     <style type='text/css' charset='utf-8'> 
      input[type='text']{ 
       margin:1rem; 
      } 
     </style> 
    </head> 
    <body> 
     <form name='myform' method='post'> 
      <input type='hidden' name='field_1' value='value 1' /> 
      <input type='hidden' name='field_2' value='value 2' /> 
      <input type='hidden' name='field_3' value='value 3' /> 

      <input type='text' name='comment' placeholder='eg: we love javascript' /> 
      <input type='text' name='username' placeholder='eg: fred' /> 

      <input type='button' value='Post' /> 
     </form> 
     <iframe name='ifr' src='iframesrc.php' width=600 height=400></iframe> 
    </body> 
</html> 

そして、この例では、iframeのは、単純にこのようなPHPのページです:IFRAMEの

<?php 
    /* iframesrc.php */ 
    if($_SERVER['REQUEST_METHOD']=='POST'){ 

     /* add in some random data at the iframe for fun and frolics */ 
     $_POST['date']=date(DATE_COOKIE); 
     $_POST['ip']=$_SERVER['REMOTE_ADDR']; 


     echo json_encode($_POST); 
     /* 
     this script could do whatever processing was required 
     with the post variables, any response is used by the 
     ajax callback 
     */ 
    } 
?> 
+0

あなたのソリューションはiframeにデータを投稿しています。しかし、私の場合、投稿されたデータと結合する必要があるiframeにある要素があります。つまり、フォームから患者名と電話番号が転記されますが、文句はiframeにあります。クリックポストですべてのデータ(iframeの要素を含む)を取得するにはどうすればよいですか? – user5747822

+0

ok - iframeに 'clerkingpatient.php'スクリプトに投稿するデータに含める必要がある項目(フォーム要素?)がiframeに含まれていると言っていますか? – RamRaider

+0

うん。詳細を説明しましょう。フォームにはいくつかの要素(Patient_nameテキストフィールド、Patient_numberテキストフィールド、Postボタン)がありますが、iframeにはより多くの要素があります(Compainsテキストペイン)。ポストボタンをクリックすると、すべてのデータ(名前、番号、苦情)をデータベースに保存する必要があります。方法はありますか? – user5747822