php e template

Sto provando a ristrutturare il mio sito con un  un template in php con l' index riportato sotto, non mi è chiaro come ottenere che anche delle pagine in php racchiuse in una directory, che non sia la root, vengano visualizzate nella pagina centrale del sito.

menu.php

<div id="menusx">
<div class="button"><a href="index.php?page=glossario/glossario"></a></div>

cosi non và
funziona solo mettendo il file glossario nella root e dichiarandolo cosi

<div class="button"><a href="index.php?page=glossario"></a></div>

ho capito che il problema è nell'index.php

<? include("header.php");
include("menu.php");
$p="main";              //pagina di default per i contenuti centrali
if(isset($_GET['page'])){      //pagina passata via parametro
    $p=$_GET['page'];
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
        $p="error";     //pagina di errore
    }
include($p.".php");
include("footer.php"); ?>

e piu' precisamente nell'if pero' non capisco come ovviare. Debbo modificare l'if ? il modo di dichiarare la pagina nel menu'??

inviato 7 anni fa
blackeyes
X 0 X
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
        $p="error";     //pagina di errore
    }[/quote]

Nell' if chiami la funzione file_exists($p.".php") così come dichiarato nell'argomento php cerca il file nella stessa directory dell'index o nelle cartelle che indichi nel file di configurazione del php alla voce include_path.

Se il file di cui devi verificare l'esistenza è in un'altra cartella devi inserire tutto il percorso ad esempio se è nella cartella 'pagine' avrai:
file_exists("pagine/".$p.".php")

prova a fare questa modifica...
risposto 7 anni fa
sasti07
X 0 X

scusa ho fatto un macello.. non ho chiuso i tag quote e ho scritto tutto il messaggio in codice... però si capisce...

risposto 7 anni fa
sasti07
X 0 X
<div id="menusx">
<div class="button"><a href="index.php?page=glossario/glossario"></a></div>

cosi non và
funziona solo mettendo il file glossario nella root e dichiarandolo cosi

<div class="button"><a href="index.php?page=glossario"></a></div>

Il primo è sbagliato... il secondo è giusto, 'page' è una variabile non un percorso dove trovare lo script

risposto 7 anni fa
sasti07
X 0 X

purtroppo non và

risposto 7 anni fa
blackeyes
X 0 X

ma quando dici che la directory non è la root vuol dire che il file si trova fuori dalla DocumentRoot?

risposto 7 anni fa
sasti07
X 0 X

ma che errore ti da? Lavori in locale?

risposto 7 anni fa
sasti07
X 0 X
ma quando dici che la directory non è la root vuol dire che il file si trova fuori dalla DocumentRoot?

intendo la directory principale del sito i file del glossario sono nella sottodirectory glossario non da errore ma non carica la pagina...

risposto 7 anni fa
blackeyes
X 0 X
ma che errore ti da? Lavori in locale?

pubblico i files sul sito

risposto 7 anni fa
blackeyes
X 0 X

scusate...se mi intrometto :)

non so se ho ben capito quello che fai o che ti serve.

ma non è che in questa richiesta

include($p.".php");

ti manca il percorso alla directory??

del tipo

include("glossario/".$p.".php");

non so se è quello che vuoi

risposto 7 anni fa
vercinstex
X 0 X

chedo che vercinsex abbia ragione...

risposto 7 anni fa
sasti07
X 0 X

alleora se modifico lo sctipt cosi' <? include("header.php"); include("menu.php"); $p="main";              //pagina di default per i contenuti centrali if(isset($_GET['page'])){      //pagina passata via parametro     $p=$_GET['page'];     if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))         $p="error";     //pagina di errore     } include("glossario/".$p.".php"); include("footer.php"); ?>non mi visualizza piu' le pagine del sito

Il sito è costruito in modo da visualizzare le varie pagine in una finestra centrale chiamata main.php attualmente se inserisco una pagina come ad esempi0 glossario.php nella directory radice del sito e non in una sottocartella la pagina viene caricata se invece la pagina è in una sottodirectory questo non avviene e viene caricata la pagina d'errore

risposto 7 anni fa
blackeyes
X 0 X

debbo poter far andare nella pagina centrale tutte le pagine richieste indipendentemente dalla loro collocazione nel sito

risposto 7 anni fa
blackeyes
X 0 X

allora gestisci le richieste in modo diverso in modo che vi sia anche il percorso per intendersi il tuo $p deve essere una stringa del tipo cartella/pagina nel caso la pagina sia in una sotto cartella altrimenti non la metti

risposto 7 anni fa
vercinstex
X 0 X

Mi intrometto solo per dire che la pagina che vuoi creare è vulnerabile a LFI (Local File Inclusion), essendo limitato a solo pagine PHP, si potrebbe, volendo, includere una pagina protetta dal .htaccess o comunque che non si vuole rendere accessibile ad un utente.

Scusate e buon proseguimento.  :bye:

risposto 7 anni fa
Hroud
X 0 X
allora gestisci le richieste in modo diverso in modo che vi sia anche il percorso per intendersi il tuo $p deve essere una stringa del tipo cartella/pagina nel caso la pagina sia in una sotto cartella altrimenti non la metti

come dovrei modificare lo script?

risposto 7 anni fa
blackeyes
X 0 X

Mi intrometto solo per dire che la pagina che vuoi creare è vulnerabile a LFI (Local File Inclusion), essendo limitato a solo pagine PHP, si potrebbe, volendo, includere una pagina protetta dal .htaccess o comunque che non si vuole rendere accessibile ad un utente.

Scusate e buon proseguimento.  :bye:

tutti i suggerimenti sono ben accetti come dovrei fare?

risposto 7 anni fa
blackeyes
X 0 X

allora tu inizialmente avevi

include($p.".php");

io ti avevo proposto

include("glossario/".$p.".php");

ovviamente era un esempio mirato per farti capire e per vedere se in quel modo funzionava

Ora per farlo funzionare al meglio dovresti fare in modo di usare

include($p.".php");

solo che nella variabile $p dovrai fare in modo che venga inserito anche il percorso della cartella la barra (/) e il nome della pagina.

il tutto puoi farlo con i link nel formato che era già stato scritto <div class="button"><a href="index.php?page=glossario/glossario"></a>

spero di essermi fatto capire :)

risposto 7 anni fa
vercinstex
X 0 X

ovviamente come ti viene suggerito questa tecnica potrebbe portare a problemi di sicurezze, quindi non si potrebbe pensare a qualche tipo di filtro o qualcosa di protezione  O0

 :bye:

risposto 7 anni fa
vercinstex
X 0 X
solo che nella variabile
$p

dovrai fare in modo che venga inserito anche il percorso della cartella la barra (/) e il nome della pagina.

il tutto puoi farlo con i link nel formato che era già stato scritto

<div class="button"><a href="index.php?page=glossario/glossario"></a>

spero di essermi fatto capire :)

si ed è proprio quello che non riesco a fare

risposto 7 anni fa
blackeyes
X 0 X

va beh cambialo e adattalo a te per esempio con link del genere

index.php?path=xxxx&page=xxxxxxx

poi prendi il tutto con 2 get e fai qualcosa del genere

if(isset($_GET['path']))
{
$p = $_GET['path'].'/';
}

poi

if(isset($_GET['page']))
{
$p .= $_GET['page'];
}
else
{
$p = "main";
}

adesso ti ho buttato giu una bozza al volo perfezionalo e vedi se va

risposto 7 anni fa
vercinstex
X 0 X

Mi intrometto solo per dire che la pagina che vuoi creare è vulnerabile a LFI (Local File Inclusion), essendo limitato a solo pagine PHP, si potrebbe, volendo, includere una pagina protetta dal .htaccess o comunque che non si vuole rendere accessibile ad un utente.

Scusate e buon proseguimento.  :bye:

tutti i suggerimenti sono ben accetti come dovrei fare?

Se devi includere file che si trovano in tutte le directory del sito non c'è un vero filtro poichè potresti intoppare il corretto funzionamento dello script. Se avessi tutti i file da includere in una sola directory potresti forzare a prenderli da lì filtrando.

Faccio un esempio per spiegarmi meglio:

<? include("header.php");
include("menu.php");
$p="main";              //pagina di default per i contenuti centrali
if(isset($_GET['page'])){      //pagina passata via parametro
    $p=$_GET['page'];
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php") || preg_match('/\.\.\//'))
        $p="error";     //pagina di errore
    }
include("inclusiondir/".$p.".php");
include("footer.php"); ?>

In questo modo includi solo i file nella cartella inclusiondir e blocchi tramite regex '../' (senza virgolette) che serve per tornare indietro con le dir.

Questo potrebbe essere un metodo, però non so se si adatta alla struttura del tuo sito.

Io per esempio, x menù del sito, per evitare di fare questo tipo di inclusioni, mi sono aiutato con il database in cui ho salvato le directory le pagine, se lo script non trova un riscontro delle pagine che si cerca ritorna errore.

PS: Non so se la regex è giusta, comunque lo scopo è quello di intercettare la stringa ../

risposto 7 anni fa
Hroud
X 0 X

va beh cambialo e adattalo a te per esempio con link del genere

index.php?path=xxxx&page=xxxxxxx

poi prendi il tutto con 2 get e fai qualcosa del genere

if(isset($_GET['path']))
{
$p = $_GET['path'].'/';
}

poi

if(isset($_GET['page']))
{
$p .= $_GET['page'];
}
else
{
$p = "main";
}

adesso ti ho buttato giu una bozza al volo perfezionalo e vedi se va

grazie ora lo provo

risposto 7 anni fa
blackeyes
X 0 X

Se devi includere file che si trovano in tutte le directory del sito non c'è un vero filtro poichè potresti intoppare il corretto funzionamento dello script. Se avessi tutti i file da includere in una sola directory potresti forzare a prenderli da lì filtrando.

Faccio un esempio per spiegarmi meglio:

<? include("header.php");
include("menu.php");
$p="main";              //pagina di default per i contenuti centrali
if(isset($_GET['page'])){      //pagina passata via parametro
    $p=$_GET['page'];
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php") || preg_match('/\.\.\//'))
        $p="error";     //pagina di errore
    }
include("inclusiondir/".$p.".php");
include("footer.php"); ?>

In questo modo includi solo i file nella cartella inclusiondir e blocchi tramite regex '../' (senza virgolette) che serve per tornare indietro con le dir.

Questo potrebbe essere un metodo, però non so se si adatta alla struttura del tuo sito.

Io per esempio, x menù del sito, per evitare di fare questo tipo di inclusioni, mi sono aiutato con il database in cui ho salvato le directory le pagine, se lo script non trova un riscontro delle pagine che si cerca ritorna errore.

PS: Non so se la regex è giusta, comunque lo scopo è quello di intercettare la stringa ../

ok provo anche questa soluzione. Anche l'idea del db mi pare ottima come l'hai implementata?

risposto 7 anni fa
blackeyes
X 0 X
<? include("header.php");
include("menu.php");
$p="main";              //pagina di default per i contenuti centrali
if(isset($_GET['page'])){      //pagina passata via parametro
    $p=$_GET['page'];
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php") || preg_match('/\.\.\//'))
        $p="error";     //pagina di errore
    }
include("glossario/".$p.".php");
include("footer.php"); ?>

cosi nella pagina main non viene visualizzata piu' nessuna pagina nemmeno quelle nella directory radice

risposto 7 anni fa
blackeyes
X 0 X

Io per il db ho creato 3 colonne, Titolo e la Directory reale con la quale veniva incluso il file. Poi puoi aggiungere pure permessi per visualizzare la pagina o quello che vuoi o altre informazioni aggiuntive a tuo piacimento.

Per quanto riguarda lo script non funzionante c'è un errore mio: preg_match('/\.\.\//') dovrebbe essere preg_match('/\.\.\//',$p)

Prova a modificare e vedere se funziona

risposto 7 anni fa
Hroud
X 0 X

anche cosi' <? include("header.php"); include("menu.php"); $p="main";              //pagina di default per i contenuti centrali if(isset($_GET['page'])){      //pagina passata via parametro     $p=$_GET['page'];     if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php") || preg_match('/\.\.\//',$p))         $p="error";     //pagina di errore     } include("glossario/".$p.".php"); include("footer.php"); ?>

nel main non si vede piu' nulla ::) ::) ::)

risposto 7 anni fa
blackeyes
X 0 X

va beh cambialo e adattalo a te per esempio con link del genere

index.php?path=xxxx&page=xxxxxxx

poi prendi il tutto con 2 get e fai qualcosa del genere

if(isset($_GET['path']))
{
$p = $_GET['path'].'/';
}

poi

if(isset($_GET['page']))
{
$p .= $_GET['page'];
}
else
{
$p = "main";
}

adesso ti ho buttato giu una bozza al volo perfezionalo e vedi se va

grazie ora lo provo

di certo sbaglio qualche cosa nel main non si vede piu' nulla...

come posso salvare il path in una variabile da usare all'occorrenza concatenandola con $p=="index" || !file_exists($p.".php")  ?

risposto 7 anni fa
blackeyes
X 0 X

un modo più sicuro per includere degli script in funzione dei parametri passati via GET è il seguente:

esempio di URL: index.php?pag=2

$pag = isset($_GET['pag']) ? (int)$_GET['pag'] : 0;

switch ($pag) {
    case 1:
        $pagina = 'percorso_1/pagina_1.php';
    case 2:
        $pagina = 'percorso_2/pagina_2.php';
   default:
        $pagina = 'percorso_3/default.php';
}

include $pagina;

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

un modo più sicuro per includere degli script in funzione dei parametri passati via GET è il seguente:

esempio di URL: index.php?pag=2

$pag = isset($_GET['pag']) ? (int)$_GET['pag'] : 0;

switch ($pag) {
    case 1:
        $pagina = 'percorso_1/pagina_1.php';
    case 2:
        $pagina = 'percorso_2/pagina_2.php';
   default:
        $pagina = 'percorso_3/default.php';
}

include $pagina;

 :bye:

anche se è molto scomodo se si devono aggiungere/eliminare/modificare pagine successivamente.

risposto 7 anni fa
Hroud
X 0 X

la sicurezza ha un costo...

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

ho modificato lo script cosi' ma non sembra andare

<?php
include("header.php");
include("menu.php");
$pag="main";              //pagina di default per i contenuti centrali
$pag = isset($_GET['pag']) ? (int)$_GET['pag'] : 0;

switch ($pag) {
    case 1:
        $pagina = 'glossario/glossario.php';
    case 2:
        $pagina = 'DBRicette/search.php';
   default:
        $pagina = 'main.php';
}

include $pagina;
include("footer.php"); 
?>

cosa sbaglio?

risposto 7 anni fa
blackeyes
X 0 X

le voci del menu' le ho modificate cosi

   <div class="button"><a href="index.php?page=1"></a></div>

       <div class="button2"><a href="index.php?page=2"></a></div>

ma senza esito......

risposto 7 anni fa
blackeyes
X 0 X

le voci del menu' le ho modificate cosi

   <div class="button"><a href="index.php?page=1"></a></div>

       <div class="button2"><a href="index.php?page=2"></a></div>

ma senza esito......

Devi modificarle così:

   <div class="button"><a href="index.php?pag=1"></a></div>
       <div class="button2"><a href="index.php?pag=2"></a></div>
risposto 7 anni fa
Mario Santagiuliana
X 0 X

ho provato ma non cambia nulla non viene visualizzato nulla nella pagina centrale del sito :o :o

risposto 7 anni fa
blackeyes
X 0 X

Ricevi qualche messaggio di errore?

Se non ricevi errori prova a mettere in testa allo script questa istruzione:

error_reporting(E_ALL);

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

nessun errore visualizza sempre e solo la pagina 3

questo e' il menu'

<div id="menusx">
       <div class="button"><a href="index.php?pag=1"></a></div>
       <div class="button2"><a href="index.php?pag=2"></a></div>
       <div class="button3"><a href="index.php?page=cucina_regionale"></a></div>
       <div class="button4"><a href="index.php?pag=3"></a></div>
       <div class="button5"><a href="index.php?page=main"></a></div>
    </div>
<div id="menudx">
      <div class="button6"><a href="index.php?page=newsletter"></a></div>
        <div class="button7"><a href="index.php?page=contatti"></a></div>
        <div class="button8"><a href="index.php?page=segnala"></a></div>
        <div class="button9"><a href="index.php?page=siti_amici"></a></div>
        <div class="button10"><a href="index.php?page=privacy"></a></div>
    </div>
<div id="content">

ovviamente ho modificato solo alcune voci per testare il funzionamento e questo è l'index

<?php
error_reporting(E_ALL);
include("header.php");
include("menu.php");
$pag="main";              //pagina di default per i contenuti centrali
$pag = isset($_GET['pag']) ? (int)$_GET['pag'] : 0;

switch ($pag) {
    case 1:
        $pagina = 'ricette.php';
    case 2:
        $pagina = 'http://mondoricette.com/wdpr';
   default:
        $pagina = 'glossario/glossario.php';
}

include $pagina;
include("footer.php"); 
?>

visualizza solo la pagina di defaault

risposto 7 anni fa
blackeyes
X 0 X

prova intanto a cancellare sta riga che non serve a niente

$pag="main";

e riprova un po'

non sia mai che gli rompe per chissà quale ragione

risposto 7 anni fa
vercinstex
X 0 X

poi credo che lo switch vada modificato da cosi

switch ($pag) {
    case 1:
        $pagina = 'ricette.php';
    case 2:
        $pagina = 'http://mondoricette.com/wdpr';
   default:
        $pagina = 'glossario/glossario.php';
}

a così perchè se no esegue tutte le assegnazioni sotto quella scelta

switch ($pag) {
    case 1:
        $pagina = 'ricette.php';
        break;
    case 2:
        $pagina = 'http://mondoricette.com/wdpr';
        break;
   default:
        $pagina = 'glossario/glossario.php';
}

spero di non aver detto cavolate ma io la sapevo così

 :bye: :bye:

risposto 7 anni fa
vercinstex
X 0 X

cosi pave vada grazie, come apro questa         $pagina = 'http://mondoricette.com/wdpr'; in una nuova pagina?

risposto 7 anni fa
blackeyes
X 0 X

ora la pagina ricette apre search.php fatto piu' o meno cosi <?php include("config.inc.php"); ?> <h4>Cerca nel nostro Database </h4><br> <form   method=post   action=DBRicette/result.php> <input   type=text   name=chiave><input   type=submit   value=Cerca> </form> <h4>Mostra le ricette per ingrediente principale</h4> <label>Digita l'ingrediente principale per il quale desideri la ricetta<br></label> <br> <form   method=post   action=DBRicette/principale.php>

come ottengo che i risultati dei forms vengano aperti nella main page del sito e non in una nuova pagina^?

risposto 7 anni fa
blackeyes
X 0 X

si, scusate, mi sono dimenticato i break  :-[

risposto 7 anni fa
Gianni Tomasicchio
X 0 X
come apro questa         $pagina = 'http://mondoricette.com/wdpr'; in una nuova pagina?

Invii al client un nuovo header. Stai attento però di non averlo già inviato prima.

ora la pagina ricette apre search.php fatto piu' o meno cosi
<?php
include("config.inc.php");
?>
<h4>Cerca nel nostro Database </h4><br>
<form   method=post   action=DBRicette/result.php>
<input   type=text   name=chiave><input   type=submit   value=Cerca>
</form>
<h4>Mostra le ricette per ingrediente principale</h4>
<label>Digita l'ingrediente principale per il quale desideri la ricetta<br></label>
<br>
<form   method=post   action=DBRicette/principale.php>

come ottengo che i risultati dei forms vengano aperti nella main page del sito e non in una nuova pagina^?

Hai messo due form...la processazione dei dati che vuoi venga fatta è in result.php o in principale.php?

Falla fare in principale.php, se il codice si trova all'interno di result.php lo includi in principale.php.

Sono riuscito a spiegarmi?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ti servirebbe una pagina del tipo

<?php
header("location: $pagina");
?>

dove la variabile pagina la ottieni come nell'altro script che hai usatofino adesso ma questo lo usi per i siti esterni

risposto 7 anni fa
vercinstex
X 0 X

Allora diciamo che mi sono espresso male io, in effetti la pagina search.php e' strutturata in questo modo:

Scusate  per la prolissita' del messaggio e per le eccessive parti di codice riportate

<?php
include("top_foot.inc.php");
include("config.inc.php");
?>
<div>
<h4>Cerca nel nostro Database</h4><br>
<form   method=post   action=DBRicette/result.php>
<input   type=text   name=chiave><input   type=submit   value=Cerca></form>
</div>

<div>
<h4>Mostra le ricette per ingrediente principale</h4>
<label>Digita l'ingrediente principale per il quale desideri la ricetta<br></label>
<br>
<form   method=post   action=DBRicette/principale.php>
<input   type=text   name=chiave><input   type=submit   value=Cerca></form>
</div>

<div>
<h4>Mostra le ricette per portata</h4>
<br>
<form   method=post   action=DBRicette/portata.php>
<select   name=chiave>
<option   value=Antipasto>Antipasto
<option   value=Bevande>Bevande
<option   value=Carne>Carne
<option   value=Contorno>Contorni
<option   value=Dessert>Dessert
<option   value=Pesce>Pesce
<option   value=Pollame>Pollame
<option   value=Primo>Primo
<option   value=Salsa>Salse
</select>
<input   type=submit   value=Cerca><br>
</form>
</div>
<?php
foot();
?>

questi tre form come potete vedere puntano a tre script diversi che non fanno altro che eseguire delle query li riporto tutti e tre per farvi capire bene:

result.php

<h1>Risultati della ricerca</h1><br>
<?php
error_reporting(E_ALL);
include("top_foot.inc.php");
include("config.inc.php");
include("connect.inc.php");
top();
$chiave = $_POST['chiave']; 
$keys   =   explode   (",",   $chiave);
$query   =   "";
reset   ($keys);
while   (list(,$parola)   =   each   ($keys))
{   $parola   =   trim($parola);
if   ($parola   !=   "")
$query   .=   "titolo   LIKE   '%$parola%'   OR   ingredienti   LIKE   '%$parola%' OR   tipopiatto   LIKE   '%$parola%' OR   ingredienteprincipale   LIKE   '%$parola%' OR   regione   LIKE   '%$parola%' OR   note   LIKE   '%$parola%'    OR   ";
}
$query   .=   "0";
$query   =   "SELECT   id,   titolo, ingredienteprincipale, regione   FROM   DBRicette   WHERE   "   .   $query;
$result   =   mysql_query($query,   $db);
//echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video
while   ($row   =   mysql_fetch_array($result))
{   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "       </a><br>";   }
foot()
?>

portata.php

<h1>Risultati della ricerca</h1><br>
<?php
error_reporting(E_ALL);
include("top_foot.inc.php");
include("config.inc.php");
include("connect.inc.php");
top();
$chiave = $_POST['chiave']; 
$keys   =   explode   (",",   $chiave);
$query   =   "";
reset   ($keys);
while   (list(,$parola)   =   each   ($keys))
{   $parola   =   trim($parola);
if   ($parola   !=   "")
$query   .=   "tipopiatto   LIKE   '%$parola%'   OR   ";
}
$query   .=   "0";
$query   =   "SELECT   id,   titolo, tipopiatto   FROM   DBRicette   WHERE   "   .   $query;
$result   =   mysql_query($query,   $db);
//echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video
while   ($row   =   mysql_fetch_array($result))
{   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "      $row[tipopiatto]</a><br>";   }
foot()
?>

principale.php

<h1>Risultati della ricerca</h1><br>
<?php
error_reporting(E_ALL);
include("top_foot.inc.php");
include("config.inc.php");
include("connect.inc.php");
top();
$chiave = $_POST['chiave']; 
$keys   =   explode   (",",   $chiave);
$query   =   "";
reset   ($keys);
while   (list(,$parola)   =   each   ($keys))
{   $parola   =   trim($parola);
if   ($parola   !=   "")
$query   .=   " ingredienteprincipale   LIKE   '%$parola%'   OR   ";
}
$query   .=   "0";
$query   =   "SELECT   id,   titolo, ingredienteprincipale   FROM   DBRicette   WHERE   "   .   $query;
$result   =   mysql_query($query,   $db);
//echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video
while   ($row   =   mysql_fetch_array($result))
{   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "      $row[ingredienteprincipale]</a><br>";   }
foot()
?>

vorrei sapere se è possibile integrare i tre script in uno solo e ovviamente fare in modo che i risultati vengano visualizzati nella parte centrale del sito.

Scusate ancora per la prolissita' del messaggio e per le eccessive parti di codice riportate

risposto 7 anni fa
blackeyes
X 0 X

Invece di creare 3 form differenti crei 3 pulsanti di invio differenti.

Fai un controllo poi sul tipo di pulsante che è stato utilizzato e di conseguenza esegui le varie operazioni, può andare?

Praticamente fai un form con 3 pulsanti diversi:

<form ecc ecc action="file.php">
    ....quello che ti interessa....

    <button type="submit" name="azione" value="cerca1">Cerca 1</button>
    <button type="submit" name="azione" value="cerca2">Cerca 2</button>
    <button type="submit" name="azione" value="cerca3">Cerca 3</button>
</form>

Poi in file.php fai il controllo:

if($_POST) {
   if($_POST['azione'] == "cerca1")
             operazione1
   elseif($_POST['azione'] == "cerca1")
             operazione2
   elseif($_POST['azione'] == "cerca1")
             operazione3
};

Ovviamente devi adattare il tutto ai tuoi script.

Ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X

grazie vedo di adeguare gli script secondo questa logica O0

risposto 7 anni fa
blackeyes
X 0 X

Invece di creare 3 form differenti crei 3 pulsanti di invio differenti.

Fai un controllo poi sul tipo di pulsante che è stato utilizzato e di conseguenza esegui le varie operazioni, può andare?

Praticamente fai un form con 3 pulsanti diversi:

<form ecc ecc action="file.php">
    ....quello che ti interessa....

    <button type="submit" name="azione" value="cerca1">Cerca 1</button>
    <button type="submit" name="azione" value="cerca2">Cerca 2</button>
    <button type="submit" name="azione" value="cerca3">Cerca 3</button>
</form>

Poi in file.php fai il controllo:

if($_POST) {
   if($_POST['azione'] == "cerca1")
             operazione1
   elseif($_POST['azione'] == "cerca1")
             operazione2
   elseif($_POST['azione'] == "cerca1")
             operazione3
};

Ovviamente devi adattare il tutto ai tuoi script.

Ciao

CI sto' lavorando ma è piu' complicato del previsto, dovrei incorporare i tre script in tre funzioni?

risposto 7 anni fa
blackeyes
X 0 X

avrei ancora bisogno di aiuto, ho adottato questi 2 script per visualizzare un glossario di termini:

glossario.php

<?php
include("config.inc.php");
include("connect.inc.php");

for ($i=65;$i<91;$i++) {
echo"<a href=\"glossario/glossario.php?lettera=".chr($i)."\">".chr($i)."</a>"." ";
}
echo "<br />";
if (!isset($_GET['lettera']))
$lettera = "a";
else
$lettera = $_GET['lettera'];

$query = mysql_query("select id,voce,descrizione from glossario where voce like '$lettera%'") or die(mysql_error());

$len = 20; // visualizza 20 caratteri e arrotonda per eccesso all'ultima parola
while($row = mysql_fetch_array($query)){
$id = $row['id'];
$voce = $row['voce'];
$descrizione = $row['descrizione'];
$voce = $row['voce'];
echo "<a href=\"glossario/dettaglio.php?id=$id\">$voce</a>";
echo "<br />";
preg_match("/^(?=(.{{$len},}?b))/s",$descrizione,$mth1);
echo $mth1[1].'...';
echo "<br />";
}
?>

e dettaglio.php

<?php
include("config.inc.php");
include("connect.inc.php");

//recuperi la pagina di provenienza;
$precedente = $_SERVER['HTTP_REFERER'];

//dalla pagina ricavi l'iniziale della parola come ultima lettera dell'url
$lettera = substr($precedente,-1,1);

$id = (int) $_GET['id'];

for ($i=65;$i<91;$i++) {
echo"<a href=\"glossario.php?lettera=".chr($i)."\">".chr($i)."</a>"." ";
}
echo "<br />";

$query = mysql_query("select voce,descrizione from glossario where id = '$id' ") or die(mysql_error());

while($row = mysql_fetch_array($query))
{
$voce = $row['voce'];
$descrizione = $row['descrizione'];
$voce = $row['voce'];
echo $voce;
echo "<br />";
echo $descrizione;
echo "<br />";
}
echo "<br />";
echo "<a href=\"glossario.php?lettera=$lettera\">Torna alla lettera $lettera </a>";
?>

lo script funziona ma nel momento in cui clicco su una lettera o su una voce del glossario il dettaglio della voce si apre in una finestra a parte e non nel main...

Qualche suggerimento??

risposto 7 anni fa
blackeyes
X 0 X

Invece che generare più confusione forse è il caso che apri una nuova discussione per il secondo problema che hai esposto.

CI sto' lavorando ma è piu' complicato del previsto, dovrei incorporare i tre script in tre funzioni?

Se vuoi, ma non mi sembra una cosa tanto complicata...cosa non hai capito?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

non ho aperto una nuova discussione perchè mi sembrava un proseguimento della stessa...

risposto 7 anni fa
blackeyes
X 0 X
Se vuoi, ma non mi sembra una cosa tanto complicata...cosa non hai capito?

come accorpare i tre script (portata,principale e result) in uno unico...

risposto 7 anni fa
blackeyes
modificato 7 anni fa
X 0 X

Il titolo di questa è "php e template"...

Stai chiedendo chiarificazioni su dell'altro codice per altre operazioni ancora...

Per il problma 1:

Semplicemente puoi copiare i pezzi dei 3 script differenti all'interno dei vari if o elseif, puoi fare anche un include della pagina...

Ti faccio solo l'esempio per il result.php dal codice di esempio che ti ho dato:

<?php
include("top_foot.inc.php");
include("config.inc.php");
include("connect.inc.php");
top();

if($_POST) {
   if($_POST['azione'] == "cerca1"){

        $chiave = $_POST['chiave']; 
        $keys   =   explode   (",",   $chiave);
        $query   =   "";
        reset   ($keys);
        while   (list(,$parola)   =   each   ($keys)) {
               $parola   =   trim($parola);
                if   ($parola   !=   "")
                $query   .=   "titolo   LIKE   '%$parola%'   OR   ingredienti   LIKE   '%$parola%' OR   tipopiatto   LIKE   '%$parola%' OR   ingredienteprincipale   LIKE   '%$parola%' OR   regione   LIKE   '%$parola%' OR   note   LIKE   '%$parola%'    OR   ";
        }
        $query   .=   "0";
        $query   =   "SELECT   id,   titolo, ingredienteprincipale, regione   FROM   DBRicette   WHERE   "   .   $query;
        $result   =   mysql_query($query,   $db);
        //echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video
        while   ($row   =   mysql_fetch_array($result))
                {   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "       </a><br>";   }
   }
   elseif($_POST['azione'] == "cerca2")
             operazione2
   elseif($_POST['azione'] == "cerca3")
             operazione3
};
foot()

Ti sembra più chiaro così?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

si decisamente infatti da quello che vedo io aveevo sbagliato ad inserire le parti di codice...

risposto 7 anni fa
blackeyes
X 0 X

Come al solito, vi prego di rimanere in argomento  :police:

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Dici che ho sbagliato a suggerire l'apertura di una nuova discussione?  :o

risposto 7 anni fa
Mario Santagiuliana
X 0 X
Dici che ho sbagliato a suggerire l'apertura di una nuova discussione?  :o

al contrario, volevo dare "ufficialità" al suggerimento

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

sorry credevo di fare bene faro' piu' attenzione la prossima volta

risposto 7 anni fa
blackeyes
X 0 X

ho accorpato i tre files in uno solo result.php <h1>Risultati della ricerca</h1><br> <?php error_reporting(E_ALL); include("top_foot.inc.php"); include("config.inc.php"); include("connect.inc.php"); top(); if($_POST) {    if($_POST['azione'] == "cerca"){ $chiave = $_POST['chiave']; $keys   =   explode   (",",   $chiave); $query   =   ""; reset   ($keys); while   (list(,$parola)   =   each   ($keys)) {   $parola   =   trim($parola); if   ($parola   !=   "") $query   .=   "titolo   LIKE   '%$parola%'   OR   ingredienti   LIKE   '%$parola%' OR   tipopiatto   LIKE   '%$parola%' OR   ingredienteprincipale   LIKE   '%$parola%' OR   regione   LIKE   '%$parola%' OR   note   LIKE   '%$parola%'    OR   "; } $query   .=   "0"; $query   =   "SELECT   id,   titolo, ingredienteprincipale, regione   FROM   DBRicette   WHERE   "   .   $query; $result   =   mysql_query($query,   $db); //echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video while   ($row   =   mysql_fetch_array($result)) {   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "       </a><br>";   } }    elseif($_POST['azione'] == "principale"){ $chiave = $_POST['chiave']; $keys   =   explode   (",",   $chiave); $query   =   ""; reset   ($keys); while   (list(,$parola)   =   each   ($keys)) {   $parola   =   trim($parola); if   ($parola   !=   "") $query   .=   " ingredienteprincipale   LIKE   '%$parola%'   OR   "; } $query   .=   "0"; $query   =   "SELECT   id,   titolo, ingredienteprincipale   FROM   DBRicette   WHERE   "   .   $query; $result   =   mysql_query($query,   $db); //echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video while   ($row   =   mysql_fetch_array($result)) {   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "      $row[ingredienteprincipale]</a><br>";   } }    elseif($_POST['azione'] == "portata"){ $chiave = $_POST['chiave']; $keys   =   explode   (",",   $chiave); $query   =   ""; reset   ($keys); while   (list(,$parola)   =   each   ($keys)) {   $parola   =   trim($parola); if   ($parola   !=   "") $query   .=   "tipopiatto   LIKE   '%$parola%'   OR   "; } $query   .=   "0"; $query   =   "SELECT   id,   titolo, tipopiatto   FROM   DBRicette   WHERE   "   .   $query; $result   =   mysql_query($query,   $db); //echo $query;  dopo l'esecuzione di una query ne mostra il risultato a video while   ($row   =   mysql_fetch_array($result)) {   echo   "<a   href=\"view.php?id=$row[id]\">"     .   "      $row[titolo]" . "      $row[tipopiatto]</a><br>";   }

}   }; foot() ?> ed ho adattato il file search.php con un unico campo di input e tre bottoni e funziona tutto. Riscontro anche qui il problema che i risultati delle query vengono visualizzati in una nuova scheda e non nel main del sito. Come posso ovviare?

risposto 7 anni fa
blackeyes
X 0 X
nuova scheda e non nel main del sito. Come posso ovviare?

Ma per nuova scheda intendi nuova scheda/finestra del browser o nuova scheda del sito web?

Se è quella del sito web la soluzione è come quella che già ti ho suggerito qui:

http://www.phpnews.it/forum/programmazione-php/glossario-in-php/msg24286/#msg24286

risposto 7 anni fa
Mario Santagiuliana
X 0 X

si apre in una nuova scheda del broswer

puoi verificarlo qui

http://www.mondoricette.com/1/index.php?pag=1

per inciso grazie per la pazienza che hai O0

risposto 7 anni fa
blackeyes
modificato 7 anni fa
X 0 X

Non si apre una nuova scheda del browser!!!

Si apre una nuova scheda del sito  ;D

Proprio non riusciamo a comprenderci eh?  :2funny: :2funny:

La soluzione è quella che ti ho suggerito comunque.

I link che generi nell'elenco alfabetico sono del tutto scorretti.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

hai ragione Si apre una nuova scheda del sito 

risposto 7 anni fa
blackeyes
X 0 X

ti servirebbe una pagina del tipo

<?php
header("location: $pagina");
?>

dove la variabile pagina la ottieni come nell'altro script che hai usatofino adesso ma questo lo usi per i siti esterni

ottimo ho risolto

risposto 7 anni fa
blackeyes
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda