předání dat z javascript do PHP
23. zář 2015 12:59 - 23. zář 2015 13:02 #123547
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Odpověď od karel

Zkušený uživatel
vyzkoušejte, [strike]ale (imho) nebude fungovat, protože JS "nedrží" přihlášeného uživatele (v session/cookies) - jako když budete volat stejnou URL z jiného prohlížeče.[/strike]
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
23. zář 2015 15:17 #123548
Odpověď od Cony

Moderátor
Ano to by fungovat mělo, popř. JFactory::getUser()->id nebo můžete také testovat zda je uživatel přihlášen pomocí JFactory::getUser()->guest
23. zář 2015 15:18 #123549
Odpověď od Cony

Moderátor
Jinak do toho volání AJAX si můžete přidat proměných dle libosti, stačí rozšířit pole data: {} o dal39 prvky.
23. zář 2015 19:38 #123554
Odpověď od Ernst
Joomla Expert
Ano funguje, jak jsem si myslel.
Pokud někdo tuhle diskuzi sleduje, tak pak lokace.php vypadá následovně:
<?php
define( '_JEXEC', 1 );
if (stristr( $_SERVER, 'win32' )) {
define( 'JPATH_BASE', realpath(dirname(__FILE__).'\..\..\..' ));
} else define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
$app =& JFactory::getApplication('site');
$app->initialise();
jimport( 'joomla.user.user' );
jimport( 'joomla.user.helper' );
$real_lat = floatval($_REQUEST);
$real_lgt = floatval($_REQUEST);
$user = JFactory::getUser()->username;
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
$fields = array($db->quoteName('reallat') . ' = ' . $db->quote($real_lat), $db->quoteName('reallgt') . ' = ' . $db->quote($real_lgt));
$conditions = array($db->quoteName('display_name') . ' = "$user"');
$query->update($db->quoteName('#__lovefactory_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->query();
?>
Možná se tam tahá něco i zbytečně, to ještě otestuji
Pokud někdo tuhle diskuzi sleduje, tak pak lokace.php vypadá následovně:
<?php
define( '_JEXEC', 1 );
if (stristr( $_SERVER, 'win32' )) {
define( 'JPATH_BASE', realpath(dirname(__FILE__).'\..\..\..' ));
} else define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
$app =& JFactory::getApplication('site');
$app->initialise();
jimport( 'joomla.user.user' );
jimport( 'joomla.user.helper' );
$real_lat = floatval($_REQUEST);
$real_lgt = floatval($_REQUEST);
$user = JFactory::getUser()->username;
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
$fields = array($db->quoteName('reallat') . ' = ' . $db->quote($real_lat), $db->quoteName('reallgt') . ' = ' . $db->quote($real_lgt));
$conditions = array($db->quoteName('display_name') . ' = "$user"');
$query->update($db->quoteName('#__lovefactory_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->query();
?>
Možná se tam tahá něco i zbytečně, to ještě otestuji
23. zář 2015 19:49 #123555
Odpověď od Ernst
Joomla Expert
a máte Cony pravdu, použil jsem tam raději to JFactory::getUser()->id, tam mám opravdu jistotu, že nenastane duplicita.
PS jak zde vkládáte ukázky kódu do toho rámečku? To neumím a vypsání do textu je trochu nepřehledné.
PS jak zde vkládáte ukázky kódu do toho rámečku? To neumím a vypsání do textu je trochu nepřehledné.
24. zář 2015 09:26 #123561
V horní řadě ikon nad smajlíkama, cca uprostřed ikona "kód", nebo ručně
[code]
Tady bude kód
[/code]
Odpověď od Cony

Moderátor
ernst napsal: PS jak zde vkládáte ukázky kódu do toho rámečku? To neumím a vypsání do textu je trochu nepřehledné.
V horní řadě ikon nad smajlíkama, cca uprostřed ikona "kód", nebo ručně
[code]
Tady bude kód
[/code]
24. zář 2015 10:44 #123562
Odpověď od Ernst
Joomla Expert
Tak to zkusím stejně jsem měl chybu v tom zápisu do databáze. Správně má být to lokace.php
Code:
<?php
define( '_JEXEC', 1 );
if (stristr( $_SERVER['SERVER_SOFTWARE'], 'win32' )) {
define( 'JPATH_BASE', realpath(dirname(__FILE__).'\..\..\..' ));
} else define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
$app =& JFactory::getApplication('site');
$app->initialise();
jimport( 'joomla.user.user' );
jimport( 'joomla.user.helper' );
$real_lat = floatval($_REQUEST['lat']);
$real_lgt = floatval($_REQUEST['lgt']);
$user = intval(JFactory::getUser()->id);
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
$fields = array($db->quoteName('reallat') . ' = ' . $db->quote($real_lat), $db->quoteName('reallgt') . ' = ' . $db->quote($real_lgt));
$conditions = array($db->quoteName('user_id') . ' = '.$user);
$query->update($db->quoteName('#__lovefactory_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->query();
?>
24. zář 2015 16:52 #123570
Odpověď od Cony

Moderátor
Používáte Joomlu (i když tady poměrně nešikovně nepřímo), používejte tedy její "vychytávky".
Místo šahání přímo na $_REQUEST zkuste
Odstraňte & u těcto řádků - emitovalo by to deprecated hlášení
Měl by jste si asi také přidat kontrolu na to, že uživatel je přihlášen, něco jako
Místo šahání přímo na $_REQUEST zkuste
Code:
$real_lat = $app->input->getInt('lat',0);
$real_lgt = $app->input->getInt('lgt',0);
Code:
$app =& JFactory::getApplication('site');
$db =& JFactory::getDBO();
Code:
if ($user) {
...
}
25. zář 2015 11:56 - 25. zář 2015 12:00 #123586
Odpověď od Ernst
Joomla Expert
děkuji za rady, zkusím to.
Teď jsem aplikoval tyto informace v php, tam moc rad nepotřebuji.
To první funguje, jen místo getint( musím dát get( , potřebuji to na desetinná místa.
To druhé nefunguje, naopak to vypíše parse error. Musím tam to $ nechat.
Test na přihlášení nepotřebuji, všichni uživatelé webu musí být přihlášeni, ale dát ho tam mohu.
Kvůli podmínkám jsem tam musel přidat čtení z databáze, tak to teď vypadá takto:
Jak moc zatěžují ty dotazy na databázi server? Musel jsem je i jinde párkrát přidat.
Teď jsem aplikoval tyto informace v php, tam moc rad nepotřebuji.
To první funguje, jen místo getint( musím dát get( , potřebuji to na desetinná místa.
To druhé nefunguje, naopak to vypíše parse error. Musím tam to $ nechat.
Test na přihlášení nepotřebuji, všichni uživatelé webu musí být přihlášeni, ale dát ho tam mohu.
Kvůli podmínkám jsem tam musel přidat čtení z databáze, tak to teď vypadá takto:
Code:
<?php
define( '_JEXEC', 1 );
if (stristr( $_SERVER['SERVER_SOFTWARE'], 'win32' )) {
define( 'JPATH_BASE', realpath(dirname(__FILE__).'\..\..\..' ));
} else define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
$app =& JFactory::getApplication('site');
$app->initialise();
jimport( 'joomla.user.user' );
jimport( 'joomla.user.helper' );
$real_lat = $app->input->get('lat',0);
$real_lgt = $app->input->get('lgt',0);
$user = intval(JFactory::getUser()->id);
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array($db->quoteName('user_id') . ' = '.$user);
$query->select(array('field_50','membership_sold_id'))
->from($db->quoteName('#__lovefactory_profiles'))
->where($conditions);
$db->setQuery($query);
$row = $db->loadRow();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array($db->quoteName('user_id') . ' = '.$user);
$query->select(array('membership_id'))
->from($db->quoteName('#__lovefactory_memberships_sold'))
->where($conditions);
$db->setQuery($query);
$row1 = $db->loadRow();
$db =& JFactory::getDBO();
$query = $db->getQuery(true);
if (!($row[0]==0 and $row1[0]==2)){
$fields = array($db->quoteName('reallat') . ' = ' . $db->quote($real_lat), $db->quoteName('reallgt') . ' = ' . $db->quote($real_lgt));}
else {
$fields = array($db->quoteName('reallat') . ' = ' . $db->quote($real_lat), $db->quoteName('reallgt') . ' = ' . $db->quote($real_lgt),$db->quoteName('field_43_lat') . ' = ' . $db->quote($real_lat), $db->quoteName('field_43_lng') . ' = ' . $db->quote($real_lgt));
}
$conditions = array($db->quoteName('user_id') . ' = '.$user);
$conditions = array($db->quoteName('user_id') . ' = '.$user);
$query->update($db->quoteName('#__lovefactory_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->query();
?>
Jak moc zatěžují ty dotazy na databázi server? Musel jsem je i jinde párkrát přidat.
25. zář 2015 17:37 #123592
Odpověď od Cony

Moderátor
ad 1/ Pravda getInt ne, ale můžete použít getFloat - oproti get si zajistíte, že vrácená hodnota bude opravdu float
ad 2/ Já ale nepsal odstranit $, ale &
Podle toho jak jsou napsané, jak je udělaná databáze, jestli používají indexy apod. Pokud by se měli dotazy opakovat, můžete si dotaz zavolat jen jednou a pak si výsledek někde pamatovat...
ad 2/ Já ale nepsal odstranit $, ale &

ernst napsal: Jak moc zatěžují ty dotazy na databázi server? Musel jsem je i jinde párkrát přidat.
Podle toho jak jsou napsané, jak je udělaná databáze, jestli používají indexy apod. Pokud by se měli dotazy opakovat, můžete si dotaz zavolat jen jednou a pak si výsledek někde pamatovat...
25. zář 2015 22:47 #123605
Odpověď od Ernst
Joomla Expert
ad 2 přehlédl jsem se , omlouvám se.
dotazy jsou všechny psané jako ty dva v lokace.php
a teď můj oblíbený dotaz, jak pamatovat? volám je v různých php a různých třídách. Tak asi objekty použít nemůžu, snad nějaké parent, ale ty ještě neumím.
Jak je udělána databáze na hostingu netuším. je to mysqli
dotazy jsou všechny psané jako ty dva v lokace.php
a teď můj oblíbený dotaz, jak pamatovat? volám je v různých php a různých třídách. Tak asi objekty použít nemůžu, snad nějaké parent, ale ty ještě neumím.
Jak je udělána databáze na hostingu netuším. je to mysqli
26. zář 2015 00:00 #123607
Odpověď od Cony

Moderátor
mysqli neni databáze ale způsob připojení k databázi MySQL.
Jak je udělaná - tím nemyslím jak funguje MySQL, ale jak si to rozšíření (popř. Vy) vytváří tabulky, jaké mají indexy, jaká data apod.
A kde data ukládat? Nevím tedy přesně co ta pole mají za význam, ae nestačilo by Vám je přečíst jen jednou v rámci Session? a pak si je udržovat v session proměnné?
Jak je udělaná - tím nemyslím jak funguje MySQL, ale jak si to rozšíření (popř. Vy) vytváří tabulky, jaké mají indexy, jaká data apod.
A kde data ukládat? Nevím tedy přesně co ta pole mají za význam, ae nestačilo by Vám je přečíst jen jednou v rámci Session? a pak si je udržovat v session proměnné?
26. zář 2015 12:32 #123609
Odpověď od Ernst
Joomla Expert
Děkuji, zamyslím se nad tím . Session je vlastně platná po celou relaci?
Ale mám jeden problém, na který nemohu přijít.
Potřebuji do numerického políčka v databázi nastavit NULL
Když to udělám takhle:
Nastaví se mi tam nula
Ale mám jeden problém, na který nemohu přijít.
Potřebuji do numerického políčka v databázi nastavit NULL
Když to udělám takhle:
Code:
If($row[4]==1) {
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$fields = array($db->quoteName('field_43_lat') . ' = ' . $db->quote(""), $db->quoteName('field_43_lng') . ' = ' . $db->quote(""),);
$conditions = array($db->quoteName('user_id') . ' = '.$user);
$query->update($db->quoteName('#__lovefactory_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->query();
}
Nastaví se mi tam nula
26. zář 2015 14:24 #123611
Odpověď od Cony

Moderátor
Session = Relace
$db->quote("") - posíláte prázdný řetězec, to není null, pošlete opravdu null.
$db->quote("") - posíláte prázdný řetězec, to není null, pošlete opravdu null.
26. zář 2015 17:04 #123613
Odpověď od Ernst
Joomla Expert
to jsem všechno zkoušel, dokonce jsem tam poslal proměnnou s hodnotou NULL, ale v databázi je 0
Ta pole jsou decimal(15,12)
Ta pole jsou decimal(15,12)