risoluzione schermo con javascript e valore dato a php: dove l'errore?

salve ragazzi: passo subito al problema mettendo tutto il codice relativo:

<script language="JavaScript">

<!--
var Wide = screen.width;


if (Wide <= 640){

  document.write("<? $valore = '600'; ?>")

}
else if (Wide <= 800){

  document.write("<? $valore = '760'; ?>")

}

else if (Wide <= 1024){

  document.write("<? $valore = '984'; ?>")

}
else (Wide => 1025){
   document.write("<? $valore = '1100'; ?>")

}
//-->
</script>

questo codice non fa nulla di speciale: controlla la larghezza dello schermo del client e la restituisce ed in base alla risoluzione scrive nel documento un determinato valore; (penso si capisca molto facilmente)

ora nel document.write io ho scritto una semplice istruzione in php $valore = '';

valore che in effetti poi mi serve nel codice php per capire quanto devono essere larghi i layer.

 Ora: il codice funziona, nel senso che non da errore e pare che questo valore venga anche processato in php...solo che qualsiasi sia la risoluzione il valore esce sempre uguale a 1100! ed è un errore! Nel senso se in effetti come fa riconosce la larghezza perchè non scrive il valore giusto?

 $valore in effetti non è che non ritorna proprio...perchè nella pagina viene scritto 1100 ma perchè se la risoluzione è diversa non scrive un altro valore?

Grazie a tutti!

inviato 8 anni fa
micdech
X 0 X

quel codice viene realmente inserito nella pagina HTML, però questo avviene quando la pagina è ormai nel browser dell'utente, dove PHP non può agire.

PHP quindi non processerà mai quelle istruzioni perché sono state generate dal Javascript sul PC dell'utente, non sul server.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ciao,

il comando che hai scritto nel document.write è solo una semplice assegnazione quindi non genera nessun valore di stampa. Puoi utilizzare un comando aggiuntivo echo $valore; per visualizzarlo.

C'è anche un errore nella costruzione della struttura degli "if" poiché nell'ultimo controllo hai dimenticato di mettere un "if".

Ti riporto il codice corretto:

<script language="JavaScript">
<!--
var Wide = screen.width;

if (Wide <= 640) {

  document.write("<? $valore = '600'; echo $valore; ?>");

}
else if (Wide <= 800){

  document.write("<? $valore = '760'; echo $valore; ?>");

}

else if (Wide <= 1024){

  document.write("<? $valore = '984'; echo $valore; ?>");

}
else if (Wide >= 1025){
   document.write("<? $valore = '1100'; echo $valore; ?>");

}
//-->
</script>

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

Ciao Ragazzi, anzitutto grazie per le celeri risposte...

Rispondo a Gianni anzitutto:

so che tu sei un genio :D ma PHP secondo me lo processa...perchè nel file ritorna, dove lo richiedo, il valore 1100 e invece dovrebbe uscire solo <?php $valore = '1100'; ?> se non fosse processato...dico una scemenza?

il problema è che qualsiasi sia il valore di $valore...lui scrive sempre 1100! MAH...

Zeta grazie anche a te per la risposta...ma l'echo l'ho omesso solo perchè l'ho scritto sull'altra parte della pagina...ma in realtà c'è...

Per capire meglio ciò che dico provate a dare un'occhiata a http://micdech.altervista.org/daniel/index.php vedete il sorgente della pagina...e capirete meglio cosa dico....o ancora potrei spedirvi o postarvi le pagine in questione tanto sono poche kb

Grazie ancora e a presto!

risposto 8 anni fa
micdech
X 0 X

se non ti fidi non ci posso fare niente  :dunno:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Gianni sai che non è mia intenzione contraddiriti...e mi fido di te...altrimenti nn andrei cercando una risposta qui :D

è solo che leggo quello che fa lo script...tutto qui...perchè il punto è che prende solo l'ultimo valore...qualunque sia il wide...mi chiedevo come mai...tutto qui,...

Voi come fareste?

Grazie ancora e ti prego...non te la prendere..non ho scritto ciò per contraddirti ma solo per dirti quello che fa questo script...

A presto

risposto 8 anni fa
micdech
X 0 X

Figurati, posso essere contraddetto come qualsiasi altra persona. La mia era solo una provocazione per sollecitare la tua attenzione sul funzionamento di quello script.

Si tratta di un JavaScript, quindi di istruzioni che vengono eseguite sul browser dell'utente. Lo scopo di queste istruzioni è scrivere nella pagina HTML delle isctruzioni PHP che memorizzano in $valore la risoluzione dello schermo dell'utente.

Queste istruzioni PHP vengono realmente scritte nella pagina ma la domanda da porsi è: chi le eseguirà? Sono sul browser dell'utente, e sappiamo che sul browser solo gli script Javascript vengono eseguiti. Gli script PHP devono risiedere sul server web per essere eseguiti.

Oltre al codice che hai riportato, tu hai un altro script che ti dice che $valore è 1100. Non so perché accada, magari riporta anche quello scrispt. Comunque resta il fatto che sul browser non può essere eseguito uno script PHP.

Gli script Javascript per rilevare le caratteristiche PHP utilizzano uno piccolo stratagemma per comunicare queste impostazioni ad uno script PHP. Scrivono dinamicamente un tag IMG o SCRIPT in modo da costringere il borwser a recuperare dal server un'immagine o uno script Javascript. L'URL di questi tag però punta ad un'altro script PHP che leggendo i parametri presenti nell'URL recupera queste informazioni.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ovviamente sono d'accordo con te...javascript è già sul browser...ma speravo rimandasse indietro il codice al server per interpretarlo!

cmq...siccome lo script che ho scritto è molto semplice lo scrivo tutto qui!

eccolo: Richiamo nel browser la pagina index.php e all'interno di essa è scritto:

<?php
   
   include_once('/template/template_up.php');
   include_once('/template/template_down.php');
?>

in template_up è scritto:

<?php require_once('controlli.php'); ?>
<!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>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title><?php $title ?></title>
<script language="JavaScript">
<!--
var Wide = screen.width;

if (Wide <= 640) {

  document.write("<? $valore = '600'; echo $valore; ?>");

}
else if (Wide <= 800){

  document.write("<? $valore = '760'; echo $valore; ?>");

}

else if (Wide <= 1024){

  document.write("<? $valore = '984'; echo $valore; ?>");

}
else if (Wide >= 1025){
   document.write("<? $valore = '1100'; echo $valore; ?>");

}
//-->
</script>
<?php include_once('style.css'); ?>

</head>

<body>   

      <div id="header">
      </div>
      <div id="menu"><?php include_once('menu.php');?></div>

      <div id="main">

In template_down è scritto solo un pò di html (chiusura del div mai e fine della costruzione della pagina html) quindi è un pò inutile che ve lo scriva...

in controlli.php è scritto:

<?php

   session_start();   

      if (!isSet($_SESSION['sessione']))

         {

         $_SESSION['sessione'] = 1;

         //echo "inizio sessione";

         }else{

         $sessione = $_SESSION['sessione'] +1;

         $_SESSION['sessione'] = $sessione;

         //echo "sessione già aperta";

         };

      

   $browser = $_SERVER['HTTP_USER_AGENT'];

   $ip_client = $_SERVER['REMOTE_ADDR'];

   $page =  $_SERVER['PHP_SELF'];

   

       if(eregi("firefox",$browser)){ $bordi = "-moz-"; } 

       elseif(eregi("Safari", $browser)){ $bordi = "-webkit-";}

       else {$bordi = null;}//msie.[4|5]

      

?>

e infine in style.css è scritto:

<style type="text/css">

body       {background-color: #4e596b; margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; }

a:link       {border: hidden; color: none; text-decoration: none;}

a:visited    {color: none; text-decoration: none;}

a:hover    {color: none; text-decoration: none;}

a:active    {color: none; text-decoration: none;}





#logo {

   position: absolute;

   margin-top: -183px;

   <?php echo "width:" .$valore."px;" ?>

   height:205px;

   z-index:3;

   background-image: url(logo.png);

   background-repeat: no-repeat;

   background-position: right;

}

#header{

   background-color: #880000;

   border: 1px solid #FFFFFF;

   height: 88px;

   border-top: 0px;

   <?php echo "width:" .$valore."px;" ?>

   margin-top: 0px;

   margin: auto;

   z-index: 3;

   <?php 

      echo "{$bordi}border-radius-bottomleft: 5px;";

      echo "{$bordi}border-radius-bottomright: 5px;";

   ?>

}

#menu{

   border: 0px solid #FFFFFF;

   height: 12px;

   <?php echo "width:".$valore."px;" ?>

   margin-top: 1px;

   margin: auto;

   z-index: 3;

   font-size: 10px;

   font-family: Monospace;

   text-align: right;

   padding-top: 1px;

}

#main{

   margin: auto;   

   margin-top: 1px;

   background-color: #880000;

   <?php echo "width:".$valore."px;" ?>

   height: 600px;

   border: 1px solid #FFFFFF;

   z-index: 3;

   <?php 

      echo "{$bordi}border-radius-bottomleft: 5px;";

      echo "{$bordi}border-radius-bottomright: 5px;";

      echo "{$bordi}border-radius-topleft: 5px;";

      echo "{$bordi}border-radius-topright: 5px;"; 
   ?>

}

#footer{

   margin: auto;   

   margin-top: 1px;

   background-color: #880000;   

   height: 20px;

   <?php echo "width:".$valore."px;" ?>

   border: 1px solid #FFFFFF;

   z-index: 3;

   <?php 

      echo "{$bordi}border-radius-bottomleft: 5px;";

      echo "{$bordi}border-radius-bottomright: 5px;";

      echo "{$bordi}border-radius-topleft: 5px;";

      echo "{$bordi}border-radius-topright: 5px;"; 
   ?>

}

</style>

come vedi 1100 è scritto solo lì nel javascript...allora non capisco...cosa succede?

risposto 8 anni fa
micdech
modificato 8 anni fa
X 0 X

In quale punto del codice hai verificato che $valore diventa 1100?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

mettendo nel file style.css il tag

<style type="text/css">

il file viene incluso nell'html stesso...e quindi può anche essere processato da PHP

ora nel file css come vedi ho messo i tag php <?php echo "width:" .$valore."px;" ?>

cosicchè scrive width: $valore px;

e valore dovrebbe aquistare il valore dipendente dalla risoluzione ma prende solo 1100 che è l'ultimo degli IF

infatti ho provato a levare l'ultimo IF e valore acquista solo il valore di 984

In poche parole...da quello che ho potuto capire io...javascript esegue tutte le condizioni e sovrascrive ogni volta il valore di $valore

allora, se la risoluzione è per esempio 800x600...perchè non si ferma a quella condizione?

Mi sono fatto capire? o sono stato confusionario? :D

Grazie ancora e a presto!

risposto 8 anni fa
micdech
X 0 X

Il file style.css, non avendo estensione PHP, non viene processato e quindi le istruzioni PHP al suo interno non vengono eseguite.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda