Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][AJAX][PHP]Proste - trudne / jak dokleić do URL i opóźnić część skryptu
skleroza
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.06.2017

Ostrzeżenie: (0%)
-----


Witam,
Dawno nie bawiłem się w pisanie skryptów i wiele wyleciało mi z głowy.
Dlatego też mam prośbę o pomoc
1. Jak dodać zapytanie do URL
2. Jak opóźnić część skryptu

Kawałek z HTML
  1. <script type="text/javascript" language="javascript" src="ajax.js"></script>
  2. <div align="center"><h2>*Sprawdź*</h2>
  3. <form action="java script:get(document.getElementById('acctform'));" name="acctform" id="acctform">
  4. <textarea rows="1" cols="1" style="width: 25%; height: 20px" id="search_id"></textarea>
  5. <p>
  6. <input type="submit" name="button" value="Sprawdź adres" onclick="return Tab_Click(this)">
  7. </form>
  8. <br>
  9. <div align="center" id="waiting"></div>
  10. </p>
  11. <br>
  12. <div align="center" id="showresults"></div>
  13. </div>


Do tego cały ajax.js

var http_request = false;
function makePOSTRequest(url, parameters) {
http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}

http_request.onreadystatechange = alertContents;
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}

function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
result = http_request.responseText;
document.getElementById('waiting').innerHTML = '';
document.getElementById('showresults').innerHTML = result;
} else {
alert('There was a problem with the request.');
}
}else{
document.getElementById('waiting').innerHTML = '<img src="loading.gif">';}
}

function get(obj) {
var poststr = "" + encodeURI( document.getElementById("search_id").value );
makePOSTRequest('getaddress.php', poststr);
}


No i tu zaczynają się problemy
getaddress.php
  1.  
  2. // to działa ok
  3. $url = "https://blockchain.info/address/1CoAgA2Bb9XDMsBv6cE1YNuU5Z1BormTTc";
  4.  
  5. // tu już nie chce zwracać odpowiedzi nawet jak dam
  6. //if (isset ($_POST['search_id'])) {
  7. //$url = "https://blockchain.info/address/{$_POST['search_id']}";
  8.  
  9. //dalej jest chyba ok bo zwraca dane
  10.  
  11. $ch = curl_init();
  12. curl_setopt($ch, CURLOPT_URL,$url);
  13. //curl_setopt($ch, CURLOPT_POST, 1);
  14. //curl_setopt($ch, CURLOPT_POSTFIELDS, '$_POST['search_id']');
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  16. curl_setopt($ch, CURLOPT_TIMEOUT, 25);
  17. $wejscie = curl_exec($ch);
  18. curl_close($ch);
  19.  
  20. preg_match('/<div class="col-md-5">(.+?)<\/div>/ism', $wejscie, $wyjscie);
  21. preg_match('/<div class="col-md-4" style="overflow:visible;">(.+?)<\/div>/ism', $wejscie, $wyjscie1);
  22.  
  23. echo($wyjscie[0]);
  24. echo($wyjscie1[0]);
  25.  
  26. // i tu moje drugie pytanie jak opóźnić tą część skryptu
  27. // w ten sposób opóźnia cały skrypt
  28. // wiem że można zrobić to w JS ale nie potrafię tego zrobić a wolał bym aby wszystko było w .php
  29.  
  30. flush();
  31. sleep(20);
  32.  
  33. $baza = "blebleble................";
  34.  
  35. echo($baza)
  36. ?>



Z góry dziękuję za wszelką pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
bostaf
post
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(skleroza @ 23.06.2017, 11:25:12 ) *
1. Jak dodać zapytanie do URL

Masz na myśli jak dodać parametr do urla? Np. żeby zamiast http://url.pl/index.php?a=1 dostać http://url.pl/index.php?a=1&b=2 ? Czyli dodać b=2 do urla?

Cytat(skleroza @ 23.06.2017, 11:25:12 ) *
2. Jak opóźnić część skryptu

Co masz na myśli? Możesz podać jakiś prosty przykład przed i po?
Go to the top of the page
+Quote Post
skleroza
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.06.2017

Ostrzeżenie: (0%)
-----


OK podam łopatologicznie smile.gif

W html wklejam adres BTC- ten adres jest wysyłany do php gdzie jest doklejany do url i skrypt wykonuje dalej działanie

Co do opóźnienia to zależy mi aby pierwsza część skryptu php - czyli pobranie danych z innej strony zostało wykonane od razu a druga część skryptu czyli pobranie z mojej bazy informacji i ich wyświetlenie - wykonało się po x czasie
Go to the top of the page
+Quote Post
freewalker
post
Post #4





Grupa: Zarejestrowani
Postów: 90
Pomógł: 4
Dołączył: 14.02.2015

Ostrzeżenie: (0%)
-----


w PHP każda funkcja jest blokująca, dalszy kod się nie wykona, póki nie wykona się kod poprzedzający.

Masz 2 rozwiązania:
1: niech PHP liczy sobie for(i) do 100 tryliardów, opóźni to resztę o kilkanaście sekund, może minut wink.gif
2: a teraz na poważnie:

$start = time();

while(true) {
if ((time() - $start) > 300) {
return false; // opóźnienie dalszego kodu o 300 sekund
}
}
// dalszy kod do przerobienia

Ten post edytował freewalker 25.06.2017, 22:25:21
Go to the top of the page
+Quote Post
skleroza
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.06.2017

Ostrzeżenie: (0%)
-----


Cytat(freewalker @ 25.06.2017, 23:22:57 ) *
2: a teraz na poważnie:


Coś jest nie tak, wiem że ta funkcja opóźnia działanie - ładowanie
  1. $url = "https://blockchain.info/address/1CoAgA2Bb9XDMsBv6cE1YNuU5Z1BormTTc";
  2.  
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL,$url);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  6. curl_setopt($ch, CURLOPT_TIMEOUT, 25);
  7. $wejscie = curl_exec($ch);
  8. curl_close($ch);
  9.  
  10. preg_match('/<div class="col-md-5">(.+?)<\/div>/ism', $wejscie, $wyjscie);
  11. preg_match('/<div class="col-md-4" style="overflow:visible;">(.+?)<\/div>/ism', $wejscie, $wyjscie1);
  12.  
  13. echo($wyjscie[0]);
  14. echo($wyjscie1[0]);
  15.  
  16. $start = time();
  17.  
  18. while(true) {
  19. if ((time() - $start) > 300) {
  20. return false; // opóźnienie dalszego kodu o 300 sekund
  21. }
  22. }
  23. // dalszy kod do przerobienia
  24.  
  25. $baza = "blebleble................";
  26.  
  27. echo($baza)
  28. ?>


ale zwraca mi tylko jeden wynik:
  1. preg_match('/<div class="col-md-5">(.+?)<\/div>/ism', $wejscie, $wyjscie);

Go to the top of the page
+Quote Post
roobik
post
Post #6





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Zamiast preg_match daj preg_match_all
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A po co chcesz to opóźniać?


--------------------
Go to the top of the page
+Quote Post
skleroza
post
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.06.2017

Ostrzeżenie: (0%)
-----


Cytat(roobik @ 26.06.2017, 08:41:12 ) *

Dzięki ale to nie pomaga w opóźnieniu dalszej części skryptu

Cytat(viking @ 26.06.2017, 09:04:35 ) *
A po co chcesz to opóźniać?

Powiedzmy że chciałbym aby wyglądało że drugi wynik jest szukany (przez określony czas)
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zle sie za to zabierasz. Jak ajaxem lecisz po cos, to nie mozesz dostac cos, wyswietlic to i zaraz znowu dostac to samo. AJAX zwraca ci wszystkie dane naraz, niezalznie czy dajesz tam jakies opoznienia czy nie - wszystko otrzymasz na raz.

Jak chesz miec opoznienie, to zrob je poprostu w js. AJAXem pobierzesz wszystkie dane, a w js daj setTimeout() by wyswietlic reszte danych po jakims czasie. Oczywiscie dobrze by bylo jakby ajax zrocil ci dane w postaci JSON - latwiej to pozniej obrabiac.


Cytat
Dzięki ale to nie pomaga w opóźnieniu dalszej części skryptu
No raczej, ale tak to jest jak osoba odpowiadajaca czyta temat po lebkach wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skleroza
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.06.2017

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 26.06.2017, 10:47:27 ) *
Jak chesz miec opoznienie, to zrob je poprostu w js. AJAXem pobierzesz wszystkie dane, a w js daj setTimeout() by wyswietlic reszte danych po jakims czasie. Oczywiscie dobrze by bylo jakby ajax zrocil ci dane w postaci JSON - latwiej to pozniej obrabiac.


Dzięki pobawię się tym i zobaczę co wyjdzie - prosto nie będzie bo "skleroza" i trzeba sobie wszystko od nowa przypomnieć smile.gif

OK - a co z pierwszym moim pytaniem jak dodać do URL ? bo próbowałem już POST, GET, CURLOPT_POST i inne sposoby ale przy tym co podałem w pierwszym poście ni hoho mi nie dokleja do URL
  1. $url = "https://blockchain.info/address/TU MA DOKLEJAĆ adres z formularza http";


Ten post edytował skleroza 26.06.2017, 10:21:46
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Kod co miales:

$url = "https://blockchain.info/address/{$_POST['search_id']}";

Jest poprawny. Jedyny problem jaki masz,to poprostu zle AJAXem przesylasz te search_id i tyle. Problem lezy w twoim kodzie js. Z tego co widze to przesylasz tylko wartosc tego pola. Zapomniales o nazwie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skleroza
post
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 23.06.2017

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 26.06.2017, 11:25:56 ) *
Kod co miales:

$url = "https://blockchain.info/address/{$_POST['search_id']}";

Jest poprawny. Jedyny problem jaki masz,to poprostu zle AJAXem przesylasz te search_id i tyle. Problem lezy w twoim kodzie js. Z tego co widze to przesylasz tylko wartosc tego pola. Zapomniales o nazwie.


Dzięki smile.gif
Oto poprawka i działa smile.gif
  1. ajax.js
  2.  
  3. function get(obj) {
  4. var poststr = "search=" + encodeURI( document.getElementById("search").value );
  5. makePOSTRequest('getrsaccounts.php', poststr);
  6.  
  7. html
  8.  
  9. <form action="java script:get(document.getElementById('myform'));" name="myform" id="myform">
  10. <input type="text" name="search" id="search" />
  11. <input type="button" name="button" value="Submit" onclick="java script:get(this.parentNode);">
  12. </form>
  13. <span name="myspan" id="myspan"></span>
  14.  
  15. php
  16.  
  17. $url = "https://blockchain.info/en/address/{$_POST['search']}";


Teraz jeszcze pozostaje mi powalczyć z setTimeout() - zobaczymy co z tego wyjdzie


Cytat(skleroza @ 27.06.2017, 11:19:40 ) *
Teraz jeszcze pozostaje mi powalczyć z setTimeout() - zobaczymy co z tego wyjdzie


To może zamiast bawić się w opóźnianie ktoś mi podpowie czy da się i ewentualnie jak zrobić coś takiego
Pierwsza część skryptu działa już OK. Jak przenieść {$_POST['search']} do innego pliku php np 2.php.
W 1.php daję np. coś takiego:
  1. $baza = "2.php?={$_POST['search']}";
  2. echo "<button><a target=\"_blank\" href=\"$baza\"><h4>Baza</h4></a></button>";


I chciał bym aby w pliku 2php wykonało mi np.:
  1. $a = "/search?q={$_POST['search']}";
  2. echo "<button><a target=\"_blank\" href=\"$a\"><h4>a</h4></a></button>";


Ten post edytował skleroza 27.06.2017, 10:21:01
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:53