ugrás a tartalomhoz

JS_PHP

aeternum · 2010. Nov. 26. (P), 16.02
Sziasztok!
:)

Megint és még mindig ugyanaz a problémám, mint egy fél éve volt. :)
Sikerült megoldást találnom arra, hogy JS-nek php változó értéket átadni

 var js_valtozo = "<?=$_SESSION[php_valtozo]?>";
Ámde!
:)

Mégsem működik és mégis működik..
:)

Mégsem működik apache localhoston és mégis működik NuSphere PhpEditor debuggerében.
Vajh, miért??
:)

A részletesebb kód:

<?php
//ha regisztrálva van, akkor rendben, ha nincs, akkor a kezdooldalra küldi
session_start();
if(!session_is_registered(user_name))  {header("location:../index.php");}

    // meres ideje, nem egyedi mérés: default
    $most_ora=(date(H)+1).":00";

    // Ha még nincs munkamenet reg
    if (!session_is_registered(meres_ideje)) { session_register("meres_ideje");}
    $_SESSION[meres_ideje]=$most_ora;
    $_SESSION[egyedi_e] = false;
    
  }
 else
  {  // $meres_ideje = $_SESSION[meres_ideje];
      if (isset($_REQUEST['egyedi']))
        { $_SESSION[meres_ideje] = $_REQUEST['egyedi'];
          $_SESSION[egyedi_e] = true;
        }
        
  }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<script language="JavaScript" type="text/javascript">

// kiirja, hogy normál mérés vagy egyedi mérés
function elso_kiiras()
     { mikor =" <?=$_SESSION[meres_ideje];?> ";
       egyedi = "<?=$_SESSION[egyedi_e];?>";
	   
       if (egyedi)
        { kiir('um_MSG','Egyedi mérés : ', mikor);}
        else
        { kiir('um_MSG', 'Mérés ideje : ', mikor);}
     }

/*Általános span-re írató fv*/
	function kiir (hova, belso_txt, ertek)
     { document.getElementById(''+ hova +'').innerHTML=''+ belso_txt +''+ ertek;}

</script>
</head>
<body onload="elso_kiiras();">
A debuggerben kiirja és eldönti, hogy normál menet van és nem egyedi mérés (NÉHA!!!! hogy mitől függ, el nem tudom képzelni!!!), a Firefoxban (Operában) EGYÁLTALÁN NEM, és mivel a js 'egyedi' változó nincs definiálva számára, ezért alapból FALSE, ami nekem rossz.

Próbáltam ellenőrizni úgy, hogy az oldal különböző pontjaira tettem értékadásokat, de sehol sem veszi föl a php változó értékét...

<td id="dateformat" name="dateformat" height="13" colspan="7" align="center" valign="middle" style="font-size:9px;">
  <script type="text/javascript">
    document.write(TODAY);

    var mikor = "<?=$_SESSION[meres_ideje]?>";
    var milyen= "<?=$_SESSION[egyedi_e]?>";
    document.write("<br/>mikor: " + mikor + "<br/>");
    if (milyen)
     { document.write("<br/>milyen: igaz");}
    else
     { document.write("<br/>milyen: hamis");}

  </script>

</td>
Most azon nyűglődöm- mert jobb ötletem nincs!-, hogy a php változókat kirakom egy php állományba, amit ajax-szal lekérdezek...
Miért van olyan érzésem, hogy verébre ágyuval akarok lőni??? :)

Szerintem VAN normális megoldás is!!!
Szerintetek?
:)

aet
 
1

if

kuka · 2010. Nov. 26. (P), 16.33
if (!session_is_registered(meres_ideje)) { session_register("meres_ideje");}
$_SESSION[meres_ideje]=$most_ora;
Szerintem először pucold ki, mert amíg zagyválod a session kezelést, addig nem érdemes mást debugolni rajta.
Caution

If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
Lásd a session_register() leírását a PHP dokumentációban.
2

Mivel ez az oldal nem a belépés oldala,

aeternum · 2010. Nov. 26. (P), 17.04
ezért ezen az oldalon adok értéket azoknak a változóknak, amelyekre később szükség van.

Hamarabb nem akarom, mert a megelőző oldal működéséhez nem érdekes, hogy mi az időpont.
Ráadásul, ha az előző oldalon órákat molyol, akkor hamis értéket is fog rögzíteni ezen az oldalon, mert ezen az oldalon már űrlap is van.

Tehát, ha nincs regisztrálva a mérés ideje, akkor jöjjön létre ez a változó, de ha már űrlap elküldése miatt újratöltődött az oldal, akkor ez már nem első belépés az oldalra.

Kicsit világosabban: 3 óránként mérni kell(8:00, 11:00, ...). Ez a normál menet.
De elképzelhető, hogy elrendelnek egyedi mérést, méréseket.
Ekkor egy input mezőben megadja az egyedi mérés időpontját. Ezt olvasom ki a REQUEST változóból, ehhez rendelem hozzá az új mérésazonosítót, illetve megengedem, hogy csak részadatokat rögzítsen, különben minden mérendő adatot bekér az űrlap (alapértelmezés szerint).

Nyilván el kell különítenem a méréseket egymástól a későbbi kiíratás okán is.
(8:00, 8:30, 9:00, 9:30, 10:00, 11:00, 12:30, 12:45, 13:00, 14:00 )


Szóval még mindig nem értem, hogy miért nem kap értéket FF-ben a js változó és a debuggerben miért igen...

Bár épp most láttam egy topicot, miszerint a js üggvényt legjobb lesz a </body> elé tenni..
Talán segít.. bár kevés tudásom berzenkedik, mert nem DOM elemről van szó.. Vagy mégis?
:)

aet
3

HTML

Poetro · 2010. Nov. 26. (P), 17.10
Jó lenne látni, hogy mi a HTML amit a PHP eredményez, mert anélkül nehéz bármit mondani. Mondjuk egy minimalizált példa oldal sokat tudna segíteni (valószínűleg neked is.)
7

még ma

aeternum · 2010. Nov. 27. (Szo), 02.46
előállítok egy minimál verziót..
:)

Sok minden történik azon az oldalon.. :)

a fölső részben meghatározza, hogy milyen tipusú a mérés (egyedi vagy sem),
bal oldalon kiválasztja, hogy melyik egyedet akarja mérni,

a jobb oldalon az új méréshez szolgáló űrlap van, illetve az eddigi mérések eredményei is kiíródnak.

Igyekszem mysql nélkül megoldani a próba lapot.. de egy csomó adat onnan jön..
az egyedek nevei, a mért eredmények..
nem tudom, mennyire fog látszani és a kód sem lesz naon tiszta!
:))))))))))))))

nem vagyok képzett és gyakorlott programozó, csak igyekszem figyelni a szabályokra.
:)

szóval, még ma felteszem.. :)

Üdv. aet
4

short_open_tag=On

thgab · 2010. Nov. 26. (P), 17.14
Nem lehetséges, hogy az apache és a nusphere nem ugyanazt a php-t használja?
Az a gyanúm, hogy a debugger php.ini-jében be van kapcsolva a short_open_tag, az apache által használt php.ini-ben meg nincs.
E helyett:
<?=$_SESSION[egyedi_e]?>
próbáld ki így:
<?php echo $_SESSION[egyedi_e]?>
8

már próbáltam,

aeternum · 2010. Nov. 27. (Szo), 02.47
az echo-ra sem reagált.

bár a php.init nem ellenőriztem....
ezt is köszönöm, megnézem! :)
11

ez vóóót a gond.. :(

aeternum · 2010. Nov. 30. (K), 02.16
Erre mit csinál a lúúúúzer? :)
Újratelepíti a webszervert..
kijavítja a hibát és értetlenül áll az újabb PORBLÉMA előtt:

Használj set_date_timezone() fv-t, mert nem értelmezhető sok minden..
Ugyanis a XAMPP, az újratelepítés után, EUROPE/Paris-ra állította be az időzónát... :)
Oszt hiába javítom ki a my.ini-t.... Europe/Budapestre....
ÁáÁáÁáÁáÁ!!!!!!!!!!!!!
:)))))))))

Eggyel több sor és eggyel több tanulság! RTFM! :)

aet
5

Cookie

gabesz666 · 2010. Nov. 26. (P), 19.23
Egyetlen kérdésem volna: miért nem cookie-t használsz? :) Azt ugyanis JS-ből is eléred, így nem kell a php-s részt belehekkelned.
9

ez jó kérdés! :))))))))))))

aeternum · 2010. Nov. 27. (Szo), 02.54
mert nem vagyok programozó? Különben biztos eszembe jut!
:))))))))))))))))

Nem csak ezért! Talán azért sem gondolkodtam ezen, mert handheld eszközökön lesz implementálva és nem szeretném, hogy teljen az eszköz tára..
Ezért is vetettem el a JS keretrendszereket...

Lehet, hogy rosszul látom, cáfoljatok meg! , de számomra a keretrendszerek tűl nagyok ahhoz a két-három dologhoz képest, amit használhatok belőlük, hiszen a mobil eszközök (akár handheld, akár telefon) nem mindegyike alkalmas ilyenek futtatására... (értsd: a böngészőjük)

de a COOKIE nem butaság! :) Átgondolom!
:))))

Köszönöm! :))))))))))
6

Változók

Poetro · 2010. Nov. 27. (Szo), 01.29
Amennyiben a legkényelmesebben akarsz átadni JS-nek vátlozókat, csomagold őket egy objektumba, vagy tömbbe, és azt add át a JS-nek.
<?php
$settings = array(
  'setting1' => 'az egyik beallitas',
  'setting2' => 'a masik beallitas',
);
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
<script type="text/javascript">
  var settings = <?php echo json_encode($settings); ?>;
  alert(settings.setting1);
  alert(settings.setting2);  
</script>
</body>
</html>
10

ha már maradok az eredeti elképzelésnél,

aeternum · 2010. Nov. 27. (Szo), 03.11
akkor ebben van ráció! :)))))))))))

Jó tudom, Te vagy a Mágus!
:))))))))))))

Szóval azt mondod, hogy

<?php  
  $settings = array(  
   'egyedi' => false,  
   'belepes' => true,  
  );  
?>  
<!DOCTYPE HTML>  
<html lang="en-US">  
 <head>  
  <meta charset="UTF-8">  
  <title></title>  
 </head>  
 <body>  
  <script type="text/javascript">  
     var settings = <?php echo json_encode($settings); ?>;  
     (!settings.egyedi)? meres_ideje = normal_idopont: meres_ideje = egyedi_idopont;
     settings.belepes = false;    
  </script>  
 </body>  
</html>  
Ezzel csak az a gond, hogy az új mérés űrlapjának elküldésekor ez az adat törlődni fog...
már pedig, a több egyed mérése miatt az űrlap többször is újratölti az oldalt. Ezért kell a $_SESSION[]. És akkor gyön az AJAX, mint az űrlap elküldésének lehetősége.. :)
Mert akkor nem töltődik újra az oldal...

Nah!

Csinálom a példa oldalt.. :)
:)

Köszönöm az ötletet!
:)))))))))))

aet