insert query met ajax http request

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan H

stefan H

10/06/2013 19:40:33
Quote Anchor link
wie kan mij helpen

ik heb een formulier en het is de bedoeling dat die verzonden word doormiddel van de submit button. dit moet met een insert query opgeslagen worden in de database. nu wil ik niet dat erbij het verzenden van het formulier een nieuwe pagina geopend word maar dat je op de zelfde pagina blijft . ik heb begrepen dat dit met ajax kan . het wil me tot nu toe niet lukken het onderstaande heb ik tot nu toe.

<html>
<input type="submit" id="userInput" value="stuur" name="stuurreactie" onsubmit="process()">
<div id="underInput" />
</html>
de php pagina
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
header('Content-Type: text/xml');

echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';

echo ' <response>';

if(isset($_GET['stuurreactie'])){

$naam = mysql_real_escape_string($_GET['stuurreactie']);

$insert = mysql_query("INSERT INTO advertentiereactie(naam) VALUES('".$naam."')");

if($insert == true){

    echo'Uw reactie is geplaatst';
}

else{
    echo 'er ging iets fout';
}
}

else{
    echo'er is niks verstuurd';
}

echo ' </response>';

<
script>
var
xmlHttp = createXmlHttpRequestObject()

function
createXmlHttpRequestObject(){

    var
xmlHttp;
    
    if(window.ActiveXOject){
        try{
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
catch(e){
            xmlHttp = false;
    }
}
else{
    try{
        xmlHttp = new XMLHttpRequest();
    }
catch(e){
        xmlHttp = false;        
}
}

if(!xmlHttp)
    alert("Cant create object")
else
return xmlHttp;

}
function
process(){
    if(xmlHttp.readyState==0 || xmlHttp.readyState==4 ){
            
        stuurreactie= encodeURIComponent(document.getElementById("userInput").value);
        xmlHttp.open("GET", "localhost:8080/verwerkreactie.php?stuurreactie=" + stuurreactie, true);
        xmlHttp.onreadystatechange = handleServerResponse;
        xmlHttp.send(null);
}
else{
    
    setTimeout('process()',1000);
    
}

function
handleServerResponse(){

    if(xmlHttp.readyState==4){
        if(xmlHttp.status==200){
            xmlResponse = xmlHttp.responseXML;
            xmlDocumentElement = xmlResponse.DocumentElement;
            message = xmlDocumentElement.firstChild.data;
            document.getElementById("underInput").innerHTML = '<span style="color:blue">' +message+ '</span>';
setTimeout('process()',1000);            
        }
else{
            alert('foutje');
        }
    
    }    
    
}
}

</script>
 
PHP hulp

PHP hulp

29/04/2024 14:52:22
 

10/06/2013 19:50:46
Quote Anchor link
Dag Stefan,

Wat jij wilt is mogelijk. In http://www.w3schools.com/php/php_mysql_insert.asp staat het meeste al uitgelegd. Als je na het lezen en proberen nog vragen hebt hoor ik het graag.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/06/2013 19:53:29
Quote Anchor link
Je moet wel de ingevulde gegevens mee sturen, even in mijn archief gedoken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
function CheckAndSend(f) {
    var isError = false;
    var errMsg = "";
    var el = document.getElementById("errMsg");
    el.style.visibility = "hidden";
    if (f.elements["compcontact"].value == "") {
        isError = true;
        errMsg = "Het veld <i>contactpersoon</i> is een verplicht veld!";
    }
    if (f.elements["compemail"].value == "" && f.elements["comptel"].value == "") {
        if (isError) {
            errMsg += "<br />"
        }
        errMsg += "U dient een emailadres of een telefoonnummer op te geven.";
        isError = true;
    }
    if (isError) {
        
        el.innerHTML = errMsg;
        el.style.visibility = "visible";
    }
    else {
        var s = "";
        for (i = 0; i < f.elements.length; i++) {
            if (f.elements[i].value != "") {
                s += f.elements[i].name + "=" + encodeURI(f.elements[i].value);
                if (i < f.elements.length - 1) { s += "&" }
            }
        }
        
        doc = getHTTPObject();
        doc.onreadystatechange = function(){
            if (doc.readyState == 4 && doc.status==200) {
                s = doc.responseText;
                xa = s.indexOf("errMsg");
                if (xa > -1)
                    document.getElementById("errMsg").innerHTML = s;
                else
                    document.getElementById(f.parentNode.id).innerHTML = s;
            }
        }
        doc.open("POST", "/include/sndmail.php", true);
        doc.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        doc.send(s);
    }
}

Nog uit mijn pre jquery tijd ;-)
En dus in de form tag onsubmit="CheckAndSend(this.form); return false;")
 
Stefan H

stefan H

10/06/2013 19:54:54
Quote Anchor link
bedankt voor je reactie frank,

maar als ik het goed begrijpt word hier beschreven hoe je een standaard formulier verzend naar een andere pagina dan word je ook daadwerkelijk door gestuurd naar die nieuwe pagina. dat is nu juist niet de bedoeling dat die pagina geladen word

Toevoeging op 10/06/2013 20:03:37:

bedankt Ger.

maar ik heb me ook laten vertellen dat je een functie xmlhttprequest moet maken. klopt dit ? dat zie ik hier niet gebeuren volgens mij ? of heb ik dit fout ? is het niet mogelijk om de controle van het formulier in de php pagina te doen ?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/06/2013 20:26:21
Quote Anchor link
Ik heb gewoon een sleur-pleur gedaan vanuit een javascriptje wat ik heb.
getHtppObject is ongeveer dezelfde functie als jouw createXmlHttpRequestObject
Dus je zal een aantal dingen in mijn eerdere code moeten aanpassen.

Ik kies ervoor om de eerste controle in JS te doen, daarna wordt er in PHP nogmaals een controle uitgevoerd!!

Nogmaals, het is een gedateerd script, tegenwoordig doe ik dat met jquery en een json response
 
Stefan H

stefan H

10/06/2013 20:27:50
Quote Anchor link
oke dus jquery is meer van deze tijd ??

heb je anders idee waar ik hier meer informatie over kan vinden ?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/06/2013 20:34:20
Quote Anchor link
Ja, google jquery :-P
En iets lastiger te vinden deze form plug_in.
 

10/06/2013 20:34:26
Quote Anchor link
Zelf heb ik een script liggen wat alles op 1 pagina houd... Maar die geef ik liever niet vrij op dit Forum (aangezien hij normaal mails stuurt, en er veel overbodige regels in zitten). Als je wilt kan je mij op skype (frank.martens25) en/of een mailtje sturen ([email protected]). Dan kan ik je er mee helpen;)
 
Stefan H

stefan H

10/06/2013 20:40:39
Quote Anchor link
Frank ik heb je even een mailtje gestuurd.

Ger ook bedankt ik zal hier ook naar kijken.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/06/2013 20:57:31
Quote Anchor link
Geen dank ;-)
En als je mijn eerdere script aanpast, met jouw functie zal het gewoon werken.
Alleen maak ik misbruik van het feit dat de browser niet bekende tags toch gewoon onderdrukt, met andere woorden vanuit php gaf ik een response '<errMsg> .... </errMsg>'
Bietje smerig ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.