Diskuze: Komunikace mezi 2 PHP.

JavaScript JavaScript Komunikace mezi 2 PHP.

Avatar
Le_Ze
Člen
Avatar
Le_Ze:

Nazdar kluci, pomůžete?
Mam v PHP soubor.
Potřebu v něm přes JS spustít další PHP soubor a načíst s něho data.
Pomůžete?
Už jsem se dočetl že to musí byt přes ajax.
Vyzkoušel jsem par návodu na netu, ale nějak se nedaří.

Prostě mam php data.php
v něm toto.

<?php
$promena = "test";
?>

Jak v druhem PHP, přes JS spustím ten skript data.php a načtu hodnotu $promena

Dik moc.

Editováno 11.10.2014 21:01
 
Odpovědět 11.10.2014 20:59
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Le_Ze
Daniel Vítek:

V JS to nepůjde, zkus v PHP include.

<?php include("data.php"); ?>
 
Nahoru Odpovědět 11.10.2014 21:06
Avatar
Samuel Illo
Redaktor
Avatar
Odpovídá na Daniel Vítek
Samuel Illo :

On zrejme chce načítať ten druhý súbor až neskôr po nejakej akcii zo strany používateľa a to s include nevyrieši :)

Nahoru Odpovědět 11.10.2014 21:09
www.samuelillo.com; lamka02sk(zavináč)samuelillo.com, www.point.samuelillo.com, www.csgorig.eu
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Samuel Illo
IT Man:

Tak to může vyřešit pomocí podmínek a include(); :)

if(...) {
include('data.php');
}
Nahoru Odpovědět 11.10.2014 21:23
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Honza Bittner
Redaktor
Avatar
Nahoru Odpovědět 11.10.2014 21:43
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
Le_Ze
Člen
Avatar
Le_Ze:

Tak jinak.

<?php
  $register_GPA = `sudo i2cget -y 1 0x20 0x13`;
  echo $register_GPA;
?>

Takto mi to načte data s registru a vypíše přes PHP.

Já to však potřebují strčít v JS do timeru.

Jak jsem tak patral, tak jediný způsob je vytvořit si třeba index.php.
Do něho dat JS.
A v něm přes ajax zavolat přes post ten první PHP a přenést tuto hodnotu.

 
Nahoru Odpovědět 11.10.2014 21:43
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Le_Ze
Jiří Gracík:

Pokud nepotřebuješ posílat ze stránky (která bude přes js volat tu druhou) žádná data, tak můžeš použít normálně get. jQuery má krásnou metodu na ajaxové volání stránky, mrkni tady: http://api.jquery.com/jquery.ajax/

Nahoru Odpovědět 11.10.2014 22:00
Creating websites is awesome till you see the result in another browser ...
Avatar
Le_Ze
Člen
Avatar
Odpovídá na Jiří Gracík
Le_Ze:

Kluci poraďte.
Nikdy jsen v PHP, JS a ajaxu nedělal.
Náhodou mi jeden známy daroval RasPi a já zkouším.

Našel jsem asi to co potřebují.
http://www.w3schools.com/…ajax_php.asp

Trochu tuším jak to funguje, ale asi sem si něco přised.
Upravím PHP File

<?php
$q=$_REQUEST["q"]; $hint="Test";
echo $hint;
?>

Když zadám do First name cokoliv, vypiše mi to Test.

Nevím však jak na tem JS v HTML.
Rad bych zrušil celou funkcí.
Prostě aby hned při spuštění stránky se hodnota té proměnné načetla v JS.

Editováno 11.10.2014 23:29
 
Nahoru Odpovědět 11.10.2014 23:28
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Le_Ze
Jiří Gracík:

Já moc nevím, co se snažíš udělat :) Jestli jsem to dobře pochopil - chceš do prvního souboru dosadit hodnotu do proměnné pomocí js z druhého souboru - tak to není možné. Pokud to myslíš jinak, tak ti nerozumím. Ideálně sem pošli všechny soubory a řekni nám znovu, co chceš udělat (ne jak, ale co).

Nahoru Odpovědět 12.10.2014 0:00
Creating websites is awesome till you see the result in another browser ...
Avatar
Le_Ze
Člen
Avatar
Odpovídá na Jiří Gracík
Le_Ze:

Už jsem to tu psal.

<?php
  $register_GPA = `sudo i2cget -y 1 0x20 0x13`;
  echo $register_GPA;
?>

Toto mi při spuštění načte hodnotu s registru v linuxu.
Ja je však nechci načítat jen jednou při spuštění, ale dat to do JS a do timeru.
Aby se to aktualizovalo.

Editováno 12.10.2014 0:10
 
Nahoru Odpovědět 12.10.2014 0:09
Avatar
Odpovídá na Le_Ze
Martin Konečný (pavelco1998):

Moc jsem to nečetl, ale mohlo by ti pomoct něco jako tohle:

<script>

function aktualizace()
{
    $.get("stranka_ktera_vypise_hodnotu_registru.php", function(hodnota) {
      $("#nejakyElement").html(hodnota);
    })
}

window.setInterval("aktualizace", 10000);

</script>

Píšu to z hlavy, takže nevim, jestli to bude fungovat. Navíc bys na to musel mít knihovnu jQuery (v čistým JS by to bylo o pár řádků delší).
V podstatě by tenhle kód měl udělat to, že se každých 10 sekund (10000 milisekund) pošle požadavek na soubor stranka_ktera_vypise_hodnotu_registru.php, jehož odpověď (text vypsaný pomocí echo) se uloží do proměnné hodnota, kterou už pak můžeš kdekoliv zobrazit.

 
Nahoru Odpovědět 12.10.2014 0:35
Avatar
Pavel Mareš
Redaktor
Avatar
Pavel Mareš:

Jestli to dobře chápu (a jsem si tím téměř na 100% jist), má Martin v podstatě pravdu, ale toto je asi to co chceš: (je to v JQuery, jelikož v čistém JS to nehodlám dělat)

function vezmiHodnotu(element) {
        $.post('cesta_k_souboru_php.php',
                value: element,
                function(result) {
                        VysledekZeSouboru = result; //není potřeba, jen když třeba chceš vědět jestli to vyšlo
                }
        );
}
setTimeout(function(){
        elHodnoty = $("span.hodnota");
        vezmiHodnotu(elHodnoty);
}, 10000); //za 10s se to spustí

Teoreticky by to mělo fungovat, píšu to také z hlavy, takže tu není 100% jistota, ale mělo by to fungovat.

Nahoru Odpovědět 12.10.2014 8:28
Nechci být workoholik. Bohužel někdy musíme být tím, čím nechceme.
Avatar
Le_Ze
Člen
Avatar
Odpovídá na Pavel Mareš
Le_Ze:

Děkují moc - vyzkouším.

je to v JQuery, jelikož v čistém JS to nehodlám dělat

Nelenil jsem a zkoušel to řešení co je na te strance co jsem tu dal.
http://www.w3schools.com/…ajax_php.asp

Ta PHP stranka by měla byt nšjak tako.

<?php
$q=$_REQUEST["q"]; $hint=sudo i2cget -y 1 0x20 0x13;
echo $hint;
?>

Se strankou s JS jsem take zkoušel.

<html>
<head>
<script>
function showHint(str) {
  document.getElementById("txtHint").innerHTML="";
  var xmlhttp=new XMLHttpRequest();
  xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
  document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","gethint.php?q="+str,true);
  xmlhttp.send();

}
</script>
</head>
<body>


<form>
First name: <input type="text" onkeyup="showHint(this.value)">
</form>
<p><span id="txtHint"></span></p>

</body>
</html>

Jen se ještě trochu trapím.
Třeba zrušit tu http čast a tu proceduru volat přimo v JS a ne přes input
Poradite.

Editováno 12.10.2014 8:43
 
Nahoru Odpovědět 12.10.2014 8:42
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Le_Ze
Daniel Vítek:

Tak to je opravdu AJAX :)
Viděl bych to nějak takto:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
setInterval(function()
{
  $("semToVypis").load('/cesta/k/souboru.php');
}, 1000);
</script>
</head>
<body>
<div id="semToVypis"></div>
</body>
</html>

Tohle ti bude každou sekundu vypisovat obsah souboru soubor.php do divu #semToVypis

 
Nahoru Odpovědět 12.10.2014 14:40
Avatar
Le_Ze
Člen
Avatar
Le_Ze:

Nějak to nefunguje.
Tady je soubor který volám.

<?php
$q=$_REQUEST["q"]; $hint=`sudo i2cget -y 1 0x20 0x13`;
echo $hint;
?>
Tady je to s čím jsem si hral a zkušel.
<html>
<head>
<script>
function showHint(str) {
  document.getElementById("txtHint").innerHTML="";
  var xmlhttp=new XMLHttpRequest();
  xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
  document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","gethint.php?q="+str,true);
  xmlhttp.send();

}
</script>
</head>
<body>


<form>
First name: <input type="text" onkeyup="showHint(this.value)">
</form>
<p><span id="txtHint"></span></p>

</body>
</html>

Je to funkční.
Když něco napišu do inputu vypiše mi to ten obsah registru.

A tu to co tu dal p.Vítek

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
setInterval(function()
{
  $("semToVypis").load('gethint.php');
}, 1000);
</script>
</head>
<body>
<div id="semToVypis"></div>
</body>
</html>
Editováno 12.10.2014 16:19
 
Nahoru Odpovědět 12.10.2014 16:17
Avatar
Le_Ze
Člen
Avatar
Odpovídá na Le_Ze
Le_Ze:

Nefunguje, žadne chyby nevyhazuje, jen prazdna stranka.

 
Nahoru Odpovědět 12.10.2014 16:23
Avatar
Odpovídá na Le_Ze
Martin Konečný (pavelco1998):
$("semToVypis").load('gethint.php');

U toho ti chybí znak #, což znamená v jQuery ID elementu.

$("#semToVypis").load('gethint.php');
 
Nahoru Odpovědět 12.10.2014 17:54
Avatar
Le_Ze
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Le_Ze:

:D děkují všem.
Ještě poslední.
Jak dostanu tu staženou hodnotu s Query ID elementu?
Nechci to vypisovat na stanku ale zpracovat.

Asi nějak takto, ale nefunguje to.

setInterval(function()
{

  $("#semToVypis").load('gethint.php');
  text = #semToVypis;
  document.write(text);
}, 1000);
Editováno 12.10.2014 18:16
 
Nahoru Odpovědět 12.10.2014 18:15
Avatar
Odpovídá na Le_Ze
Martin Konečný (pavelco1998):

Tak můžeš udělat něco ve smyslu

var text = $("#semToVypis").html();

Ale pokud to chceš zpracovávat, spíš bych na to použil metodu $.get() než $.load().

 
Nahoru Odpovědět 12.10.2014 19:34
Avatar
Le_Ze
Člen
Avatar
Le_Ze:

Klucí, děkují moc.

Ale pokud to chceš zpracovávat, spíš bych na to použil metodu $.get() než $.load().

No jsem rad že jste mi tady pomohli s tým load a že jsem to vůbec rozchodil.
Nevím zda jste to tady čet.
Nemam nic společného s programováním.
Dostal jsem Rasberry pi a snažím se ho ovladat přes web rozhraní.

Stejnak vím že mně nemíné se naučit alespoň základy, ale zatím si hrají :)

 
Nahoru Odpovědět 12.10.2014 19:59
Avatar
Le_Ze
Člen
Avatar
Odpovídá na Le_Ze
Le_Ze:

Nazdar kluci.
Už mi s toho začíná hrabat.
To k čemu jsme tu tak pracně dospělí funguje.
Spokojen.

<script type="text/javascript">
setInterval(function()
{
  $("#semToVypis").load('gethint.php');
  var text = $("#semToVypis").html();
}, 1000);
</script>

Mam však ve stejném adresáři další skript.
zap_GPA0.php
Když to strčím do prohlížeče, zapne se mí pin GPA0.
Snažím se ho spustit stejným způsobem a nejde to.

$("#test").load('zapGPA0.php');

Zkoušel jsem i toto.

$("#test").load("'zapGPA0.php'?pin=1");

Así musí byt v tom souboru, co volám nějaká návratová hodnota, že, aby to fungovalo.
Nebo zas jsem něco posmolil.
Jde to vyřešíte bez ní?

Editováno 15.10.2014 5:18
 
Nahoru Odpovědět 15.10.2014 5:16
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.