Autor Zpráva
adam11
Profil *
Mám problém, mám formulář, který odešle data do PHP souboru a tam se mi zobrazí ty dané data v tabulce (v php). No a u těch dat (u každého řádku) mám tlačítko, které by mělo spustit jiný php soubor, ale pouze na pozadí a předat mu proměnnou $sur_missing a provést uložení do databáze.

Tady je kód, kde mám to tlačítko v té tabulce:
echo "<tr> <td>$name <td>$sur <td>$process <td>$test kcal <td><button value='$sur_missing' onclick='add_to_shopping_list(this.value);'>Add to shopping list</button> </tr>";

Tady je ta Javascriptová funkce:
<script type="text/javascript">
function add_to_shopping_list(missing_sur) {
$.get( "test.php", { q: missing_sur } );
}
</script>

A tady je test.php, tedy soubor který by se měl provést na pozadí, chci ale opravdu aby nedošlo k žádnému přesměrování, prostě pouze aby se to provedlo na pozadí a stránka zůstala aktuální ta co tam bylo, tedy ta tabulka s tlačítky.
<?php
    include("mysql-connect.php");
    header("Content-Type: text/html; charset=UTF-8");
    $q = $_GET['q'];

    //tady pak bude kod na uložení proměnné q (kterou bych měl získat z proměnné missing_sur) do databáze
?>

Problém je v tom, že ten Javascriptový kod nefunguje, prostě se ten test.php nespustí a nepředají se mu data, ale když dám do té funkce například funkci alert(missing_sur); tak to funguje a tu proměnnou mi to vypíše v alert boxu, vypadá to, že prostě akorát příkaz $.get nefunguje.
_es
Profil
adam11:
Asi máš zmätok v tom, kedy a na čom bežia JS a PHP, viď Nejčastější potíže s PHP (FAQ). Nemáš tam žiadnu spätnú väzbu z test.php, tá JS funkcia sa spustí, no JS už nečaká na odpoveď zo servera.
TomasJ
Profil
adam11:
No napřed bys měl zjistit, jestli proběhne síťová komunikace (když říkáš, že to nefunguje). Pak bys měl ošetřit vstup ($_GET['q']) a nakonec ho zpracovat, abys zjistil, že opravdu nefunguje.
adam11
Profil *
_es:
Nemám v tom zmatek, vím jak Javascript a php funguje, já nepotřebuju žádnou zpětnou vazbu, mě jde jen o to, že jakmile kliknu na tlačítko tak se provede jiný php skript na pozadí, kterému se předá parametr, to je vše.
aDAm
Profil
A jaký skript se provede?
_es
Profil
adam11:
mám formulář
Kde ho „máš“? V kóde, čo si dal, žiaden formulár nie je. Ak sa nachádza tlačítko vo vnútri formulára, tak formulár odstráň, keď ho zjavne nepotrebuješ a chceš odosielať dáta len cez JS.
adam11
Profil *
_es:
Ten formulář je v html souboru, který odkazuje na soubor php, kde se zobrazí ta tabulka, ten formulář není podstatný, jde o to že mi nejdou poslat data a spustit ten další php soubor na pozadí

aDAm:
Měl by se mi provést ten skript test.php ale neprovede se pomocí toho kódu, který jsem tu dal a který by měl jet.
_es
Profil
adam11:
Ten formulář je v html souboru, který odkazuje na soubor php, kde se zobrazí ta tabulka, ten formulář není podstatný
No a ten problematický <button> je v „tom formulári“, alebo v ňom nie je?
adam11
Profil *
_es:
ne není v něm
_es
Profil
adam11:
No a je v nejakom inom formulári? Nastáva problém vo všetkých prehliadačoch? Viď Formuláře » button.
adam11
Profil *
_es:
Tady nejde vůbec o žádný formulář, nejde to ani když tam dám místo Button normální odkaz, problém je v tom scriptu. A jde mi o to jestli by mi někdo mohl poradit, jak docílit tady toho:
Potřebuji při kliknutí na tlačítko nebo odkaz to je jedno, které je zakódované v php souboru, tak jak vidíte výše, aby se (asi nejlépe) pomocí Javascriptu spustil jiný php soubor na pozadí, kterému se předá jedna proměnná z toho Javascriptu, to znamená aby nedošlo k obnovení stránky, ani k přesměrování na tu stránku.
Micruss
Profil
asi dost v blbá otázka... máš link na jQuery? jinak bych zkusil třeba ještě poslat

pak .done();

$.get( "test.php", { q: "ahooj" } ).done(function( data ) {
    alert( "Data Loaded: " + data );

a do php skriptu třeba jednoduše echo $_GET['q'];... a pokud to bude tak místo ahooj dáš to - missing_sur
a uvidíš :)
_es
Profil
adam11:
Tady nejde vůbec o žádný formulář, nejde to ani když tam dám místo Button normální odkaz
Ak je to tlačítko vo formulári, tak odosiela formulár a ruší celú zobrazenú stránku aj s jej JS kódom, čo je v kolízii s tým, že chceš ešte odosielať HTTP požiadavky cez XMLHttpRequest. Ak namiesto tlačítka dáš odkaz, nastáva rovnaký problém.
adam11
Profil *
Micruss:
Jsem blbec, prostě chybička se vloudila, samozřejmě jsem tohle přehlédl a link na jQuery mi tam chyběl, díky moc za radu jinak bych to asi řešil do nekonečna, protože nevím jestli bych si toho všiml.
Kubo2
Profil
adam11:
O dôvod viac, prečo programovať v čistom JS :-)
CHyby sa tam hľadajú oveľa ľahšie, a aj keď to nenapíšeš na jeden riadok, ako napríklad $.get, ale na sedem, tak je to väčšinou oveľa prehľadnejšie a logickejšie ako ten jeden riadok v jQuery a nezakrýva to svoju podstatu :-)
aDAm
Profil
Kubo2:
tak ono stačilo kdyby si to adam11 pořídně debugoval a logoval akce

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0