Toon posts:

AJAX: Probleem met uitvoeren PHP script

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

Verwijderd

Topicstarter
Beste webdevvers

Ik heb een probleem dat ik maar niet opgelost krijg. Neem even een kijkje op http://www.arckodrazen.com/scnr/scanner.php
De pagina's worden via ajax geladen in de transparante divs. Dit werkt tot nu toe perfect.
Surf een keertje naar shoutbox. De berichtjes worden allemaal getoond.
Wanneer je nu een berichtje wilt ingeven en beide velden correct invult dan worden ze niet toegevoegd :?

Dit zal wss iets te maken hebben met het ajax?

shoutbox.php:

Voor de html-tag:
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
    include('includes/connection.php');
    include('includes/conversion.php'); 
    
    $shoutbox_page = true;                                          //Reset vars
    $errornick = false;
    $errormsg = false;
    $sent = false;
    $nick = '' ;
    $message = '';
    $s_counter = 0;
    
    echo $_POST['nick'];
    echo $_POST['msg'];
    
    if(isset($_POST['addshout'])){
        $nick = htmlspecialchars(trim($_POST['nick']));             //Fill vars with content
        $message = htmlspecialchars(trim($_POST['msg']));

        if(empty($nick)) $errornick = true;                         //Checks
        if(empty($message)) $errormsg = true;
        
        if(!$errornick && !$errormsg){                              //If valid then sent
            $nick = addslashes($nick);
            $message = addslashes($message);
            
            mysql_query("INSERT INTO shoutbox(poster, message) VALUES('$nick', '$message')") or die('Could not add shout. Please try again later.');

            $sent = true;
        }
    }


In body:
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
    <?php
        
        if($errornick)              echo '<b>Please fill in your nickname</b><br />';   //Error messages
        if($errormsg)               echo '<b>Please fill in a message</b>';
        if($errornick || $errormsg) echo '<p>&nbsp;</p>';
        if($sent == true)           echo '<p><b>Your message has been added</b></p>';
        
        $qryShouts = mysql_query('SELECT * FROM shoutbox ORDER BY id DESC') or die('Error');
        
        while($row = mysql_fetch_array($qryShouts)){                                            //Run through all rows, display shouts
            echo '<p><strong>'.stripslashes($row['poster']).': </strong>'.stripslashes($row['message']).'</p>';
            $s_counter++;                                                                       //Count posts
        }
        
        if($s_counter == 0)
            echo 'No shouts here';
        else
            echo 'Amount of entries: '.$s_counter;
            
        
        if($sent == false){ //Show form
    ?>
            <form method="post" action="<?php echo 'javascript:ajaxpage(\'shoutbox.php\', \'content\');' ?>">
                <input name="nick" type="text" size="10" maxlength="10" class="fields" value="<?php echo stripslashes($nick) ?>" /><br />
                <input name="msg" type="text" size="10" maxlength="255" class="fields" value="<?php echo stripslashes($message) ?>" /><br />
                <input name="addshout" type="submit" value="Shout!" class="fields">
            </form>             
    <?php
        }
    ?>      

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 09:41

MBV

ga eens wat debuggen. Wat voor gegevens komen er aan in je PHP script? Ik denk dat het daar fout gaat. Laat je PHP script eens een print_r van $_POST teruggeven, en laat je ajax-pagina dat dan in een alert zetten ofzo.
Als je het trouwens echt ajax wilt maken, moet je niet de hele pagina herladen, maar alleen het nieuwe item toevoegen als hij is toegevoegd in de database. Wat je nu doet komt eigenlijk neer op iframes zonder iframes ;)

Verwijderd

Topicstarter
Ik dacht al wel zo iets :)
Zal het opnieuw schrijven maar dan tegoei :p

  • guanche
  • Registratie: Augustus 2003
  • Laatst online: 01-04-2024
Misschien een tip voor als je de gehele navigatie met ajax regelt (heb er eerlijk gezegd zelf niet heel veel ervaring mee, maar..):
Verwijder in de links de javascript en zet in de href; #1, #2 oid. Vang de url op met javascript zodat #1 deze pagina opent en #2 de volgende.

Op deze manier zal de pagina niet herladen, maar zal de terug knop in de browser wel werken! Ook kunnen bezoekers pagina's bookmarken etc.

Volgens mij zijn er nog meer mogelijkheden om dit probleem op te lossen. Google er eens naar.

succes..

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 09:06

DizzyWeb

Ondertiteld

Ik moet zeggen dat ik dit maar vaag vind:
PHP:
1
<form method="post" action="<?php echo 'javascript:ajaxpage(\'shoutbox.php\', \'content\');' ?>">


Als action een javascript functie, via post, aanroepen? Kan dat?!

Sowieso, waarom staat die php code er in, er is niets dynamisch aan dat stukje.

[ Voor 15% gewijzigd door DizzyWeb op 11-10-2006 11:46 ]


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 09:41

MBV

Ehm, dat werkte niet in IE volgens mij. Ik zou je sterk willen aanraden om het wiel niet opnieuw uit te gaan vinden, maar een framework te gebruiken waarin het al is opgelost. Zoals je nu bezig bent slaat namelijk nergens op: je geeft een javascript action mee aan een formulier, en verwacht dan dat je browser 'weet' hoe dan de juiste gegevens op de juiste plek komen :? ná de javascript aanroep. Iets zegt me dat je dat soort problemen de volgende keer weer tegen gaat komen.
Dus als ik jouw was zou ik óf de problemen die je nu tegenkomt oplossen óf de problemen een volgende keer vermijden door een goed framework te gebruiken, want als je nu weer opnieuw gaat beginnen leer je er alsnog niks van :)

Google Web Toolkit kan dit soort dingen al, en ik geloof dat Yahoo ook zoiets heeft :)

[ Voor 8% gewijzigd door MBV op 11-10-2006 11:48 ]


Verwijderd

Topicstarter
Ik ben dan ook nog maar 1 dag met ajax bezig :p
Dank u voor de antwoorden.

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 09:41

MBV

dan zou ik gewoon verder prutsen met waar je nu mee bezig bent. Je moet IMHO eerst een gevoel krijgen hoe je die extra verwerkingslaag in je hoofd erbij kan plaatsen, en wat de mogelijkheden zijn enzo, voordat je 'serieus' gaat beginnen. De eerste keer dat ik zoiets deed (http://mvdvlist.nl/xmltest/) was ik ook 3 dagen bezig voordat er een klein stukje van werkte. Tja, je moet wat doen om vrije creditpoints in te vullen :+. Probeer eerst het concept goed te snappen, niet als een kip zonder kop rondrennen door het JS-landschap, dat werkt namelijk niet :P

Verwijderd

Topicstarter
Ik heb een zeer eenvoudig ajax shoutbox script gevonden op internet en het eens grondig bekeken.
Het beste zou zijn als ik het inderdaad allemaal van 0 begin te leren maar op deze website staat een beetje tijd druk. Is voor een fuif binnekort.

Mijn vraag:
Kan het zijn dat de ajax code in conflict komt met de code van de shoutbox?
Wanneer ik de shoutbox-pagina afzonderlijk test, werkt het perfect
Wanneer ik de shoutbox-pagina via de website open (dus ook via ajax), dan blijft er staan "loading shoutbox ..." (een berichtje dat ingegeven is via php code).

Rechtstreeks: http://www.arckodrazen.com/scnr/shoutbox/
Via ajax load page: http://www.arckodrazen.com/scnr/scanner.php (doorklikken op "Shoutbox")

Je zal het verschil wel zien :p
Probleem is dat ik geen Iframe of dergelijke kan gebruiken ipv die ajax-pagina loading omdat de div transparant is.

Indien gewenst post ik de files met code. :p

[ Voor 19% gewijzigd door Verwijderd op 12-10-2006 22:45 ]


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 09:41

MBV

ik heb het hier al eerder gezegd: je gebruikt in je form action javascript, en dat pakt niet automatisch de variabelen mee.

Bugfix: onclick op de knop maken, daarin een javascript functie gooien die de form variabelen uitleest en als POST/GET meestuurt in een HTTP-request

Verwijderd

Topicstarter
Maar waarom werkt het dan wel afzonderlijk en niet via gewone website?
Variabelen worden toch perfect meegegeven en getoond in de shoutbox.
Noob ajax language please :p

Toch even melden dat ik je hulp waardeer. Wil niet opdringerig overkomen.

[ Voor 16% gewijzigd door Verwijderd op 12-10-2006 23:20 ]


  • bille
  • Registratie: Mei 2000
  • Laatst online: 10-02 10:45

bille

Don't call me Buff

tja ehm.. de key zit em in die "saveData()". Dat is een js functie die gebruik maakt van een xmlrpc object om zonder refreshen een http verbinding te leggen naar de webserver. Die saveData() functie stuurt op de achtergrond een msg naar het script op de server via een post/get. Vervolgens wordt de focus op de shoutbox gezet en dan wordt de js functie loadData() aangeroepen. Die doet een call naar de backend en haalt data op waarmee de shoutbox gevuld wordt. De shoutbox zelf wordt gevuld door gebruik te maken van een DOM verwijzing naar het textveld waarin de text verschijnt. Dat is een dom element type HTMLText o.i.d. en heeft functies om text in een textveld te stoppen.

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


Verwijderd

Topicstarter
Owkey, bedankt voor de uiteenzetting maar ik snap nog steeds niet waarom beide scripts niet willen samen werken maar enkel afzonderlijk ;)

http://www.arckodrazen.com/scnr/includes/loadpage.js
en
http://www.arckodrazen.com/scnr/shoutbox/shoutbox.js

Verwijderd

Topicstarter
Als ik een transparante Iframe gebruik ipv een div waar ik de content in laadt dan werkt het.
Probleem: een iframe rekt niet mee met de content waardoor ik 2 scrollbars krijg.

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 09:41

MBV

ga alsjeblieft eens debuggen. Zet overal waar het zinvol lijkt alerts neer, laat je PHP-script de input terug geven, en ga eens kijken wáár het fout gaat. Als iets het niet doet, moet je het iig localiseren wáár het fout gaat, en dat heb je nog niet gedaan. Komt het bij PHP aan? Komt het bij de JS-functie aan die de PHP-file aanroept? Wat geeft die functie aan PHP? Als je het antwoord weet op die vragen, weet je vaak ook de oplossing.
offtopic:
ja, ik kan het JS-gedeelte natuurlijk gaan debuggen, maar daar leer jij dus niks van :P
Pagina: 1