[PHP & Ajax] Waarde komt niet door

Pagina: 1
Acties:

  • Jigs
  • Registratie: April 2004
  • Laatst online: 09-12-2025
Beste mensen,
Ik zit al een tijdje met ongeveer het volgende probleem: Ik heb een html form die een js functie addcategory aanroept. Nu komt de waarde uit mijn input veld, wel binnen in mijn js functie maar krijg ik hem niet aan de query gekoppeld die in de php functie add_category wordt uitgevoerd. Ik doe nu nog alleenmaar controles of ik de waardes binnen krijg maar dat lukt niet.
Voor de volledigheid post ik hier mijn hele code. Voor specifieke vragen kan je ze natuurlijk gewoon stellen.
Eerst mijn index.php:

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
<?
session_start();

/*---START APPLICATIE---*/
$boodschap = new Boodschap();

$db= "boodschappen";
$host="localhost";
$user="root";
$password="";
$dbtype="mysql";

$con= mysql_connect($host,$user,$password) or die("Could not connect to the server: ". mysql_error());
//print("U bent verbonden met de server");
$selected_db= mysql_select_db($db) or die("Could not connect to the database: ". mysql_error());
//print("<BR> Database Selected.");

$all_categories  = false;
$all_products =false;       // voor een weergave van alle producten moet deze TRUE zijn
print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
print("<html>");
print("<head>");
print("<script type=\"text/JavaScript\" src='addcat.js'></script>");
print("</head>");
print("<body>");
print("<div class='allContent'>");
print("<div class='menu'>");
print("<ul><li>Home</li><li><a href='?all_products=true'> Alle producten</a></li><li><a href='?all_categories=true'>categorieen</a></li><li>Nieuw product</li></ul>");
print("</div>");
print("<div class='table'>");
if ($all_products = isset ($_GET['all_products']) && $_GET['all_products'] == 'true'){
    if ($all_products === true){ 
        
        print("<table>");
        print("<tr>");
        print("<th>Aantal</th><th>Artikel Naam</th><th>categorie</th>");
        print("</tr>");
        $query = $boodschap->get_all_products (); 
        while($row = mysql_fetch_array($query)){
            print("<tr><td><input type='text' name='aantal' size=3></td><td> ".$row['product_naam']."   </td> <td> ".$row['cat_naam']."</td>            </tr>"  );  
        }
    
        print("</table>");
        $all_products = false;
    }
}
else if ($all_categories = isset ($_GET['all_categories']) && $_GET['all_categories'] == 'true'){
    if($all_categories ===true){
        print("<table>");
        print("<tr>");
        print("<th>categorieen</th>");
        $query= $boodschap->get_all_categories();
        while($row= mysql_fetch_array($query)){
            print("<tr><td id=\"query\">".$row['cat_naam']."</td></tr>");
        }
        print("</table>");
        print("<div>");
        print("<form method='post'  onsubmit=\" addcategory(document.getElementById('new_cat').value);\">");            
        //action=\"?all_categories=true\"
        print("<input type='text' name='new_cat' id='new_cat'>" );
        print("<input type='submit' name='submit' value='Nieuwe categorie'>");
        print("</form>");
        print("</div>");
        if($_POST['new_cat']){
            $boodschap->add_category($_GET['new_cat']); 
        }
        
        
        $all_categories = false;
    
    }
}

print("</div>");
print("</body>");
print("</html>");




/*--------WEB LOGIC-----------*/

class Boodschap{

    function get_all_products(){
        $query = "SELECT producten.product_naam, producten.product_aantal, categorieen.cat_naam FROM  producten  LEFT JOIN categorieen ON producten.cat_id = categorieen.cat_id";
        $result = mysql_query($query) or die("could not execute query: ". mysql_error());
        return $result;
    }
    function get_all_categories(){
        $query = "SELECT cat_naam FROM categorieen ";
        $result = mysql_query($query) or die("could not execute query: ". mysql_error());
        return $result;
    }
        
    function add_category($category){
        $x = (isset($_GET["q"]) ? $_GET["q"] : "geen q!");
        print("<br> de waarde van X ".$x."<br>");
        $query = "INSERT INTO categorieen(cat_id, cat_naam) VALUES ('','$category')";
        $result = mysql_query($query) or die("could not execute query: ". mysql_error());
        print("De categorie ".$category." is toegevoegd");
    }
    
    function add_articles($artikel, $aantal_artikel, $category){
        $query ="INSERT INTO producten (product_naam, product_aantal, cat_id) VALUES ". $artikel.                       $aantal_artikel .$category;
        if($result($query)) 
            echo ("Artikel Toegevoegd");
        else 
            echo ("Error: ".mysql_error());
    }
}



?>



dan de js code

JavaScript:
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
var xmlHttp=null;
function addcategory(str){
xmlHttp=GetXmlHttpObject(str);
    if(xmlHttp==null){
        window.alert("Je brouwser ondersteunt geen HTTP request");
        return;
    }
    window.alert(str);
    
    var url="http://localhost:85/bs/index.php?all_categories=true";
    url=url+"?q="+str 
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=stateChanged ;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
    xmlHttp.responseText=str;
    alert(xmlHttp.responseText);
    return false;
}

function stateChanged() { 
    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
        document.getElementById("query").innerHTML=xmlHttp.responseText 
    }    
} 

function GetXmlHttpObject()
{ 
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

function URLEncode(plaintext)
{
    // The Javascript escape and unescape functions do not correspond
    // with what browsers actually do...
    var SAFECHARS = "0123456789" +                    // Numeric
                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +    // Alphabetic
                    "abcdefghijklmnopqrstuvwxyz" +
                    "-_.!~*'()";                    // RFC2396 Mark characters
    var HEX = "0123456789ABCDEF";

    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
        var ch = plaintext.charAt(i);
        if (ch == " ") {
            encoded += "+";                // x-www-urlencoded, rather than %20
        } else if (SAFECHARS.indexOf(ch) != -1) {
            encoded += ch;
        } else {
            var charCode = ch.charCodeAt(0);
            if (charCode > 255) {
                alert( "Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
                          "(URL encoding only supports 8-bit characters.)\n" +
                          "A space (+) will be substituted." );
                encoded += "+";
            } else {
                encoded += "%";
                encoded += HEX.charAt((charCode >> 4) & 0xF);
                encoded += HEX.charAt(charCode & 0xF);
            }
        }
    } // for

    return encoded;
};

function URLDecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef";
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
       if (ch == "+") {
           plaintext += " ";
           i++;
       } else if (ch == "%") {
            if (i < (encoded.length-2)
                    && HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
                    && HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
                plaintext += unescape( encoded.substr(i,3) );
                i += 3;
            } else {
                alert( 'Bad escape combination near ...' + encoded.substr(i) );
                plaintext += "%[ERROR]";
                i++;
            }
        } else {
           plaintext += ch;
           i++;
        }
    } // while
   return plaintext;
};



                     
                    

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:30

crisp

Devver

Pixelated

PHP:
1
2
3
if($_POST['new_cat']){
    $boodschap->add_category($_GET['new_cat']);    
}

waar moet die POST en die GET-var dan vandaan komen? Je doet sowieso een GET (slechte zaak voor een request die data manipuleert, dat zou een POST moeten zijn - maar je PHP code is sowieso zo lek als een mandje), maar new_cat kom ik daar ook niet in tegen...
JavaScript:
1
xmlHttp.responseText=str; 

en waarom doe je dat direct na je send()? Het is asynchroon dus je moet wachten op je onreadystate handler. Sowieso is het vreemd als je zelf de responseText gaat overschrijven.

En voor URL encoding kan je encodeURI en encodeURIComponent gebruiken in moderne browsers ipv het deprecated escape() (maar ik vraag me af waarom je die functies post terwijl ze ook nergens gebruikt worden)

[ Voor 51% gewijzigd door crisp op 25-07-2006 21:29 ]

Intentionally left blank


  • Jigs
  • Registratie: April 2004
  • Laatst online: 09-12-2025
crisp schreef op dinsdag 25 juli 2006 @ 21:24:
PHP:
1
2
3
if($_POST['new_cat']){
    $boodschap->add_category($_GET['new_cat']);    
}

waar moet die POST en die GET-var dan vandaan komen? Je doet sowieso een GET (slechte zaak voor een request die data manipuleert, dat zou een POST moeten zijn - maar je PHP code is sowieso zo lek als een mandje), maar new_cat kom ik daar ook niet in tegen...
JavaScript:
1
xmlHttp.responseText=str; 

en waarom doe je dat direct na je send()? Het is asynchroon dus je moet wachten op je onreadystate handler. Sowieso is het vreemd als je zelf de responseText gaat overschrijven.

En voor URL encoding kan je encodeURI en encodeURIComponent gebruiken in moderne browsers ipv het deprecated escape() (maar ik vraag me af waarom je die functies post terwijl ze ook nergens gebruikt worden)
Ok ik zal een beetje toelichten wat mijn bedoelling is. Ik wil het liefste alle php code in een file hebben: index.php. Dus ik wil gewoon als data submit naar de database dat de juiste php functie wordt aangeroepen met de juiste query.
Wat raadt jij aan om mijn probleem dan op te lossen?

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:01
Jigs schreef op dinsdag 25 juli 2006 @ 21:34:
[...]


Ok ik zal een beetje toelichten wat mijn bedoelling is. Ik wil het liefste alle php code in een file hebben: index.php. Dus ik wil gewoon als data submit naar de database dat de juiste php functie wordt aangeroepen met de juiste query.
Wat raadt jij aan om mijn probleem dan op te lossen?
offtopic:
Je moet niet doen wat jij graag zou willen. Je moet doen wat logish is, en het is niet logish om niet aan elkaar gerelateerde dingen in 1 zakje te stoppen. Daar kom je wel achter als je over aantal maanden meer functionaliteit gaat toevoegen en/of wijzigen en daardoor 5000 regels code krijgt. Succes met het onderhouden ervan. Wees slim en pak het meteen goed aan, splits het gerust op in meerdere php-bestanden.

  • Jigs
  • Registratie: April 2004
  • Laatst online: 09-12-2025
Sybr_E-N schreef op dinsdag 25 juli 2006 @ 21:41:
[...]

offtopic:
Je moet niet doen wat jij graag zou willen. Je moet doen wat logish is, en het is niet logish om niet aan elkaar gerelateerde dingen in 1 zakje te stoppen. Daar kom je wel achter als je over aantal maanden meer functionaliteit gaat toevoegen en/of wijzigen en daardoor 5000 regels code krijgt. Succes met het onderhouden ervan. Wees slim en pak het meteen goed aan, splits het gerust op in meerdere php-bestanden.
Hmm...
Ok, dus ik moet volgens jou allemaal paginas maken met update.php, insert.php, delete.php, modify.php
Dat is tegen de princiepes van OOP in. Ik wilde gewoon allemaal classes maken....

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Jigs schreef op dinsdag 25 juli 2006 @ 22:10:
[...]

Hmm...
Ok, dus ik moet volgens jou allemaal paginas maken met update.php, insert.php, delete.php, modify.php
Dat is tegen de princiepes van OOP in. Ik wilde gewoon allemaal classes maken....
En sinds wanneer moeten alle klassen in dezelfde file staan? ;)

'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.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:30

crisp

Devver

Pixelated

Jigs schreef op dinsdag 25 juli 2006 @ 21:34:
[...]
Wat raadt jij aan om mijn probleem dan op te lossen?
Wat ik aanraad: maak het eerst eens werkend zonder javascript/Ajax, dus met een gewoon (POST)formulier. Als je dat werkend hebt dan kan je daar Ajax-functionaliteit bovenop bouwen (met Ajax kan je ook een POST doen).

Intentionally left blank


  • Jigs
  • Registratie: April 2004
  • Laatst online: 09-12-2025
crisp schreef op dinsdag 25 juli 2006 @ 23:52:
[...]

Wat ik aanraad: maak het eerst eens werkend zonder javascript/Ajax, dus met een gewoon (POST)formulier. Als je dat werkend hebt dan kan je daar Ajax-functionaliteit bovenop bouwen (met Ajax kan je ook een POST doen).
Dat had ik in eerste instantie geaan en dat werkte ook. Maar bij het implementeren bleek dat niet zo makkelijk te gaan

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:30

crisp

Devver

Pixelated

In [rml][ PHP/AJAX] POST data komt niet door[/rml] heb ik een voorbeeld geplaatst van hoe je een formulier via Ajax kan submitten; wellicht dat je daaruit nog ideeën en tips kan opdoen ;)

Intentionally left blank


  • Jigs
  • Registratie: April 2004
  • Laatst online: 09-12-2025
crisp schreef op woensdag 26 juli 2006 @ 00:07:
In [rml][ PHP/AJAX] POST data komt niet door[/rml] heb ik een voorbeeld geplaatst van hoe je een formulier via Ajax kan submitten; wellicht dat je daaruit nog ideeën en tips kan opdoen ;)
Ik heb je script gelezen het enige wat mij opviel is dat alles wordt afgewerkt in javascript en dater dan geen php meer aan te pas komt. Ik Probeer juist iets zoals in dit
http://www.w3schools.com/ajax/ajax_database.asp
Maar ik krijg het niet gedaan in php

  • Jigs
  • Registratie: April 2004
  • Laatst online: 09-12-2025
crisp schreef op woensdag 26 juli 2006 @ 00:07:
In [rml][ PHP/AJAX] POST data komt niet door[/rml] heb ik een voorbeeld geplaatst van hoe je een formulier via Ajax kan submitten; wellicht dat je daaruit nog ideeën en tips kan opdoen ;)
Ik heb nu het post script werkende. Dat wil zeggen er wordt gewoon data gepost alleen het JS gedeelte werkt nog niet goed. Kan iemand me daarbij helpen?
Als ik namelijk nog een keer naar mijn pagina all categories ga, dan zie ik dat de de waarde wel is toegevoegd alleen werkt het refresh gedeelte niet.

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:01
Jigs schreef op dinsdag 25 juli 2006 @ 22:10:
[...]


Hmm...
Ok, dus ik moet volgens jou allemaal paginas maken met update.php, insert.php, delete.php, modify.php
Dat is tegen de princiepes van OOP in. Ik wilde gewoon allemaal classes maken....
offtopic:
Je bestandssysteem en groepen van sourcecode in .php bestanden heeft helemaal niets te maken met OOP. Er zijn hele goede redenen voor om je sourecode op te delen. Omdat te bespreken is nogal offtopic.
Pagina: 1