glossario in php

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??

inviato 7 anni fa
blackeyes
X 0 X
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...

Intendi dire che ti si apre una finestra a parte ogni volta?

Puoi far vedere il pezzo di codice dove inserisci queste due pagine?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

allora è tutto legato al template del sito nel senso che lo script glossario si apre quando premo il pulsante relativo e viene aperto correttamente nella parte centrale del sito, al bottone è associato (       <div class="button4"><a href="index.php?pag=4"></a></div> ) che fa riferimento allo script contenuto nell'index.php

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

switch ($pag) {
    case 1:
        $pagina = 'DBRicette/search.php';
        break;
    case 2:
        $pagina = 'http://mondoricette.com/wdpr';
        break;
    case 3:
        $pagina = 'cucina_regionale.php';
        break;
    case 4:
        $pagina = 'glossario/glossario.php';
        break;

quando clicco su una lettera o su una descrizione e quindi parte lo script dettaglio viene aperta una nuova pagina....

risposto 7 anni fa
blackeyes
X 0 X

Quando clicchi sulla lettera non fai aggiungere anche la variabile pag al get.

Se tutto passa per la pagina index allora devi inserire anche la pag nell'array get no?

Se però ti si apre ogni volta una finestra(o scheda) nuova nel browser allora sono sbagliati gli attributi dei link.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

prova a postare uno spezzone del codice html generato dal server di uno dei link

 :bye:

risposto 7 anni fa
Sifro
X 0 X

Quando clicchi sulla lettera non fai aggiungere anche la variabile pag al get.

Se tutto passa per la pagina index allora devi inserire anche la pag nell'array get no?

Se però ti si apre ogni volta una finestra(o scheda) nuova nel browser allora sono sbagliati gli attributi dei link.

la pagina glossario si apre correttamente nella parte centrale come richiama lo script dettaglio apre sempre una nuova scheda

dovrei modificare questo echo"<a href=\"glossario.php?lettera=".chr($i)."\">".chr($i)."</a>"." "; cosi ?? echo"<a href=\"glossario.php?lettera=".chr($i)."\">".chr($i)."TARGET="_self"</a>"." ";

risposto 7 anni fa
blackeyes
X 0 X

prova a postare uno spezzone del codice html generato dal server di uno dei link

 :bye:

intendi questo??

http://www.mondoricette.com/1/glossario/dettaglio.php?id=1

risposto 7 anni fa
blackeyes
X 0 X

Eh ma allora sbagli tutto, la pagina "principale" è dettaglio.php giusto?

In questa pagina poi si modifica il glossario, te ad ogni richiesta richiami la pagina glossario.php che dovrebbe contenere solamente il codice per visualizzare il glossario appunto.

I link devi modificarli in modo che richiami sempre la stessa pagina e aggiunga le varie variabili nell'array GET.

Per cui non così come hai detto:

echo"<a href=\"glossario.php?lettera=".chr($i)."\">".chr($i)."</a>"." ";

cosi ??

echo"<a href=\"glossario.php?lettera=".chr($i)."\">".chr($i)."TARGET="_self"</a>"." ";

Non capisco perchè vuoi aggiungere questa parte poi "TARGET="_self"...che senso ha?

Ma così:

echo"<a href=\"dettaglio.php?id=1&lettera=".chr($i)."\">".chr($i)."</a>"." ";

Scusami ma mi sembra hai poco chiaro come funziona il php e l'html o sbaglio?

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

no la pagina principale e' glossario.php che si occupa di creare l'elenco delle lettere e mostra un elenco di termini che cominciano per A cliccando sulle varie lettere vedo gli altri termini.

La prima volta che lo script viene visualizzato, dopo aver premuto il tasto corrispondente nel menu' del sito, per intenderci, si vedono tutte le lettere dell'alfabeto e subito sotto, l'unico termine presente nel db la cui iniziale è A.

A questo punto sia che io clicchi sulle altre lettere sia che clicchi su una parola specifica i risultato è sempre che viene aperta una nuova scheda.

Cliccando su una parola specifica viene eseguito lo script dettaglio.php che mostra il risultato della query.

Per quanto riguarda il php le mie conoscenze attuali si limitano ad una conoscenza base e al cercare di capire come vengono fatti gli script che mi possono essere utili e provare a riadattarli. Ogni volta che trovo costrutti che non capisco cerco sul manuale per capire cosa significhino.

risposto 7 anni fa
blackeyes
X 0 X

gli errori che compio sono molti ma cerco cmq di migliorarmi

risposto 7 anni fa
blackeyes
X 0 X

No allora non ci siamo capiti, mi sto riferendo al link di esempio che ci hai dato prima.

La pagina principale non può essere glossario.php ma dettaglio.php la quale a seconda dell'id (che gli passi tramite un link nel menu) che dai fa vedere il glossario o altro giusto?

Ora tu non devi chiamare direttamente la pagina glossario.php ma la pagina dettaglio.php la quale includerà glossario.php e gli passerà i parametri di navigazione nel glossario.

A questo punto sia che io clicchi sulle altre lettere sia che clicchi su una parola specifica i risultato è sempre che viene aperta una nuova scheda.

Cliccando su una parola specifica viene eseguito lo script dettaglio.php che mostra il risultato della query.

A me non apre nessuna scheda/finestra nuova se provo a cliccare sulla "C" dell'elenco delle lettere, semplicemente hai fatto un link che richiama la pagina glossario.php. Ovviamente non è richiamata dettaglio.php ma glossario.php.

Sono riuscito a farmi capire?

La soluzione è quella che ti ho proposto prima.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

l'unica lettera funzionante è la a con un solo termine il db è  praticamente vuoto perche' volevo prima vedere se funzionava

facendo la modifica che dici non và di certo sbaglio qualche cosa

<?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"<a href=\"glossario/dettaglio.php?id=1&lettera=".chr($i)."\">".chr($i)."</a>"." ";
echo "<br />";
preg_match("/^(?=(.{{$len},}?b))/s",$descrizione,$mth1);
echo $mth1[1].'...';
echo "<br />";
}
?>
risposto 7 anni fa
blackeyes
X 0 X

Allora i link che generi nell'elenco alfabetico sono del tutto scorretti (controlla, se clicchi su una qualsiasi lettera oltretutto aggiunge sempre "glossario" all'url iniziale).

Modifica questo:

echo"<a href=\"glossario/glossario.php?lettera=".chr($i)."\">".chr($i)."</a>"." ";

in

echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." ";

Avrai l'elenco corretto senza che si apra una "nuova scheda" del sito web, non del browser web.

Hai capito ora?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

per capire ho capito ma non và...

risposto 7 anni fa
blackeyes
X 0 X

In che senso non va?

Se io facevo le prove con il link che ci avevi fornito prima funzionava tutto correttamente...

risposto 7 anni fa
Mario Santagiuliana
X 0 X

http://www.mondoricette.com/1/

se vai qui e clicchi sul bottone glossario puoi vederlo

risposto 7 anni fa
blackeyes
X 0 X

Non hai ancora apportato la modifica che ti avevo suggerito!!!Allora i link che generi nell'elenco alfabetico sono del tutto scorretti (controlla, se clicchi su una qualsiasi lettera oltretutto aggiunge sempre "glossario" all'url iniziale).

Modifica questo:

echo"<a href=\"glossario/glossario.php?lettera=".chr($i)."\">".chr($i)."</a>"." ";

in

echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." ";

Avrai l'elenco corretto senza che si apra una "nuova scheda" del sito web, non del browser web.

Hai capito ora?

risposto 7 anni fa
Mario Santagiuliana
X 0 X
<?php
include("config.inc.php");
include("connect.inc.php");

for ($i=65;$i<91;$i++) {
echo"<a href=\"index.php?pag=4&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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." ";
echo "<br />";
preg_match("/^(?=(.{{$len},}?b))/s",$descrizione,$mth1);
echo $mth1[1].'...';
echo "<br />";
}
?>

ecco gli script

<?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=\"index.php?pag=4&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??pag=4&lettera=$lettera\">Torna alla lettera $lettera </a>";
?>

adesso le pagine si aprono al loro posto ma il termine nella prima pagina non è piu' visualizzato al suo posto c'e una [

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

Guarda il codice html che generi.

E' completamente scorretto, hai come più di due pagine html insieme, cioè due tag html, più elementi title e head.

Sistema quelli.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ok. ho messo il cogice in piu pagine non pensando che venendo incluse lo generano doppio...

Questo puo' incidere sul funzionamento del db?

risposto 7 anni fa
blackeyes
X 0 X
Questo puo' incidere sul funzionamento del db?

No, ma fornisci una visualizzazione scorretta della pagina html.

Sempre nel link che ci hai fornito non vedo alcun cambiamento...

risposto 7 anni fa
Mario Santagiuliana
X 0 X

sto' correggendo l'html, i file del glossario on line sono quelli che ho postato...

risposto 7 anni fa
blackeyes
X 0 X

ho corretto l'html se clicco sulla [ sotto la a otterngo http://www.mondoricette.com/1/index.php?pag=4&lettera=[

risposto 7 anni fa
blackeyes
X 0 X

Ok, per rendere più leggibile il codice html fa il ritorno a capo, vedi questo:

echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." ";

Fallo diventare così:

echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n";

(Nota che ho aggiunto "\n" finale).

Ora devi solamente correggere la visualizzazione dei record per le varie lettere. Il resto mi sembra funzioni correttamente.

ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ho fatto la modifica, quello che non capisco è perchè e come la modifica della query string ha influito sulla visualizzazione dei record del db... ho aggiunto un paio di voci in A e B per farti vedere

risposto 7 anni fa
blackeyes
X 0 X

sembra non si porti dietro la variabile lettera... Sbaglio?

risposto 7 anni fa
blackeyes
X 0 X
sembra non si porti dietro la variabile lettera... Sbaglio?

No, la variabile forse la prende...

Scusami sono un po' assonnato in questo istante.

Ti dispiace riportare il pezzo di codice che fa la query e visualizza il risultato?

risposto 7 anni fa
Mario Santagiuliana
X 0 X
$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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n ";
echo "<br />";
preg_match("/^(?=(.{{$len},}?b))/s",$descrizione,$mth1);
echo $mth1[1].'...';
echo "<br />";
risposto 7 anni fa
blackeyes
X 0 X
echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n ";

Intanto questa riga è scorretta, come fa a funzionare se non è definita $i? Non si trova all'interno di un ciclo for per far vedere l'elenco!!!

Modificala così:

echo"<a href=\"index.php?pag=4&lettera=".$lettera."\">".$lettera."</a>"." \n ";

Per la descrizione, invece di usare le espressioni regolari...che io ancora non riesco ad impararle. Perchè non usi semplicemente substr?

http://us2.php.net/manual/en/function.substr.php

Tu devi solamente tagliare a 20 caratteri giusto, ti è necessario fare anche all'arrotondamento per eccesso? Perchè in tal caso qualcuno dovrebbe confermare la correttezza della tua espressione...io come detto non riesco ad impararle...

Comunque momentaneamente (in attesa della correzione dell'espressione regolare) potresti fare diventare questo:

echo "<br />";

preg_match("/^(?=(.{{$len},}?b))/s",$descrizione,$mth1);

echo $mth1[1].'...';

echo "<br />";

Così:

echo "<br />\n";
echo substr($descrizione, 0, $len)."...\n<br />\n";

Che dici?

Ciao

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Gli script completi

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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"."\n ";
}
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?pag=4&lettera=$lettera\">Torna alla lettera $lettera </a>";
?>

glossario.php

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

for ($i=65;$i<91;$i++) {
echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n";
}
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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n ";
echo "<br />\n";
echo substr($descrizione, 0, $len)."...\n<br />\n";
}
?>

prima avevo inserito solo la parte inerente la query i cicli for ci sono ma cmq non va' di default si posiziona sulla lettera A le descrizioni dei termini si vedono quindi il subsrt è ok   ma al posto del termine si vede la [ se clicco su un termine vedo solo l'elenco di lettere e nulla piu' il link che ricevo è questo http://www.mondoricette.com/1/index.php?pag=4&lettera=[ secondo me dovrebbe far riverimento a dettaglio.php e non a index.php ma ho fatto qualche prova e non và

risposto 7 anni fa
blackeyes
X 0 X

Non ci siamo capiti.

Tu devi far passare tutto per index.php se vuoi avere sempre lo stesso layout!!!

Inoltre non hai ancora corretto questa parte qui:

$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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n ";

echo "<br />\n";

echo substr($descrizione, 0, $len)."...\n<br />\n";

}

Il $i dove è definito?

Devi farlo diventare così:

echo"<a href=\"index.php?pag=4&lettera=".$lettera."\">".$lettera."</a>"." \n ";

Per forza ritorna chr($i) come risultato "[" non hai definito la variabile $i!!!

Ma poi non devi far vedere la voce invece che la lettera?

Per cui in realtà questa riga che ti ho evidenziato dovrebbe essere così:

echo"<a href=\"index.php?pag=numero_che_richiama_dettaglio.php&id=".$id."\">".$voce."</a>"." \n ";

Ci sei? Sono riuscito a spiegarti?

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

come torno provo qu trovare internet e' dura....

risposto 7 anni fa
blackeyes
X 0 X

 O0

Facci sapere come va  :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ho fatto le modifiche adesso le voci vengono visualizzate correttamente ma quando clicco su dettaglio non viene richiamato lo script dettaglio....

non si potrebbe  pensare di riunire tutto in un unico script per semplificare le cose?

risposto 7 anni fa
blackeyes
X 0 X

ho fatto le modifiche adesso le voci vengono visualizzate correttamente ma quando clicco su dettaglio non viene richiamato lo script dettaglio....

non si potrebbe  pensare di riunire tutto in un unico script per semplificare le cose?

Certo perchè no?

glossario.php che viene richiamata dalla pagina index.php?pag=4 puoi inserire un controllo della variabile id, cioè fai un controllo sia per la visualizzazione dell'elenco delle voci del glossario(tu praticamente richiami index.php?pag=4&lettera=A) con le singole voci invece fai: index.php?pag=4&id=5 .

Per cui in glossario.php fai un controllo e vedi se è stato definito lettera e/o id, nel caso ci sia una variabile id nel GET fa a meno di stampare tutte le voci e stampa solo quella con id indicato nel GET.

Non è difficile no?  O0

risposto 7 anni fa
Mario Santagiuliana
X 0 X

in teoria no ma in pratica...

risposto 7 anni fa
blackeyes
X 0 X

E in pratica basta tradurre la logica in sintassi php  ;) ;)

Prova a buttare giù qualcosa che poi la vediamo assieme ok?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

ok

risposto 7 anni fa
blackeyes
X 0 X

cosi potrebbe andare?

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

for ($i=65;$i<91;$i++) {
echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n";
}
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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n ";
echo"<a href=\"index.php?pag=4&id=".$id."\">".$voce."</a>"." \n ";

echo "<br />\n";
echo substr($descrizione, 0, $len)."...\n<br />\n";
}
if ($lettera!=null and $id!=null ){
$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"<a href=\"index.php?pag=4&id=".$id."\">".$descrizione."</a>"." \n ";
}
echo "<br />";

?>

sembra non funzionare...

risposto 7 anni fa
blackeyes
X 0 X

Devi mettere delle condizioni più a monte...inoltre hai sbagliato a non chiudere un if, ed impara a fare l'indentazione del codice per renderlo più leggibile ;)

Prova così:

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

for ($i=65;$i<91;$i++) {
   echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n";
}
echo "<br />";
if (!isset($_GET['id'])) {
   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=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n ";
      echo"<a href=\"index.php?pag=4&id=".$id."\">".$voce."</a>"." \n ";

      echo "<br />\n";
      echo substr($descrizione, 0, $len)."...\n<br />\n";
   }
} else {
   $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"<a href=\"index.php?pag=4&id=".$id."\">".$descrizione."</a>"." \n ";
      }
}
echo "<br />";

?>
risposto 7 anni fa
Mario Santagiuliana
X 0 X

vero decisamente piu' leggibile ora la prima parte del codice va ma quando clicco su un termine per vederne il dettaglio rimane visibile solo la sequenza delle lettere...

risposto 7 anni fa
blackeyes
X 0 X

Bisogna lavorare su questa parte qui, ci sono alcune cose che mancano, tipo la definizione di $id:

} else {
   $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"<a href=\"index.php?pag=4&id=".$id."\">".$descrizione."</a>"." \n ";
      }
}

Prova così:

} else {
   $id = int $_GET['id'];
   $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'];

         echo $voce;
         echo "<br />";
         echo $descrizione;
         echo "<br />";
      }
}

Controlla la sintassi che sia corretta.

P.S. ovviamente dovrai implementare maggiori controlli sulle variabili che ti vengono passate.

Ciao

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X
<?php
include("config.inc.php");
include("connect.inc.php");

for ($i=65;$i<91;$i++) {
   echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n";
}
echo "<br />";
if (!isset($_GET['id'])) {
   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=\"index.php?pag=4&id=".$id."\">".$voce."</a>"." \n ";

      echo "<br />\n";
      echo substr($descrizione, 0, $len)."...\n<br />\n";
   }
} else {
   $id = int $_GET['id'];
   $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'];
         echo $voce;
         echo "<br />";
         echo $descrizione;
         echo "<br />";
      }
}
echo "<br />";

?>

cosi non visualizza piu' nulla.... strano se non ho interpretato male non hai fatto altro che passargli di nuovo l'id...

risposto 7 anni fa
blackeyes
X 0 X

Ho sbagliato qui:

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

metti così:

   $id = int($_GET['id']);
risposto 7 anni fa
Mario Santagiuliana
X 0 X

purtroppo quando clicco su un termine per vederne il dettaglio continua a  rimanere visibile solo la sequenza delle lettere...

risposto 7 anni fa
blackeyes
X 0 X

Prova direttamente così:

$id = $_GET['id']
risposto 7 anni fa
Mario Santagiuliana
X 0 X

grazie! adesso va' mi spiegheresti brevemente la differenza rispetto a prima?

risposto 7 anni fa
blackeyes
X 0 X

un'altra cosa, a titolo di curiosita' in linea di massima è preferibile creare uno script unico come abbiamo fatto noi o mantenerne 2 separati come era in precedenza?

risposto 7 anni fa
blackeyes
X 0 X
un'altra cosa, a titolo di curiosita' in linea di massima è preferibile creare uno script unico come abbiamo fatto noi o mantenerne 2 separati come era in precedenza?

A discrezione del programmatore  :)

Rispetto a prima...volevo mettere un controllo in cui trasformi la variabile $_GET['id'] in una variabile intera con int...devo aver sbagliato sintassi...deve essere così:

$id = (int)$_GET['id'];
risposto 7 anni fa
Mario Santagiuliana
X 0 X

ah ok grazie per la precisazione

risposto 7 anni fa
blackeyes
X 0 X

variabile intera con int...devo aver sbagliato sintassi...deve essere così:

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

provato in effetti è cosi

risposto 7 anni fa
blackeyes
X 0 X

riprendo questo post perche provando a paginarne i risultati mi trovo davanti ad un problemino

<div id="glossario">
<?php
include ("config.inc.php");
include ("connect.inc.php");
// imposto il limit per la query
if (isset ($_GET['pagina1']))
  $pg = $_GET['pagina1'];
else
  $pg = 1;
$step = 5;
if ($pg > 0)
  $start = ($pg - 1) * $step;
else
  $start = 0;
for ($i = 65; $i < 91; $i++) {
  echo "<a href=\"index.php?pag=4&lettera=" . chr($i) . "\">" . chr($i) . "</a>" . " \n";
}
echo "<br />";
echo "<br />";
if (!isset ($_GET['id'])) {
  if (!isset ($_GET['lettera']))
    $lettera = "a";
  else
    $lettera = $_GET['lettera'];
  $query = mysql_query("select id,voce,descrizione from glossario where voce like '$lettera%' LIMIT $start , $step ") 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=\"index.php?pag=4&id=" . $id . "\">" . $voce . "</a>" . " \n ";
    echo "<br />\n";
    echo substr($descrizione, 0, $len) . "...\n<br />\n";
  }
// ricavo il numero totale di record
  $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%' LIMIT $start , $step ";
  $result1 = mysql_query($query1);
//echo mysql_result($result1, 0);
// record complessivi
  $tot_righe = mysql_result($result1, 0);
// totale pagine
  $tot_pagine = ceil($tot_righe / $step);
//inizio la visualizzazione
  if ($pg == 0) {
    $precedente = "";
  }
  else {
    $previous_page = ($pg - 1);
    $precedente = "<a href='index.php?pag=4&pagina1=$previous_page' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
  }
  if ($pg == $tot_pagine - 1) {
    $successiva = "";
  }
  else {
    $next_page = ($pg + 1);
    $successiva = "<a href='index.php?pag=4&pagina1=$next_page' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
  }
  $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            " . $precedente . "
                        </td>
                        <td align='center'>
                            " . $successiva . "
                        </td>
                    </tr>
                </table>";
  echo "<CENTER>" . $paginazione . "</CENTER>";
  echo "<CENTER>" . $pg . "</CENTER>";
}
else {
// $id = $_GET['id']; funziona lo stesso la riga sotto fornisce un valore intero tutto qui
  $id = (int) $_GET['id'];
  $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'];
    echo $voce;
    echo "<br />";
    echo $descrizione;
    echo "<br />";
  }
}
echo "<br />";
?>
</div>

Questo è lo script sembra funzionare ma iun effetti quando mostra i record relativi allla lettera A la paginazione è corretta pero' quando arriva alla terza pagina, l'ultima per la lettera A mi propone ancora la scritta successiva e cliccandovi sopra passa alla 5, 6, 7, e cosi via anche se queste risultano vuote...

Passando alla lettera B dove per ora sono presenti 2 record quando clicco su successiva, che per inciso non dovrebbe esserci, mi visualizza i record relativi alla lettera A

come mai?

Per vedere il funzionamento http://test.mondoricette.com/ e cliccare su glossario

risposto 6 anni fa
blackeyes
X 0 X

Sbagli a creare a passare i parametri tramite GET nei link che crei in successiva e precedente.

Perdi per strada variabili indispensabili allo script per capire cosa visualizzare (ad esempio "lettera" infatti con A funziona perchè può andare senza, con B invece non funziona perchè al link successiva non esiste più il parametro "lettera=B", stessa cosa il resto).

risposto 6 anni fa
Mario Santagiuliana
X 0 X

giusto, ho fatto cosi

$lettera = $_GET['lettera'];

             if($pg == 0)
             {
             $precedente = "";
             }
             else
             {
             $previous_page = ($pg - 1);
             $precedente = "<a href='index.php?pag=4&pagina1=$previous_page&lettera=$lettera' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
             }

             if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }
             else
             {
             $next_page = ($pg + 1);
             $successiva = "<a href='index.php?pag=4&pagina1=$next_page&lettera=$lettera' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
             }

            $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            ".$precedente."
                        </td>
                        <td align='center'>
                            ".$successiva."
                        </td>
                    </tr>
                </table>";

e adesso in parte ho risolto ossia viene passata la lettera corretta l'unica cosa e' che non viene conteggiato correttamente il numero delle pagine, per la lettera a per ora vi sono 4 pagine nonostante cio' alla quarta pagina continua ad essere visualizzato "successiva" e cliccandovi si passa alla pagina 5,6,7 ecc anche se sono vuote....

Sembra come se questa parte di codice

 // ricavo il numero totale di record

      $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%' ";

      $result1 = mysql_query($query1);

      echo mysql_result($result1, 0);

    // record complessivi

  $tot_righe = mysql_result($result1,0);

// totale pagine

      $tot_pagine = ceil($tot_righe / $step);

non venga presa in considerazione

risposto 6 anni fa
blackeyes
modificato 6 anni fa
X 0 X

Sbagli questo:

// ricavo il numero totale di record

  $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%' LIMIT $start , $step ";

Devi basarti sulla totalità delle voci, non sul range che ricavi, per cui:

// ricavo il numero totale di record
  $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%'";
  $result1 = mysql_query($query1);
//echo mysql_result($result1, 0);
// record complessivi
  $tot_righe = mysql_result($result1, 0);
// totale pagine
  $tot_pagine = ceil($tot_righe / $step);
//inizio la visualizzazione
risposto 6 anni fa
Mario Santagiuliana
modificato 6 anni fa
X 0 X

Sbagli questo:

// ricavo il numero totale di record

  $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%' LIMIT $start , $step ";

Devi basarti sulla totalità delle voci, non sul range che ricavi, per cui:

// ricavo il numero totale di record
  $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%'";
  $result1 = mysql_query($query1);
//echo mysql_result($result1, 0);
// record complessivi
  $tot_righe = mysql_result($result1, 0);
// totale pagine
  $tot_pagine = ceil($tot_righe / $step);
//inizio la visualizzazione

si di quello mi ero accorto, l'errore era qui $query1 = "SELECT COUNT(*) FROM from glossario where voce like '$lettera%'"; avevo ripetuto 2 volte form.

Ora pero' si perde di nuovo per strada il valore di $lettera

la prima volta che clicco su glossario il link e' corretto

http://test.mondoricette.com/index.php?pag=4 infatti il vlore di $lettera è definito nello script, come clicco su successiva il link http://test.mondoricette.com/index.php?pag=4&pagina1=1&lettera=

perche'??

risposto 6 anni fa
blackeyes
X 0 X

e rettifico cosi

$successiva = "<a href='index.php?pag=4&pagina1=$next_page&lettera=$lettera=a' title='Vai alla pagina

             successiva' class='bottonelinc'>Sucessiva</a>";

ottengo questo link

http://test.mondoricette.com/index.php?pag=4&pagina1=2&lettera==a

e ovviamente non và

risposto 6 anni fa
blackeyes
X 0 X

Non stai ragionando...

Allora se tu arrivi a "pag=4" hai il glossario che parte visualizza dalla lettera a, ora se vuoi andare su successiva la variabile "$lettera" non è inizializzata in quanto non esiste in $_GET['lettera'].

Devi mettere un if tipo questo:

if(!$_GET['lettera'] or $_GET['lettera']=="")
   $lettera=A;
risposto 6 anni fa
Mario Santagiuliana
X 0 X

Ma non lo faccio gia' qui??

if (!isset($_GET['id'])) {
   if (!isset($_GET['lettera']))
      $lettera = "a";
   else
      $lettera = $_GET['lettera'];

all'inizio dello script...

risposto 6 anni fa
blackeyes
modificato 6 anni fa
X 0 X
<div id="glossario">
<?php
include("config.inc.php");
include("connect.inc.php");
// imposto il limit per la query
if(isset($_GET['pagina1']))
   $pg = $_GET['pagina1'];
else
   $pg = 1;

$step = 5;
if($pg > 0)
   $start = ($pg - 1) * $step;
else
   $start = 0;


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

   $query = mysql_query("select id,voce,descrizione from glossario where voce like '$lettera%' LIMIT $start , $step ") 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=\"index.php?pag=4&id=".$id."\">".$voce."</a>"." \n ";

      echo "<br />\n";
      echo substr($descrizione, 0, $len)."...\n<br />\n";
   }

   // ricavo il numero totale di record
      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '$lettera%' ";
      $result1 = mysql_query($query1);

//      echo mysql_result($result1, 0);
    // record complessivi
  $tot_righe = mysql_result($result1,0);
// totale pagine
      $tot_pagine = ceil($tot_righe / $step);
    //inizio la visualizzazione

    if(!$_GET['lettera'] or $_GET['lettera']=="")
    $lettera=A;

             if($pg == 0)
             {
             $precedente = "";
             }
             else
             {
             $previous_page = ($pg - 1);
             $precedente = "<a href='index.php?pag=4&pagina1=$previous_page&lettera=$lettera' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
             }

             if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }
             else
             {
             $next_page = ($pg + 1);
             $successiva = "<a href='index.php?pag=4&pagina1=$next_page&lettera=$lettera' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
             }

            $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            ".$precedente."
                        </td>
                        <td align='center'>
                            ".$successiva."
                        </td>
                    </tr>
                </table>";


              echo "<CENTER>" . $paginazione . "</CENTER>";

echo "<CENTER>" . $pg . "</CENTER>";

} else {
  // $id = $_GET['id']; funziona lo stesso la riga sotto fornisce un valore intero tutto qui
   $id = (int)$_GET['id'];
   $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'];
         echo $voce;
         echo "<br />";
         echo $descrizione;
         echo "<br />";
      }
}
echo "<br />";
?> 
</div>

modificando lo script cosi sulla lettera A invece di 15 record ne mostra solo 10 :o :o :o e se clicco su b ne mostra 2 ma lascia attivo il link successiva cosa che non dovrebbe. Di certo mi sfugge qualche cosa...

risposto 6 anni fa
blackeyes
X 0 X

Non fare troppe modifiche che causano problemi.

   if (!isset($_GET['lettera']))

Questo fa un controllo se "esiste" e non ha valore nullo o falso, nel tuo caso esiste (gli passi il link come "http://quello_che_è.php?lettera=") ma non indichi il valore che deve assumere, cioè rimane vuoto (non nullo).

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

allora il codice l'ho modificato cosi

<div id="glossario">
<?php
include("config.inc.php");
include("connect.inc.php");
// imposto il limit per la query
if(isset($_GET['pagina1']))
   $pg = $_GET['pagina1'];
else
   $pg = 1;

$step = 5;
if($pg > 0)
   $start = ($pg - 1) * $step;
else
   $start = 0;


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

   $query = mysql_query("select id,voce,descrizione from glossario where voce like '$lettera%' LIMIT $start , $step ") 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=\"index.php?pag=4&id=".$id."\">".$voce."</a>"." \n ";

      echo "<br />\n";
      echo substr($descrizione, 0, $len)."...\n<br />\n";
   }

   // ricavo il numero totale di record
      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";
      $result1 = mysql_query($query1);
      echo $query1;
echo mysql_result($result1, 0);
    // record complessivi
  $tot_righe = mysql_result($result1,0);
// totale pagine
      $tot_pagine = ceil($tot_righe / $step);
    //inizio la visualizzazione

    if(!$_GET['lettera'] or $_GET['lettera']=="")
    $lettera=A;

             if($pg == 0)
             {
             $precedente = "";
             }
             else
             {
             $previous_page = ($pg - 1);
             $precedente = "<a href='index.php?pag=4&pagina1=$previous_page&lettera=$lettera' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
             }

             if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }
             else
             {
             $next_page = ($pg + 1);
             $successiva = "<a href='index.php?pag=4&pagina1=$next_page&lettera=$lettera' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
             }

            $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            ".$precedente."
                        </td>
                        <td align='center'>
                            ".$successiva."
                        </td>
                    </tr>
                </table>";


              echo "<CENTER>" . $paginazione . "</CENTER>";

echo "<CENTER>" . $pg . "</CENTER>";

} else {
  // $id = $_GET['id']; funziona lo stesso la riga sotto fornisce un valore intero tutto qui
   $id = (int)$_GET['id'];
   $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'];
         echo $voce;
         echo "<br />";
         echo $descrizione;
         echo "<br />";
      }
}
echo "<br />";
?>
</div>

Adesso sembra andare ma ho bisogno di un chiarimento, l'errore era qui

      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '$lettera%' ";

impostato cosi mi riportava il numero corretto dei record nel caso della lettera A 15 ma ne visualizzava solo 10 quindi 2 pagine e non 3 questo e' l'echo della query e il risultato

SELECT COUNT(*) FROM glossario where voce like 'A%' 15

2

impostato cosi

      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";

impostato cosi mi riportava il numero sbagliato dei record nel caso della lettera A 17 ma li visualizza tutti e 15 quindi 3 pagine  questo e' l'echo della query e il risultato

SELECT COUNT(*) FROM glossario where voce like '%A%' 17

come funzionano gli % vicino ad una variabile in una query?

ad esempio se clicco sulla I ottengo

SELECT COUNT(*) FROM glossario where voce like '%I%' 7

ma ovviamente non viene visualizzato nulla....

A questo punto credo si risolva il tutto creando una query che dica di estrarre solo i record che comincino  per $lettera

 Qual'e il comando corretto?

risposto 6 anni fa
blackeyes
X 0 X

Non hai capito il modo in cui funziona il like di mysql, ti consiglio di leggere la documentazione:

http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html

come funzionano gli % vicino ad una variabile in una query?

Semplicemente prendono in considerazione qualsiasi serie di caratteri dopo un pattern segnato...

Se tu guardi usi un carattere jolly: "%". In una query lo usi in un modo, nella secondo lo usi in un altro...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Non hai capito il modo in cui funziona il like di mysql, ti consiglio di leggere la documentazione:

http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html

come funzionano gli % vicino ad una variabile in una query?

Semplicemente prendono in considerazione qualsiasi serie di caratteri dopo un pattern segnato...

Se tu guardi usi un carattere jolly: "%". In una query lo usi in un modo, nella secondo lo usi in un altro...

grazie ora la guardo, se uso "%" allo stesso modo su entrambe le query quando clicco su "B" mi mostra anche alcuni record della lettera "a"

Come creo una query che dica di estrarre solo i record che comincino  per $lettera ?

risposto 6 anni fa
blackeyes
X 0 X

Invece di mettere "%" davanti e dopo la lettera lo metti solo dopo, così trova tutte le occorrenze che iniziano con la lettera che indichi. (e non tutte le occorrenze che contengono una lettera indicata).

risposto 6 anni fa
Mario Santagiuliana
X 0 X

      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '$lettera%' ";

impostato cosi mi riporta il numero corretto dei record nel caso della lettera A 15 ma ne visualizzava solo 10 quindi 2 pagine e non 3 questo e' l'echo della query e il risultato

SELECT COUNT(*) FROM glossario where voce like 'A%' 15

risposto 6 anni fa
blackeyes
X 0 X

Sbagli te a suddividere le pagine con il tuo script...Puoi riportare solamente il pezzo di codice che hai ora relativo alla visualizzazione delle pagine?

risposto 6 anni fa
Mario Santagiuliana
X 0 X
   // ricavo il numero totale di record
      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";
      $result1 = mysql_query($query1);
      echo $query1;
echo mysql_result($result1, 0);
    // record complessivi
  $tot_righe = mysql_result($result1,0);
// totale pagine
      $tot_pagine = ceil($tot_righe / $step);
    //inizio la visualizzazione

    if(!$_GET['lettera'] or $_GET['lettera']=="")
    $lettera=A;

             if($pg == 0)
             {
             $precedente = "";
             }
             else
             {
             $previous_page = ($pg - 1);
             $precedente = "<a href='index.php?pag=4&pagina1=$previous_page&lettera=$lettera' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
             }

             if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }
             else
             {
             $next_page = ($pg + 1);
             $successiva = "<a href='index.php?pag=4&pagina1=$next_page&lettera=$lettera' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
             }

            $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            ".$precedente."
                        </td>
                        <td align='center'>
                            ".$successiva."
                        </td>
                    </tr>
                </table>";


              echo "<CENTER>" . $paginazione . "</CENTER>";

echo "<CENTER>" . $pg . "</CENTER>";

}
risposto 6 anni fa
blackeyes
X 0 X

Stai ancora sbagliando la query:

      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";

Non "%$lettera%" ma "$lettera%".

Oltretutto perchè fai questo controllo:

    if(!$_GET['lettera'] or $_GET['lettera']=="")

Dopo la tua query(che ho citato prima)??? Stai facendo un doppio controllo e prima lo hai fatto sbagliato:

if (!isset($_GET['id'])) {

   if (!isset($_GET['lettera']))

      $lettera = "a";

   else

      $lettera = $_GET['lettera'];

Insomma dovresti fare un unico controllo all'inizio, non più volte!!! Rallenti lo script e hai un codice stupido e inutile....

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Stai ancora sbagliando la query:

      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";

Non "%$lettera%" ma "$lettera%".

Allora se nella query utilizzo "$lettera%" impostato cosi mi riporta il numero corretto dei record nel caso della lettera A 15 ma ne visualizzava solo 10 quindi 2 pagine e non 3 questo e' l'echo della query e il risultato

SELECT COUNT(*) FROM glossario where voce like 'A%' 15

Oltretutto perchè fai questo controllo:

    if(!$_GET['lettera'] or $_GET['lettera']=="")

Dopo la tua query(che ho citato prima)??? Stai facendo un doppio controllo e prima lo hai fatto sbagliato:

if (!isset($_GET['id'])) {

   if (!isset($_GET['lettera']))

      $lettera = "a";

   else

      $lettera = $_GET['lettera'];

Insomma dovresti fare un unico controllo all'inizio, non più volte!!! Rallenti lo script e hai un codice stupido e inutile....

ok mi stai dicendo che basta questo controllo

 if(!$_GET['lettera'] or $_GET['lettera']=="")

    $lettera=A;

all'inizio dello script ???

il tutto dovrebbe essere cosi:

if (!isset($_GET['id'])) {
   if (!isset($_GET['lettera'] or $_GET['lettera']==""))
      $lettera = "a";
   else
      $lettera = $_GET['lettera'];
risposto 6 anni fa
blackeyes
modificato 6 anni fa
X 0 X

Esatto, bisogna procedere con una logica.

Per esempio: prima recuperi tutte le variabili e le informazioni che ricevi dal tuo form, poi fai il controllo di queste variabili e poi procedi con l'esecuzione di tutte le altre operazioni. Il controllo se lo fai una volta sola poi ti va bene per tutto lo script.

Poi se nel like usi "%$lettera$" ti ritrova tutte le occorrenze in cui esiste la lettera che gli passi(dovresti anche ottenere per esempio una frase che è "Ciao", che non inizia con la A), non tutte le occorrenze che iniziano con la lettera che gli passi. Hai capito?

risposto 6 anni fa
Mario Santagiuliana
X 0 X
if (!isset($_GET['id'])) {
   if (!isset($_GET['lettera'] or $_GET['lettera']==""))
      $lettera = "a";
   else
      $lettera = $_GET['lettera'];

ho modificato il codice cosi ma rileva un syntax error "unexpected operator t_logical_or expecting ',' or ')'

risposto 6 anni fa
blackeyes
X 0 X

Questa riga:

if (!isset($_GET['lettera'] or $_GET['lettera']==""))
if (!isset($_GET['lettera']) or $_GET['lettera']=="")
risposto 6 anni fa
Mario Santagiuliana
X 0 X

Questa riga:

if (!isset($_GET['lettera'] or $_GET['lettera']==""))
if (!isset($_GET['lettera']) or $_GET['lettera']=="")

ok adesso va O0

sulla query

$query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera' ";

quella che mi  ricava il numero totale dei record che iniziano per una determinata lettera impostata cosi mi da zero e sballa il numero delle pagine i record vengono pero' visualizzati correttamente sulla e    il valore è 12 ma non visualizza nulla. Questo  perche' la visualizzazione è gestita dalla query precedente

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

Se pero' come dovrebbe essere corretto imposto la query di selezione

SELECT COUNT(*) FROM glossario where voce like 'A%'

il numero dei record e' corretto 15 ma le pagine della lettera  A visualizzate sono 2 e non tre.

Coon le 2  query impostate come sopra la lettera b riporta 2 record ma il link alla pagina successiva e sempre presente anche se non dovrebbe e cliccandoci mostra le pagine 2,3,4... ovviamente vuote

T

utte le altre  lettere riportano correttamente numero record zero  ma il link alla pagina successiva e sempre presente anche se non dovrebbe e cliccandoci mostra le pagine 2,3,4... ovviamente vuote

risposto 6 anni fa
blackeyes
X 0 X

$query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera' ";

quella che mi  ricava il numero totale dei record che iniziano per una determinata lettera impostata cosi mi da zero

Ti chiedo: leggi almeno 5 volte il codice che scrivi, questa query like ricerca tutte le occorrenze che finiscono con la lettera che hai indicato!!!

Visto che hai questo grosso problema nell'impaginare i risultati, prova a dare una letta a questo articolo:

http://www.phpnews.it/articoli/paginazione-dei-dati/

risposto 6 anni fa
Mario Santagiuliana
X 0 X

$query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera' ";

quella che mi  ricava il numero totale dei record che iniziano per una determinata lettera impostata cosi mi da zero

Ti chiedo: leggi almeno 5 volte il codice che scrivi, questa query like ricerca tutte le occorrenze che finiscono con la lettera che hai indicato!!!

Visto che hai questo grosso problema nell'impaginare i risultati, prova a dare una letta a questo articolo:

http://www.phpnews.it/articoli/paginazione-dei-dati/

Hai ragione scusa ho trascritto male attualmente sia la query di selezione che quella che conta il numero di record sono like '$lettera%' e la paginazione non funziona correttamente.

Ci deve essere qualche errore nella parte che si occupa della paginazione. Vado a leggere l'articolo O0

risposto 6 anni fa
blackeyes
X 0 X

 // ricavo il numero totale di record

      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";

      $result1 = mysql_query($query1);

impostando la query cosi lo script funziona correttamente  ::) ::) ::)

questo è lo script magari puo' essere utile ad altri

<?php
include("config.inc.php");
include("connect.inc.php");
// Creo una variabile dove imposto il numero di record
// da mostrare in ogni pagina
$step = 5;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pg = $_GET['pagina1'];

// Controllo se $pag è valorizzato...
// ...in caso contrario gli assegno valore 1
if (!$pg) $pg = 1;

if($pg > 0)
   $start = ($pg - 1) * $step;
else
   $start = 0;


for ($i=65;$i<91;$i++) {
   echo"<a href=\"index.php?pag=4&lettera=".chr($i)."\">".chr($i)."</a>"." \n";
}
echo "<br />";
echo "<br />";
if (!isset($_GET['id'])) {
   if (!isset($_GET['lettera']) or $_GET['lettera']=="")
      $lettera = "a";
   else
      $lettera = $_GET['lettera'];
   $query = mysql_query("select id,voce,descrizione from glossario where voce like '$lettera%' LIMIT $start , $step ") 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=\"index.php?pag=4&id=".$id."\">".$voce."</a>"." \n ";

      echo "<br />\n";
      echo substr($descrizione, 0, $len)."...\n<br />\n";
   }

   // ricavo il numero totale di record
      $query1 = "SELECT COUNT(*) FROM  glossario where voce like '%$lettera%' ";
      $result1 = mysql_query($query1);

  // record complessivi
  $tot_righe = mysql_result($result1,0);
// totale pagine
      $tot_pagine = ceil($tot_righe / $step);

//inizio la visualizzazione

           if($pg == 1)
             {
             $precedente = "";
             }
             else
             {
             $previous_page = ($pg - 1);
             $precedente = "<a href='index.php?pag=4&pagina1=$previous_page&lettera=$lettera' title='Vai alla pagina
             precedente' class='bottonelinc'>Precedente</a>";
             }

             if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }
             else
             {
             $next_page = ($pg + 1);
             $successiva = "<a href='index.php?pag=4&pagina1=$next_page&lettera=$lettera' title='Vai alla pagina
             successiva' class='bottonelinc'>Sucessiva</a>";
             }

            $paginazione = "
                <table width='30%' border='0' align='center'>
                    <tr>
                        <td align='center'>
                            ".$precedente."
                        </td>
                        <td align='center'>
                            ".$successiva."
                        </td>
                    </tr>
                </table>";


              echo "<CENTER>" . $paginazione . "</CENTER>";

echo "<CENTER>" . $pg . "</CENTER>";

}
else {
  // $id = $_GET['id']; funziona lo stesso la riga sotto fornisce un valore intero tutto qui
   $id = (int)$_GET['id'];
   $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'];
         echo $voce;
         echo "<br />";
         echo $descrizione;
         echo "<br />";
      }
}
echo "<br />";
?>
risposto 6 anni fa
blackeyes
X 0 X

Complimenti  :D :D :D

Finalmente ahahah

Ciao

risposto 6 anni fa
Mario Santagiuliana
X 0 X

grazie O0 :bye:

risposto 6 anni fa
blackeyes
X 0 X

Allora questa mattina, non essendo molto convinto della soluzione trovata per lo script, visto che andava contro quello che la documentazione ufficiale e Mario dicevano riguardo all'uso dell'operatore "%" mi sono riletto per l'ennesima volta il codice inerente la visualizzazione ed in effetti l'errore era proprio li.

questo è il codice corretto

  if($pg == $tot_pagine)
             {
             $successiva = "";
             }

L'errore era qui $tot_pagine non deve essere -1 altrimenti l'ultima pagina non verra' mai visualizzata

 :bye:

  if($pg == $tot_pagine-1)
             {
             $successiva = "";
             }

 

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