Java týden
Procvič si angličtinu zdarma s naším americkým e-learningem! Learn more
Pouze tento týden sleva až 80 % na celý Java e-learning!

Diskuze: Zobrazení obsahu na jiné doméně

Aktivity (2)
Avatar
gorri
Člen
Avatar
gorri:25. února 10:58

Opět zdravím zkušenější PHPkáře,
mám na jedné doméně obsah, který chci zobrazit na jiné doméně. Konkrétně se mi jedná o kontaktní formulář. Bohužel když to zkusím takovým řešením, tak se mi jednak data nezobrazí a jednak se mi ještě nedočte stránka. Zobrazí se jen část formuláře (v tomto případě bych neviděl tak úplně chybu v podmínkách) ale ve chvíli kdy se má vypsat něco co je v Db, tak se data nezobrazí.
Uvedu příklad:

<label for="contact">Na koho se chcete obrátit</label>
<select name="contact">
<option value="">Vyberte</option>
<?php
foreach (Db::queryAll('SELECT * FROM form_field_support WHERE active=?', 1) as $n) {
echo '<option value="';
                    echo (htmlspecialchars($n['id']));
                    echo '"';
                    if($_POST['contact'])
                    {
                        if($_POST['contact'] == $n['id'])
                        {
                            echo ' selected';
                        }
                    }
                    echo '>';
                    echo (htmlspecialchars($n['nazev']));
                    echo '</option>';
}
 ?>
</select>

Ve chvíli kdy formulář zobrazím, tak už se nezobrazují data v select. Vše je na stejném serveru jen jiná doména.
Zobrazení obsahu z jiné domény jsem vyřešil takto

$url = 'https://subdomain.domain.cz/forms/contact.php';
function get_data($url) {
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
}
echo get_data($url);

Navedl by mě někdo prosím správným směrem?
Děkuji. :-)

Zkusil jsem: Google, stackoverflow

Chci docílit: Zobrazení formuláře a zároveň kompletní dočtení stránky.

Odpovědět 25. února 10:58
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:25. února 11:10

Ahoj,
subdoména bývá z pravidla nějaký buď vedlejší adresář nebo podadresář...
php soubor lze vložit funkcí include, require případně jejich *_once variantou
mrkni se tu do tutoriálu,, třeba zde https://www.itnetwork.cz/…dani-stranek

Nahoru Odpovědět 25. února 11:10
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:25. února 11:16

Díky za odpověď, ale to není ten problém. Obsah se má zobrazit z úplně jiné domény. Tady je iclude celkem k ničemu ;-)
Příklad:
formulář - contact.php
umístěn na https://subdomain.domain.cz/…/contact.php

stránka, kde se má zobrazit
http://anotherdomain.cz

Nahoru Odpovědět 25. února 11:16
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:25. února 11:30

To nebude fungovat. A to co se snažíš udělat nedává smysl. K čemu to má sloužit?

Nahoru Odpovědět 25. února 11:30
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Odpovídá na gorri
Vladislav Ladicky:25. února 11:32

Prečo vôbec robíš takú silne neštandardnú vec? Môžeš napísať čo sa vlastne snažíš dosiahnuť? Možno k tomu existuje priamočiarejšia cesta.

Editováno 25. února 11:33
 
Nahoru Odpovědět 25. února 11:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25. února 11:46
  • Bylo by fajn, kdybys misto $n pouzil neco smysluplnejsiho, treba $row.
  • Nechapu vyznam, proc jit do curl? Dana stranka ma spustene ochrany proti vykradani obsahu? Nestacilo by file_get_conten­t($url)? Co vlastne chces docilit?

Jak to chapu ja, tak tvuj kod dela to, ze v prvni casti vyrobi jakesi select policko. A pod nej chces zobrazit asi dalsi kod. Ale curl ti stahne cizi stranku. A prohlizec funguje tak, ze bud zobrazi prvni tag BODY a nebo tag BODY prepise tim, co dostane pozdeji.
Jinymi slovy, kdyz si v prohlizeci das zobrazit zdrojovy kod stranky, tak tam by mohl byt i ten tvuj select, jen proste neni videt.
Cili misto echo get_data($url); bys to mel ulozit do promenne. A pomoci reg. vyrazu nebo jinak odstranit body tagy.
Napr, kurzovni listek nebo pocasi se stahuje csv soubor pomoci file_get_conten­t($url) a ty si ten textovy soubor uz pomoci php predelas na peknou tabulku, doplnis vlajecky a pod.

Editováno 25. února 11:47
 
Nahoru Odpovědět 25. února 11:46
Avatar
gorri
Člen
Avatar
Odpovídá na Vladislav Ladicky
gorri:25. února 11:46

Jde mi o to, že potřebuji zobrazit na více webech formulář, který se časem bude i trochu měnit. A nechci abych každou úpravu musel kopírovat třeba na 100 webů.
Věřím, že k tomu existuje i jiná cesta, ale já ji zatím nenašel. :D

Nahoru Odpovědět 25. února 11:46
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25. února 11:52

Mozna by ti stacilo neco takoveho:

web1/gen_form.php
<?php echo vyrobMiFormular() ?>

web1/formular.php
<?php include 'gen_form.php' ?> nebo
<?php echo file_get_content('gen_form.php') ?>

web2/formular.php
<?php echo file_get_content('http://.../web1/gen_form.php'; ?>
 
Nahoru Odpovědět 25. února 11:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25. února 11:55

Hlavni problem u takoveho formulare bude mozna adresa pro form action. Ale, pokud je mas vsechny stejne. Treba jen chces provozovat nekolik eshopu na ruznych domenach a chces tahat zakladni eshop z jedne a data drzet uzivateli na jeho domene.

 
Nahoru Odpovědět 25. února 11:55
Avatar
Odpovídá na gorri
Vladislav Ladicky:25. února 11:56

Ale predpokladám, že každý ten formulár bude posielať mail na inú adresu, alebo zapisovať dáta do inej databázy. Je tak?

 
Nahoru Odpovědět 25. února 11:56
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:25. února 11:58

Víceméně jsem už vyřešil problém. Data se mi vypisují všechny tak jak mají ale data z formuláře z nějakého důvodu nikoli.
V administraci mohu určit jaká položka bude povinná a jaká ne. To je logicky napojeno na SQL. Jenže z nějakého důvodu mi to věčně říká, že se nedaří připojit k tabulce i když je vše definované správně.
Příklad

$pole = Db::queryOne('SELECT * FROM polozky WHERE web=?', $_SERVER['SERVER_NAME'])

if(($pole['jmeno'] == 1) || ($pole['jmeno'] == 2))
        {
include ('./polozky/jmeno.php')
}
else
{
echo '';
}

Mě se nenačte nic z $pole i přestože je doména na stejném serveru.
Zkusil jsem $pole napsat i na web, kde se má zobrazit formulář a nic.
Je samozřejmě i v souboru, který se má zobrazovat.

Nahoru Odpovědět 25. února 11:58
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:25. února 12:00

Bohužel toto mě nestačí. Z nějakého důvodu se stránka díky tomu nedočte.
Co se týká form action, tak ta je přímo ve formuláři. Takže formulář je v pohodě a data se taky budou odesílat bezproblému.

Nahoru Odpovědět 25. února 12:00
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
gorri
Člen
Avatar
Odpovídá na Vladislav Ladicky
gorri:25. února 12:01

Ne. Data se budou zapisovat do jedné DB. Notifikační email se bude posílat i na jiné adresy ale to už si bude tahat z DB

Nahoru Odpovědět 25. února 12:01
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Odpovídá na gorri
Tomáš Novotný:25. února 12:03

Rozumím, ale řekl bych, že toto je špatný nápad. Ty weby budou závislé na dostupnosti jiného webu.
Navíc si osobně dost dobře nedovedu představit, že 100 různých webů u různých hosterů bude natolik obsahově stejných, že změna 'master' formuláře proběhne u všech v pořádku.
Navíc, kdybych byl majitel takového webu, který si tahá z nějaké jiného serveru kdoví jaký, pro mne neznámý php kód, tak bych takového vývojáře co by mi chtěl prodat takový web poslal k šípku :-)
Z mého pohledu je to docela bezpečnostní problém.

Editováno 25. února 12:06
Nahoru Odpovědět 25. února 12:03
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
gorri
Člen
Avatar
Odpovídá na Tomáš Novotný
gorri:25. února 12:07

To už špekuluješ nad něčím co jsi si vydedukoval. A navíc vydedukoval špatně.

Nahoru Odpovědět 25. února 12:07
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na gorri
Peter Mlich:25. února 12:15

A proto se te ptame, co to ma presne delat?
Nase reseni ti nevyhovuje. Proc jsi nerekl. Co je na nem spatne?
Pokud se neco nedotahne, ze ta prvni aplikace asi spatne, co generuje formular. Zkus ten muj priklad predelat na nejakou jednoduchou formu. Nahrej to na ty weby a dej sem odkazy, na kterych muzeme videt, co ti to delat. Dej tam formular, var_dump($_POST), mozna session. Co ja vim... Nemam ani zdani, co by mohlo byt spatne.

Pokud je to cizi stranka, pokousis se neco vykradat a nemas prispu ke kodu nebo serveru, je celkem mozne, ze ma spustene ochrany. Ale pak by ti napsal spis error a nebo login nefungoval.

Kdyz se nalogujes na cizi stranku, tak ti login na cizi strance zustane. Pokud si ho nejakym zpusobem neposles zpet. Treba si tam pridas skryty input do formulare s adresou webu, na ktery ti ma poslat odpoved. Idealne nejaky druh hash, ktery jsi schopen na tom prvnim webu vyrobit. Rozhodne bych jako odpoved neposilal pavel, login=ok. To hacker snadno padela.

 
Nahoru Odpovědět 25. února 12:15
Avatar
Odpovídá na gorri
Vladislav Ladicky:25. února 12:26

Chápem o čo ti ide. A môže ti to dokonca fungovať. Ale napriek tomu sa na to vykašli a čo doména, to vlastný form. To, čo chceš dosiahnuť, sa rieši zautomatizovaním deploymentu, nie zozdieľaním kódu. A už vôbec nie aj databázy.

 
Nahoru Odpovědět  +1 25. února 12:26
Avatar
Odpovídá na Vladislav Ladicky
Tomáš Novotný:25. února 12:29

Asi tak, nebo případně směrování více domén na jedno místo... kde pro každou doménu může být jiný vzhled, ale backend je stejný...

Nahoru Odpovědět 25. února 12:29
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:25. února 12:31

Díky za rady. Nicméně asi to budu muset nechat postaru. Každopádně nejde o žádný hack. Všude mám přístup a domény jsou moje :-)
file_get_content nefunguje. Je to formulář, který má v sobě položky pouze pod podmínkou, že jsou povoleny v SQL.
Neměl jsem se do toho ani pouštět. Hodiny času v řiti :-D
Ale zkusil jsem to. Každopádně díky.

Nahoru Odpovědět 25. února 12:31
Když vím, tak poradím. Nikdo neví všechno :-)
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25. února 12:43

'file_get_content nefunguje'
Auto se rozbilo. Z toho nikdo netusi, co tomu je, co selhava.

 
Nahoru Odpovědět 25. února 12:43
Avatar
gorri
Člen
Avatar
Odpovídá na Peter Mlich
gorri:25. února 13:05

Zastavilo mi to načítání zbytku stránky. :-)
Nevím teď už proč a nebudu se k tomu ani vracet. Ztráta času momentálně. Snad někdy příště příjdu na lepší řešení. Ale i tak díky.

Nahoru Odpovědět 25. února 13:05
Když vím, tak poradím. Nikdo neví všechno :-)
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.