Pagina 1 di 1

[PHP5] Attivare la sintassi breve per le variabili GET

MessaggioInviato: 20 nov 2007, 10:52
di dannyb78
Scusate la domanda, che forse sarà banale, ma essendo TOTALMENTE ignorante in fatto di costruzione di pagine web mi sto picchiando da ieri sera con una funzione require che non riesco a far andare.

in pratica vorrei scrivere in una pagina qualcosa tipo

<?php require('pagina1.php?var1=a&var2=b'); ?>

che mi include la pagina pagina1.php elaborandola con i valori di var1 e var2 che gli passo. Solo che senza parametri funziona (ovviamente riporta i valori che ho impostato per var1 e var2 = "", ma questo conferma il buon funzionamento del codice), invece mettendo i parametri ?var1=a&var2=b dà errore e ovviamente esce, trattandosi di un require.

Dove sbaglio?

[edit]

il problema non era nella sintassi, ma nel fatto che non era attiva la sintassi breve per le variabili GET. vedi più avanti per ulteriori info

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 20 nov 2007, 12:30
di thrantir
ma com'è fatta dentro quella pagina? puoi postarci il codice? in che punto ti da errore?

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 20 nov 2007, 12:54
di dannyb78
thrantir ha scritto:ma com'è fatta dentro quella pagina? puoi postarci il codice? in che punto ti da errore?


Ok. Questa funzione vorrei usarla per caricare parte dell'header del sito. Mi serve per poter cambiare con facilità i titolo a tutte la pagine, le keywords per i motori di ricerca, e altro.

Questo è il file auxpages/header.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" />

<meta name="keywords" content="Mountain-bike Club MOUNTAIN BIKE mountain bike Cecina ciclismo itinerari ciclistici biciclette bicicletta Costa degli Etruschi squadra nazionale collegiale marina di Bibbona foto gran fondo Emicicli biker bikers associazione ciclistica CECINA ciclisti circuito italiano provincia di Livorno toscana TOSCANA granfondo COSTA DEGLI ETRUSCHI fuoristrada Federazione Ciclistica Italiana corsi corso maestro campionato bike-trial escursioni guidate escursione guidata serata enogastronomica spinning marathon granfondina Camping Le Esperidi cinema bambini spettacolo acrobatico BIKE TRIAL gara gare news tour gatorade Mic-shimano Challenge Coppa Toscana MTB percorso percorsi Challenge Tosco/Lombardo newsletter manifestazione manifestazioni Piombino Elba Gorgona Pianosa Montecristo Capraia Rosignano Marittimo Solvay Bibbona Campiglia Marittima Baratti Populonia Bolgheri Castagneto Carducci Suvereto Sassetta Parco Monti Livornesi Macchia Magona Oasi Faunistica Bolgheri Parco Rimigliano San Vincenzo Strada del Vino turismo outsider Maremma natura Cecina Mare gruppo sportivo">

<title><?
if ($id=="gf")
{echo "MTB Club Cecina: Undicesima edizione Granfondo Costa degli Etruschi";}
else { if ($id=="club")
{echo "MTB Club Cecina: Sport &amp; divertimento";}
else {echo "MTB Club Cecina";}
}
echo "$testo";
?></title>

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>

<script type="text/javascript">

_uacct = "UA-1199859-1";

urchinTracker();

</script>


Questo invece è l'inizio di una pagina qualsiasi (in questo caso index.php)

<?php require('auxpages/header.php'); ?>

<link href="\css\style1.css" rel="STYLESHEET" type="text/css">

......

</head>

...


prima importo la parte di codice comune a tutte le pagine, poi lascio spazio ad eventuali altre righe di codice proprie della pagina. Così come è scritto funziona. Ovviamente il titolo sarà "MTB Club Cecina".

Se sostituisco con
<?php require('auxpages/header.php?id=gf&testo=home'); ?>

ottengo questo errore:
Warning: require(auxpages/header.php?id=gf&testo=home) [function.require]: failed to open stream: No such file or directory in /var/www/mtb-cecina/index.php on line 1
Fatal error: require() [function.require]: Failed opening required 'auxpages/header.php?id=gf&testo=home' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/mtb-cecina/index.php on line 1

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 20 nov 2007, 14:48
di thrantir
immagino che il problema stia nel fatto che non puoi includere una pagina con require passando valori per get o post... a parte che non li potresti usare come fai tu, ma li dovresti prendere esplicitamente dall'array dei parametri di get. Sicuramente se definisci quelle variabili prima di fare la require dovrebbe funzionare, in paratica fai

[code]
<?php
$id = "gf";
$test = "home";
require('auxpages/header.php');
?>
[code]

così il file php incluso dovrebbe "ereditare" le due variabili definite precedentemente

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 20 nov 2007, 14:49
di thrantir
un altro modo potrebbe essere definire una funzione nel file ausiliario e chiamarla coi parametri che vuoi passare, questo forse sarebbe più pulito come stile di programmazione

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 20 nov 2007, 14:59
di dannyb78
thrantir ha scritto:un altro modo potrebbe essere definire una funzione nel file ausiliario e chiamarla coi parametri che vuoi passare, questo forse sarebbe più pulito come stile di programmazione


non sono proprio a digiuno di programmazione, ma le mie reminescenze di strutture dati in c++ mi aiutano solo a livello teorico e non molto nemmeno in quello. non ho mai avuto modo di sturiare html, css, php nè altro, semplicemente mi trovo a risistemare il lavoro di altri in un linguaggio per me misterioso. Cerco di andare avanti con quello che trovo con google e su html.it, oltre a guardare le pagine già esistenti.
Questo per dire che l'idea di un sistema più pulito mi attira, ma non ho assolutamente idea di come tradurre in codice quello che hai detto. Se è una cosa relativamente semplice e potessi farmi un esempio te ne sarei grato, altrimenti uso la prima sintassi suggerita che funziona perfettamente.

Grazie thra!

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 20 nov 2007, 15:43
di thrantir
quello che volevo dire era che, siccome devi in qualche modo fare qualcosa di parametrico, potresti avere, nel file che includi, una funzione del tipo

Codice: Seleziona tutto
function pippo($id, $testo) {
    ...
}


e, invece che passare i parametri al momento dell'inclusione, cosa che sembra non si possa fare, fai l'inclusione e richiami subito la funzione

<?php
require('auxpages/header.php');
pippo("gf", "home");
?>

anche il modo che ti ho detto prima, comunque, dovrebbe funzionare, e ti permette di non modificare il resto del codice

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 21 nov 2007, 13:18
di dannyb78
Ok, ho capito, ti ringrazio. Faccio qualche prova, se non altro per cultura personale. alla prox!

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 22 nov 2007, 13:58
di thrantir
de nada :-)

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 24 nov 2007, 00:28
di dannyb78
Credo di aver capito perchè non andava inizialmente. Ricercando su manuali e howto il metodo da me inizialmente usato per passare le variabili è corretto. Mi sa che per poter passare i parametri occorre prima configurare correttamente php e/o apache, perchè lo stesso problema lo ho anche con un altra pagina, che sul server che ospita il sito funziona, mentre sul mio server "domestico" per i test non va...

Guardate questo esempio. Passo la variabile pagina ad un file che prima ne stampa il valore poi esegue un require. Il require fallisce, ma prima ancora si nota che la variabile non ha assunto il valore.

Immagine

Qualche idea?

edit - per curiosità ho caricato sul server remoto il primo condice che ho postato (quello con sintassi <?php require('pagina1.php?var1=a&var2=b'); ?>)... FUNZIONA! Evidentemente è un problema di configurazione del server di prova ](*,)

Re: [PHP] trasferire parametri tramite "require"

MessaggioInviato: 26 nov 2007, 12:37
di thrantir
sono abilitati solo i parametri passati in POST, controlla nel file di configurazione di apache se si parla di qualcosa relativo ai parametri in GET

comunque quei parametri mi sa che te li devi prendere dall'array GET, ora non mi ricordo bene come si fa, se cerchi su html.it dovresti trovare tutto

Re: [PHP5] Attivare la sintassi breve per le variabili GET

MessaggioInviato: 29 nov 2007, 16:56
di dannyb78
Come diceva il buon thrantir il problema era in php.ini, ma sbagliavo ricerca... alla fine ho trovato su php.html.it [url=su php.html.it]questa lezione[/url].

Riassumendo molto nelle nuove versioni di php, per motivi di sicurezza, trasferendo delle variabili per GET viene creato solo l'array $_GET[] e non le variabili.
Per essere più chiari alla sintassi "pagina1.php?var1=1&var2=100" deve corrispondere una pagina1.php così fatta;
<?
$variabile1=$_GET[var1];
$variabile2=$_GET[var2];
echo("$variabile1 - $variabile1");
......
?>


che stamperà a video
1 - 100

Ovviamente variabile1 può chiamarsi in qualsiasi modo, anche var1.

per utilizzare la sintassi breve, ovvero

<?
echo("$var1 - $var2")
......
?>


ottenendo lo stesso risultato è necessario editare il file php.ini (/etc/php5/apache2/php.ini) e cambiare il valore di register_globals in "on"

in teoria quella impostazione dovrebbe avere lo stesso effetto anche sui parametri trasferiti via POST, non voglio chiedermi perchè a me invece funzionavano, ora va sia il GET che il POST e sono in pace con il mondo. Spero questo post possa essere utile anche per altri.