Avatar billede mrlaukamp Nybegynder
12. august 2011 - 11:06 Der er 12 kommentarer og
1 løsning

MySQL / Ajax

Hej eksperter.

Jeg er netop gået igang med en opgave sammen med en fra min klasse (er ved at uddanne mig som webintegrator).
til det har jeg et lille problem, jeg vil gerne have en knap som, hvis man trykker på den, skal indsætte en row i min database.

Det i sig selv er jo ikke svært, men vil gerne have at det bliver vist på siden med det samme...

den query jeg skal have sat ind er:

"INSERT INTO brick VALUES ('', '1', 'Brick name', 'Some text')"


Så i det man trykker på knappen skal den:
1. ligge en row ind i databasen.
2. vise det jeg har lagt ind med det samme i form af en <div> boks.

er der nogle der har nogle forslag/kan henvise mig til en tutorial? Har googlet mig lidt rundt men har ikke kunne finde nogle svar som jeg kan finde ud af (er 100% ny til AJAX).

På forhånd tak :)
Avatar billede The_Buzz Novice
12. august 2011 - 11:47 #1
Jeg vil anbefale at du bruger en insert sætning som dette i stedet.

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Så har du lidt mere styr over hvor tingene indsættes, men det er bare lige en sidebemærkning.

Mht Ajax og MySQL kan jeg ikke så godt hjælpe, da jeg er PHP mand primært
Avatar billede mrlaukamp Nybegynder
12. august 2011 - 12:04 #3
jeg har det på samme måde, har ingen problemer med PHP, men med ajax? Der er jeg en totalt nybegynder.

Hvis der ikke kommer noget konkret svar godtager jeg det som et svar :)
Avatar billede olsensweb.dk Ekspert
12. august 2011 - 12:11 #4
du kan prøve at kigge på w3schools tut, nogle steder begår de en fejl ved at retunerer html code, hvilkeer en uskik, det har AJAX aldrig været beregnet til.
AjAX bør kun retunerer data http://www.w3schools.com/php/php_ajax_intro.asp

eller google "php ajax tutorial" http://www.google.dk/search?q=php+ajax+tutorial

et lille "dumt" post nummer eks jeg engang lavede ved brug af AJAX
http://olsensweb.dk/guides/ajax/eks1/
Avatar billede majbom Novice
12. august 2011 - 13:11 #5
-> #4 - som ikke virker ? =)
Avatar billede olsensweb.dk Ekspert
12. august 2011 - 13:18 #6
#5
demo er rettet nu, havde valgt forkert db på serveren
Avatar billede olsensweb.dk Ekspert
12. august 2011 - 13:43 #7
ud over jeg ikke lige ved hvorfor du vil retunere det sammen som du sender her er her et lille eks.
for at gøre det simpelt retunerer jeg bare data som en komma seperaret string, (så du må selvføgelig ikke have komma i dine data :) ), et alternativ retur format kunne værer XML eller JSON, jeg vil anbefale JSON

index.html
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title></title>
   
    <script type="text/javascript">
    function GetAjaxData(){
        var url = "request.php";   
        var name=document.getElementById("brick_name").value;
        var text=document.getElementById("Some_text").value;       
        var params = "name=" + name + "&text=" + text + "&rand="+Math.random();

        http = new XMLHttpRequest();
        http.open("GET", url+"?"+params, true); 
        http.onreadystatechange = function () {
            if(http.readyState == 4 && http.status == 200 ){
                var data = http.responseText.split(",");
                var name=document.getElementById("ctrl_brick_name").value = data[0];
                var text=document.getElementById("ctrl_Some_text").value = data[1];                       
            }
        }
        http.send(null);               
    }
    </script>
</head>
<body>
<form name="form1" action="#"> 
    <input id = "brick_name" type="text"  />
    <input id = "Some_text" type="text"  />
    <input type="button" name="send" id="send" value="Submit" onClick="GetAjaxData()"> 
</form>

<div>
<!-- place holder ajax data kommer her -->
du indtastede: <br>
<input type="text" id = "ctrl_brick_name" readonly="readonly"  />
<input type="text" id = "ctrl_Some_text" readonly="readonly"  />
</div>

</body>
</html>


request.php
<?php
    require_once("db_conn.php");    
    $text = $_GET['text'];   
    $name = $_GET['name'];   
    $sql = "INSERT INTO brick (navn, text) VALUES ('$name', '$text')";    
    $rs = mysql_query($sql, $conn);   
    // data sendes retur, er lidt unødvendigt i denne sammenhæng
    echo $name.",".$text;   
?>


db_conn.php
<?php
    $conn = mysql_connect ("localhost", "root", "", true);
    if (! $conn )     die( 'Could not connect: ' . mysql_error ());
    mysql_select_db("test") or die('Could not select database ');
    mysql_set_charset('utf8',$conn);
?>
Avatar billede olsensweb.dk Ekspert
12. august 2011 - 13:59 #8
og så bør du selvføgelig overveje at anvende POST i stedet for GET, i dit AJAX kald (størrer sikkerhed)
endvidre bør du selvføgelig "vaske" data før du ligger dem i db'en feks med mysql_real_escape_string http://www.php.net/manual/en/function.mysql-real-escape-string.php
en størrer sikkerhed på db niveau vil værer at anvende mysqli http://php.net/mysqli og dennes prepared statements http://php.net/manual/en/mysqli.prepare.php
Avatar billede mrlaukamp Nybegynder
12. august 2011 - 15:12 #9
Jeg er meget glad fore jeres svar, men jeg tror at i har har misforstået spørgsmålet (ellers har jeg måske ikke uddybet det nok?).

Jeg vil have en form, som sætter en row in i min database.
Den query den skal kører er en "fast" query. Så der er ikke nogle informationer fra siden som den skal tage med sig...

Det databasen så gør bagefter er at den generarer en ny <div> boks på siden, som så er tom. (man kan rette den direkte på siden bagefter).

Jeg vil faktisk bare gerne have at den:
1: sætter en ny row i DB.
2: opdaterer selv stykke der er blevet smidt ind (uden at reloade siden).
Avatar billede majbom Novice
12. august 2011 - 19:05 #10
det kan du med ronols kode i #7 - lige i:

if(http.readyState == 4 && http.status == 200 ){
                var data = http.responseText.split(",");
                var name=document.getElementById("ctrl_brick_name").value = data[0];
                var text=document.getElementById("ctrl_Some_text").value = data[1];                       
            }


i dén if-sætning kører du hvad der skal ske, når dit serverside-script returnerer true...
Avatar billede olsensweb.dk Ekspert
12. august 2011 - 20:12 #11
er det noget ala dette du vil ?? demo http://olsensweb.dk/test/experten/spm/944896/
grundlæggende tages indput fra de 2 indput boxe i pågændende div lægges i db, og ved succes laves en ny div med 2 indput boxe, og som lidt lir skrivebeskytter jeg lige de 2 boxe i den gamle div

i index.htm har jeg lavet noget om i js, men vigtigste ændring er det i det splazz skriver i #10
i request.php har jeg slettet denne linje echo $name.",".$text;

jeg fandt lidt inspiration ved  at google "js add div" http://www.google.dk/search?q=js+add+div
link 2 http://it.toolbox.com/wiki/index.php/Dynamically_Creating_a_Div_in_Javascript
Avatar billede mrlaukamp Nybegynder
15. august 2011 - 14:16 #12
Hej Ronols, Jeg har fundet ud af det og har fået det hele til at virke.
smid eventuelt lige et svar ind :)
Avatar billede olsensweb.dk Ekspert
15. august 2011 - 15:28 #13
får du så her

hvordan endte det med at se ud ??, andre kunne måske lærer noget af det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester