[PHP] File() functie probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NOTE: Ik vond dit topic beter passen bij serverside, ook al heeft het voor een gedeelte wel met Ajax te maken. Mod, als je het hier niet mee eens bent zou je dan dit topic willen verhuizen naar Webdesign & Graphics, alvast bedankt!
--

Hey mensen,

Ik heb een probleem waar ik nu al twee dagen mee bezig ben :[ Ik heb op Google naar een oplossing gevonden, maar kan geen oplossing vinden.

Wanneer ik het PHP bestand direct aanroep zijn er geen problemen, maar als ik het PHP bestand via AJAX aanroep werkt het niet. Na debuggen bleek dat dat waarschijnlijk komt omdat de pagina die ik open met de PHP functie file() niet opent als ik het PHP script open met AJAX. Als ik de variabele $rc weergeef dmv AJAX (echo $out|$rc) komt er 0 in het divje te staan. Als ik de pagina, $alexac probeer weer te geven dmv Ajax krijg ik al helemaal niks te zien (ook simpeler geprobeerd met bv. google.com etc. zonder resultaat). Ik hoop dat het een beetje duidelijk is en dat jullie mij kunnen helpen.

Javascript code:
code:
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
        function createRequestObject() {
            var ro;
            var browser = navigator.appName;
            if(browser == "Microsoft Internet Explorer"){
                ro = new ActiveXObject("Microsoft.XMLHTTP");
            }else{
                ro = new XMLHttpRequest();
            }
            return ro;
        }

        var http = createRequestObject();

        function sndReq(formname) {
             var form = document.getElementById(formname);
             var submitstring = "";
             for(var i=0;i<form.length;i++) {
                  submitstring = submitstring + form.elements[i].name + "=" + form.elements[i].value + "&";
             }
             alert(submitstring);


            http.open('get', 'retrieve.php?links='+submitstring);
            http.onreadystatechange = handleResponse;
            http.send(null);
        }

        function handleResponse() {
            if(http.readyState == 4){
                var response = http.responseText;
                var update = new Array();

                if(response.indexOf('|' != -1)) {
                    update = response.split('|');
                    document.getElementById(update[0]).innerHTML = update[1];
                }
            }
        }


HTML code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form method="post" id="lb_form" action="">
    <table cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td>
            <textarea name="links" cols="50" rows="10"></textarea>
            </td>
        </tr>
        <tr>
            <td><input type="button" value="Retrieve related links" onclick="javascript:sndReq('lb_form');return false;"></td>
        </tr>
        <tr>
            <td>
              <div id="out"></div>

            </td>
        </tr>
    </table>
    </form>


Part of the PHP Code:
code:
1
2
3
4
5
$alexac  = preg_replace("@[\r\n]@", "", preg_replace($search,$replace,trim(implode('', file("http://www.*****.com/***/**/***/".$website."?page=1&q=link:".$website)))));

$rcount = preg_match_all("@1- 10of (.*?) linked to@mis", $alexac, $rcout);

$rc = floor(intval(str_replace(",","",$rcout[1][0]))/10);

Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

Het is me absoluut niet duidelijk wat je precies probeert te doen of waarom je dit per-sé met ajax zou willen doen (zonder fatsoenlijke non-ajax fallback), maar het valt me al op dat je sowieso geen url-encoding toepast bij het samenstellen van de query-string - afgezien van het feit dat de manier waarop je die samenstelt te simplistisch is om te volstaan voor alle soorten formulieren.

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor je reply. Ik kan helaas niet te veel uitweiden over wat ik precies wil doen, omdat het projectje
top-secret is :)

Ik zal url encode toevoegen, ik ben geen topprogrammeur maar dat heb je al gemerkt. Heb je nog andere
tips voor mij die het probleem zouden kunnen veroorzaken?

Bedankt!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het nu zo veranderd:

code:
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
        $website = trim($links[$z]);


        // Get result count
        $search = array ('@<script[^>]*?>.*?</script>@si', // Strip out javascript
                         '@<[\/\!]*?[^<>]*?>@si',          // Strip out HTML tags
                         '@([\r\n])[\s]+@',                // Strip out white space
                         '@&(quot|#34);@i',                // Replace HTML entities
                         '@&(amp|#38);@i',
                         '@&(lt|#60);@i',
                         '@&(gt|#62);@i',
                         '@&(nbsp|#160);@i',
                         '@&(iexcl|#161);@i',
                         '@&(cent|#162);@i',
                         '@&(pound|#163);@i',
                         '@&(copy|#169);@i',
                 '@&#(\d+);@e');
         $replace = array ('',
                          '',
                          '\1',
                          '"',
                          '&',
                          '<',
                          '>',
                          ' ',
                          chr(161),
                          chr(162),
                          chr(163),
                          chr(169),
                         'chr(\1)');
        $content  = preg_replace("@[\r\n]@", "", preg_replace($search,$replace,trim(implode('', file("http://www.***.com/data/in/".urlencode($website)."?page=1&q=link:".urlencode($website))))));

        $rcount = preg_match_all("@1- 10of (.*?) linked to@mis", $content, $rcout);

        $rc = floor(intval(str_replace(",","",$rcout[1][0]))/10);


Werkt helaas nog niet. Het vreemde is dat het prima werkt als ik het PHP bestand direct aanroep, maar met Ajax werkt het absoluut niet.

Acties:
  • 0 Henk 'm!

  • Bene
  • Registratie: Augustus 2000
  • Laatst online: 19-09 11:18

Bene

list incomprehension

Je code is hysterisch - 5 verschillende functies aanroepen in een enkele regel code is niet fijn debuggen en voor ons niet leesbaar. Wat ik zelf doe met dit soort AJAX /PHP constructies is via Firebug (firefox extension) even kijken wat de exacte URL is die je javascript sndReq functie opent. Copy - pasta in een nieuwe tabblad en daarna oud-Hollands printjes zetten of debuggen in je PHP pagina.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De code zit zo in elkaar omdat ik de enige ben die met de code hoeft te werken, anders zou ik het wel anders doen idd. De URL die sndReq aanroept heb ik al gevolgt en ik heb echt alles maar dan ook alles gedebugged, ik blijf het zo ontzettend vreemd vinden dat in als ik de php pagina zelf aanroep het wel werkt. Maar als ik bijvoorbeeld de pagina die ik open probeer terug te geven doet die niks, maar als ik bijvoorbeeld out|test teruggeef laat die dat wel zien in de div.

Het lijkt er op dat de pagina niet wordt geopend als ik het aanroep via Ajax. Erg vreemd... Ik zal nu Firebug downloaden, eens kijken of dat helpt. Bedankt voor de tip Bene.

Acties:
  • 0 Henk 'm!

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

crisp

Devver

Pixelated

Verwijderd schreef op zaterdag 27 december 2008 @ 00:48:
De code zit zo in elkaar omdat ik de enige ben die met de code hoeft te werken, anders zou ik het wel anders doen idd. De URL die sndReq aanroept heb ik al gevolgt en ik heb echt alles maar dan ook alles gedebugged, ik blijf het zo ontzettend vreemd vinden dat in als ik de php pagina zelf aanroep het wel werkt. Maar als ik bijvoorbeeld de pagina die ik open probeer terug te geven doet die niks, maar als ik bijvoorbeeld out|test teruggeef laat die dat wel zien in de div.

Het lijkt er op dat de pagina niet wordt geopend als ik het aanroep via Ajax. Erg vreemd... Ik zal nu Firebug downloaden, eens kijken of dat helpt. Bedankt voor de tip Bene.
Die URL zag er ongeveer zo uit:
retrieve.php?links=links=http://tweakers.net&=Retrieve related links&

niet helemaal wat het zou moeten zijn imo ;)

Persoonlijk zou ik zoiets doen wat in dit geval zou werken en pointers biedt tot uitbreiding naar een meer multi-inzetbaar script voor het ver-ajaxifien van formulieren:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function sndReq(form)
{
    // form element handle conveniently passed as argument

    var submitstring = [];

    // this is very simplified and won't work correctly with all types of form input elements
    for (var i=0; i<form.elements.length; i++)
    {
        if (form.elements[i].name)
        {
            // apply correct escaping, note that encodeURIComponent enforces UTF8
            submitstring.push(encodeURIComponent(form.elements[i].name) + '=' + encodeURIComponent(form.elements[i].value));
        }
    }

    // why not just use POST? seems appropriate here. Also note that the async argument used to be mandatory for some implementations
    http.open('POST', form.action, true);
    http.onreadystatechange = handleResponse;
    http.send(submitstring.join('&'));

    return false; // cancel real form submit
}

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form method="POST" action="retrieve.php" onsubmit="return sndReq(this)">
    <table cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td>
            <textarea name="links" cols="50" rows="10"></textarea>
            </td>
        </tr>
        <tr>
            <td><input type="submit" value="Retrieve related links"></td>
        </tr>
        <tr>
            <td>
              <div id="out"></div>
            </td>
        </tr>
    </table>
</form>


ik hoop dat je het een beetje begrijpt :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Super, daar kan ik wat mee! Bedankt Crisp! Ik denk dat ik er zo wel uit kom.
Pagina: 1