[PHP] Submit werkt niet in pagina die in DIV wordt geladen

Pagina: 1
Acties:
  • 576 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:03

The.Terminator

Un boer met bier

Topicstarter
Ik heb het probleem dat mijn Form niet word gesubmit (iig niet correct).
Er word geen foutmelding of iets anders weer gegeven.

Heb een pagina cpanel.php die een DIV heeft met ID "CPanel"
In die DIV laad ik een andere PHP pagina in doormiddel van "fetcher.js"

cpanel.php
code:
1
<a href="javascript:loadContent('page_edit.php','CPanel')">page edit</a>


fetcher.js
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function loadContent(url, divID)
    { 
        var xmlRequest = null; 
        
        if(window.XMLHttpRequest)
            xmlRequest = new XMLHttpRequest(); 
        else if (window.ActiveXObject)  
            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
        
        xmlRequest.onreadystatechange = function()
        { 
            if(xmlRequest.readyState == 4)
            {
                if(xmlRequest.status == 200) 
                    document.getElementById(divID).innerHTML = xmlRequest.responseText; 
                else 
                    alert("Error: " + xmlRequest.status);
            } 
        }
        xmlRequest.open("POST", url, true); 
        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
        xmlRequest.send(null); 
    }


Dit werkt perfect, behalve als ik "page_edit.php" gebruik ism een form.
page_edit.php laad perfect in de DIV en laat allemaal invoervelden zien, alleen als ik op de submit knop druk dan werkt deze niet.

page_edit.php ziet eruit als volgt

[b]
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
[/b]
<?php
    include("../includes/database.php");
    include("../includes/parameters.php");
    include("../includes/validatesession.php");
    
    $connection = mysql_connect($host,$user,$pass) or die(mysql_error()); 
    mysql_select_db($mysql);
    
    if (isset($_POST['sub_update_x'])) {
    $q_editportfolio = "UPDATE blaat SET p_name='" . $_POST['fld_name'] . "' WHERE p_id = '" . $_GET['id'] . "'";
        $r_editportfolio = mysql_query($q_editportfolio) or die(mysql_error());     
    }
    
    if (isset($_GET['id'])) {   
        $q_portfolio = "SELECT p_id FROM portfolio WHERE p_id='" . $_GET['id'] . "'";
        $r_portfolio = mysql_query($q_portfolio) or die(mysql_error()); 
        $obj_portfolio = mysql_fetch_object($r_portfolio);      
    }
    
    mysql_close ($connection);
                
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="../stylesheets/admin.css" rel="stylesheet" type="text/css" />
<link href="../stylesheets/layout.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="../includes/fetcher.js"></script>

</head>
<body>
    <div class="CPanelOptionsBody">
        <div class="CPanelOptions1">
            <div class="CPanelOptionsTitle">
                Edit Portfolio
            </div>
        </div>
        <div class="CPanelOptions2">
            <div class="CPanelOptions2Center500px">
                <form method="post" action="" id="frmEdit"> 
                <table width="500" border="0" cellpadding="0" cellspacing="0">
                    <?php
                        echo '
                            <tr>
                                <td width="100" height="30" align="center" valign="middle" class="txt_12px_bold">
                                    Project :
                                </td>
                                <td width="400" height="30" align="left" valign="middle">
                                    <input name="fld_name" id="fld_name" value="' . $obj_portfolio->p_name . '" type="text" class="inputbox_admincp_400px" maxlength="100" onfocus="this.style.background=\'#f8f8f7\'" onblur="this.style.background=\'#fafafa\'">
                                </td>               
                             <tr>
                             
                             <tr>
                                <td width="100" height="30" align="center" valign="middle" class="txt_12px_bold">
                                    Client :
                                </td>
                                <td width="400" height="30" align="left" valign="middle">
                                    <input name="fld_client" id="fld_client" value="' . $obj_portfolio->p_client . '" type="text" class="inputbox_admincp_400px" maxlength="100" onfocus="this.style.background=\'#f8f8f7\'" onblur="this.style.background=\'#fafafa\'">
                                </td>               
                             <tr>
                             
                             <tr>
                                <td width="100" height="30" align="center" valign="middle" class="txt_12px_bold">
                                    Technieken :
                                </td>
                                <td width="400" height="30" align="left" valign="middle">
                                    <input name="fld_techniques" id="fld_techniques" value="' . $obj_portfolio->p_techniques . '" type="text" class="inputbox_admincp_400px" maxlength="100" onfocus="this.style.background=\'#f8f8f7\'" onblur="this.style.background=\'#fafafa\'">
                                </td>               
                             <tr>                    
                             
                             <tr>
                                <td width="100" height="30" align="center" valign="middle" class="txt_12px_bold">
                                    URL :
                                </td>
                                <td width="400" height="30" align="left" valign="middle">
                                    <input name="fld_url" id="fld_url" value="' . $obj_portfolio->p_url . '" type="text" class="inputbox_admincp_400px" maxlength="100" onfocus="this.style.background=\'#f8f8f7\'" onblur="this.style.background=\'#fafafa\'">
                                </td>               
                             <tr>
                             
                             <tr>
                                <td width="100" height="30" align="center" valign="middle" class="txt_12px_bold">
                                    CMS :
                                </td>
                                <td width="400" height="30" align="left" valign="middle">
                                    <select name="fld_cms" id="fld_cms" class="dropdownbox_admincp_100px">
                                        <option value="1">Ja</option>
                                        <option value="2">Nee</option>                                                      
                                    </select>
                                </td>               
                             <tr>
                             
                             <tr>
                                <td width="100" height="30" align="center" valign="middle" class="txt_12px_bold">
                                    Is online? :
                                </td>
                                <td width="400" height="30" align="left" valign="middle">
                                    <select name="fld_isonline" id="fld_isonline" class="dropdownbox_admincp_100px">
                                        <option value="1">Ja</option>
                                        <option value="2">Nee</option>                                                      
                                    </select>
                                </td>               
                             <tr>
                             
                             <tr>                               
                                <td colspan=2 width="500" height="30" align="left" valign="middle">
                                </td>               
                             <tr>
                             
                             <tr>                               
                                <td colspan=2 width="500" align="left" valign="middle">
                                    <textarea name="fld_desc" id="fld_desc" rows="10" class="inputbox_500px">' . $obj_portfolio->p_desc . '</textarea>
                                </td>               
                             <tr>
                             
                             <tr>                               
                                <td colspan=2 width="500" height="50" align="center" valign="bottom">
                                                                    <input type="image" src="../images/sub_update.gif" border="0" name="sub_update" id="sub_update" title="Update" alt="Update" class="image_noborder">
                                </td>               
                             <tr>                            
                             ';                         
                    ?>
                </table>
                </form>         
            </div>
        </div>
        <div class="CPanelOptions3">
        
        </div>
    </div>
</body>
</html>


Ik heb al geprobeerd de action te setten van het Form, werkt niet.
Pagina word dan wel herladen alleen word er dan niet geupdate (if (isset($_POST['sub_update_x'])) {)
Ook een HIDDEN input gebruikt en daar opgecontroleerd met isset($_POST['hidden'] .....

Op Google is ook weinig te vinden over het submitten van een Form gebruik maken van een Fetcher.

Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Je gebruikt in je php code de het veldnaam: "sub_update_x" maar in je html code heet het veld "sub_update"......

Test de naam eens door

PHP:
1
  print_r($_POST);


te doen

Acties:
  • 0 Henk 'm!

  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:03

The.Terminator

Un boer met bier

Topicstarter
Face_-_LeSS schreef op dinsdag 18 december 2007 @ 11:31:
Je gebruikt in je php code de het veldnaam: "sub_update_x" maar in je html code heet het veld "sub_update"......

Test de naam eens door

PHP:
1
  print_r($_POST);


te doen
Dat van _X bij sub_update_x klopt, omdat mijn button een plaatje is kan IE niet zien met $_POST, IE heeft daarbij de x (of y) coordinaten nodig.

En print_r($_POST) blijft leeg als ik als action="javascript:loadContent('portfolio_edit.php?id=<?php echo $_GET['id']; ?>','CPanel')" doe.
Maar roep ik de pagina los aan (en wijzig action naar action="portfolio_edit.php?id=<?php echo $_GET['id']; ?>" omdat je anders een NULL in getelement hebt) en het werkt wel.

Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 22:58

voodooless

Sound is no voodoo!

Waarom moet je een complete html pagina in je div laden, met headers, en body? In je div hoort natuurlijk alleen maar dat te staan wat erin hoort: het stukje HTML body van het form wat je erin wil hebben. Verder zie ik nergens waar die submit knop staat.

En check eens libs als prototypejs, dat maakt het leven heel wat makkelijker

[ Voor 15% gewijzigd door voodooless op 18-12-2007 12:38 ]

Do diamonds shine on the dark side of the moon :?


Acties:
  • 0 Henk 'm!

  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:03

The.Terminator

Un boer met bier

Topicstarter
Submit knop staat hier

<input type="image" src="../images/sub_update.gif" border="0" name="sub_update" id="sub_update" title="Update" alt="Update" class="image_noborder">

Werkt onder een gewone pagina wel, maar niet onder dat Ajax scriptje die een pagina (met of zonder headers etc) in een DIV laad.

Ik las iets dat http_request.send(NULL) ervoor zorgde dat er geen FORM info werd doorgestuurd.

Acties:
  • 0 Henk 'm!

  • MacWebber
  • Registratie: September 2000
  • Niet online
Gokje; je controleert in de "opgehaalde" pagina de POST variabelen. Alleen zijn die daar niet aanwezig, die worden gepost naar je "ophalende" pagina. Dus daar zul je ze moeten opvangen en evt. doorgeven.

Probeer maar eens een print_r($_POST) vanaf je hoofdpagina.

  • The.Terminator
  • Registratie: November 2002
  • Laatst online: 23:03

The.Terminator

Un boer met bier

Topicstarter
Mhhhhh dat werkt :)
Maar ik snap niet waarom / hoe :p

De hoofdpagina refreshed niet, maar triggered wel.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

The.Terminator schreef op donderdag 20 december 2007 @ 10:27:
Mhhhhh dat werkt :)
Maar ik snap niet waarom / hoe :p

De hoofdpagina refreshed niet, maar triggered wel.
MacWebber zegt het toch al? Je doet een POST naar de ene pagina, terwijl je vervolgens middels Javascript een GET doet op de pagina waar je die POST-variabelen wil gebruiken. Je zal die variabelen op een andere manier door moeten geven; je kan ze als POST-variabelen doorgeven middels AJAX, of je zou gebruik kunnen maken van sessions of eventueel, als het niet al teveel data is, middels de querystring. Het komt in elk geval niet vanzelf bij je pagina aan. ;)

Je moet het in elk geval zo zien: je hebt een pagina, en die pagina vraagt voor de client een andere pagina op. Je hebt dus twee requests. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1