Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Database
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 26 Gen 2012 21:13    Oggetto: Rispondi citando

Ho modificato la riga 13 così:
Codice:
$cerca=isset($_POST['cerca']) && strlen($_POST['cerca'])>=3 ? $_POST['cerca'] : null;
, adesso mi ha manifestato un errore alla riga 54:
Codice:
} else {?>
l'erroe è questo: Parse error: syntax error, unexpected '}' in /home/mhd-01/www.streamingmania.it/htdocs/Rollover/Ris.php on line 54, vuol dire che manca una di queste giusto: "}"?
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 26 Gen 2012 21:28    Oggetto: Rispondi citando

Avevo cannato io alcuni apici perchè ho usato un editor che apro poco e che ha una politica di autocompletamento differente da quello che uso di solito.
Non rileggendo sono rimasti errori di sintassi.
Ho ora evidenziato i bordi della tabella per farteli vedere bene e ho aggiunto che se l'ultima riga ha una cella sola, ne viene aggiunta una vuota per formattare bene la tabella.
In più facendo il copia & incolla del tuo codice mi ha portato a sputtanare la query.
Ora mi pare che funzioni.

Fa conto che in questa pagina ci devi arrivare con una post; se preferisci la get cambia la var $_POST con $_GET.
Codice:

<?php
$db_host = "host";
$db_user = "DB_User";
$db_password = "pass";
$db_name = "prova";

//connetto il database

$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');

$errMsg='';
$cerca=isset($_POST['cerca']) && strlen($_POST['cerca'])>=3 ? $_POST['cerca'] : null;

$dati=array();

if ($cerca===null)
{
   $errMsg='Querystring errata!';
}
else
{
   $cerca="'%".mysql_escape_string($cerca). "%'";
// cerco nel db
   $query = "SELECT * FROM Tabella WHERE Titolo LIKE $cerca OR Descrizione LIKE $cerca";
   $rs=mysql_query($query);
   
   if ($rs && mysql_num_rows($rs)>0)
   {
      while ($row=mysql_fetch_assoc($rs))
      {
         $dati[]=$row;
      }
   }
   else
   {
      $errMsg='Nessun risultato trovato!';
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>StreamingMania</title>
</head>

<body>

<p>Risultati per: <?php print $cerca;?></p>

<?php if ($errMsg!='') {
   print '<b>'.$errMsg.'</b>';
} else {?>

   <table border="1">
      <tr><th colspan="2"><?php print count($dati) . ' risultati';?></th></tr>
     
      <?php
         $i=0;
      // qui apro la riga come di SverX
         print '<tr>';
         foreach ($dati as $d)
         {
            print '<td>Titolo: ' . $d['Titolo'].'<br/>'.$d['Immagine'].'<br/>Descrizione: '.$d['Descrizione'].'</td>';
           
            ++$i;
            if ($i%2==0)   // $i è pari?
            {
               print '</tr><tr>';
            }
         }
         
         if ($i%2!=0)
         {
            
            print '<td>&nbsp;</td>';
         }
         print '</tr>';
      ?>
     
   </table>

<?php }?>

</body>
</html>

Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 26 Gen 2012 21:37    Oggetto: Rispondi citando

@freemind Sei un grande funziona, l'unico problema è questa frase che esce in cima: "Risultati per: '%prova%'", ma per il resto và benissimo, ringrazio sia te che SverX per l'aiuto che mi avete dato, veramente gentilissimi.... Rolling Rolling
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 27 Gen 2012 09:10    Oggetto: Rispondi citando

Sì, hai ragione.
Invece di
Codice:

$cerca="'%".mysql_escape_string($cerca). "%'";

cambia variabile tipo:
Codice:

$safeCerca="'%".mysql_escape_string($cerca). "%'";

e la query cambiala di conseguenza con:
Codice:

   $query = "SELECT * FROM Tabella WHERE Titolo LIKE $safeCerca OR Descrizione LIKE $safeCerca";

Così dovrebbe stampare giusto tutto.
Top
Profilo Invia messaggio privato
Pazzini
Comune mortale
Comune mortale


Registrato: 29/01/12 03:23
Messaggi: 2

MessaggioInviato: 29 Gen 2012 03:39    Oggetto: Rispondi citando

Salve, anche io stò cercando di realizzare qualcosa di simile, e lo script qui proposto funziona anche a me, ma non riesco a personalizzarlo come vorrei.
La visualizzzazione dovrebbe essere così: in basso a destra vorrei ottenere un qualcosa di simile: "1 l 2 l 3 l 4 l 5 l 6 l 7 l 8l 9 l 10 l"(oppure gli stessi sottolineati, ma mi par eche quello si fà con i css quando si influenza la classe link) e sopra dove appaiono i risultati se ad esempio appaiono 2 risultati mi dovrebbe uscire scritto "pagina 1 di 1", e vorrei impostare il limite dei risultati a 20 per pagina, ora se io metto limit come letto nella discussione funziona, ma come faccio ad andare avanti con le pagine, esistono già o devo ordinare io al computer di crearle e se si come devo scrivere?
Un grazie a chi risponderà.
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 29 Gen 2012 20:06    Oggetto: Rispondi citando

Mi ero scordato della limit...

La clausola limit vincola il numero di righe in base ai parametri passati alla clausola. Come già detto "limit 0,12" vuol dire "le prime dodici righe" quindi alla fine il recordset ritornato sarà composto solo da queste e non da tutte quelle che sarebbero ritornate senza clausola.
Se dobbiamo quindi impaginare i dati abbiamo la necessità di:
1) sapere quante righe ci sono in tutto
2) sapere quale pagina vogliamo visualizzare
3) sapere quante pagine ci sono in tutto.

Per il punto 1 dobbiamo contare le righe che corrispondono alla ricerca.
Potremmo da bastardi e brocchi eseguire la query senza limit e sfruttare "mysql_num_rows" per sapere il numero di risultati.
Questo approccio è sbagliato perchè la limit ha lo stesso peso computazionale delle select semplice quindi se questa è pesante eseguiremmo due volte una brutta select sul db.
Allora useremo l'aggregatore "count".

Per il punto 2 è facile perchè saremo noi a dire quale pagina visualizzare sottointendendo 1 se non viene specificata.

Il punto 3 viene risolto mettendo insieme 1 e 2 perchè il numero di pagine è dato da "ceil($howMany/$limit)" con $howMany il numero totale di righe (punto 1) e $limit la dimensione della pagina. ceil arrotonda per eccesso un numero e ci serve perchè la limit vuole numeri interi (ovviamente).

Qui sotto il codice per impaginare i dati; son partito dallo script precedente.

Ho preferito non creare tanti link quante sono le pagine ma una select in modo da poter racchiudere la tabella in una form aggiungendo un hidden "cerca" valorizzato come la ricerca per poter "rifare la ricerca" sulla stessa form cambiando solo la pagina.

Codice:

<?php
$db_host = "host";
$db_user = "DB_User";
$db_password = "pass";
$db_name = "prova";

//connetto il database

$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');

$errMsg='';
$cerca=isset($_REQUEST['cerca']) && strlen($_REQUEST['cerca'])>=3 ? $_REQUEST['cerca'] : null;

$dati=array();
$howMany=0;   // usato più avanti

if ($cerca===null)
{
   $errMsg='Querystring errata!';
}
else
{
   $safeCerca="'%".mysql_escape_string($cerca). "%'";
   
   $page=isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
   $limit=5;
   $offet=($page-1)*$limit;
   
// conto quante righe ci sono
   $query="SELECT IFNULL(COUNT(*),0) as q FROM Tabella WHERE Titolo LIKE $safeCerca OR Descrizione LIKE $safeCerca";
   //print $query;exit;
   $rs=mysql_query($query);
   $row=mysql_fetch_assoc($rs);
   $howMany=$row['q'];
   
   $totPages=ceil($howMany/$limit);   // numero totale di pagine

   //print $totPages;exit;
   $select='<select name="page">';
      for ($i=1;$i<=$totPages;++$i)
      {
         $select.='<option value="' .$i .'"' . ($i==$page ? ' selected="selected"' : ''). '>'.$i.'</option>';
      }
   $select.='</select>';
   
// l'impaginatore
   $pager='Pagina ' . $select . ' di '. $totPages . ' <input type="submit" name="command" value="Vai"/>';
   
// cerco nel db
   $query = "SELECT * FROM Tabella WHERE Titolo LIKE $safeCerca OR Descrizione LIKE $safeCerca LIMIT $offet,$limit";
   $rs=mysql_query($query);
   
   if ($rs && mysql_num_rows($rs)>0)
   {
      while ($row=mysql_fetch_assoc($rs))
      {
         $dati[]=$row;
      }
   }
   else
   {
      $errMsg='Nessun risultato trovato!';
   }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>StreamingMania</title>
</head>

<body>

<p>Risultati per: <?php print $cerca;?></p>

<?php if ($errMsg!='') {
   print '<b>'.$errMsg.'</b>';
} else {?>
   <form method="get" action="<?php print $_SERVER['PHP_SELF'];?>">
      <input type="hidden" name="cerca" value="<?php print $cerca;?>"/>
      <table border="1">
         <tr><th colspan="2"><?php print $howMany . ' risultati';?></th></tr>
        
         <?php
            $i=0;
         // qui apro la riga come di SverX
            print '<tr>';
            foreach ($dati as $d)
            {
               print '<td>Titolo: ' . $d['Titolo'].'<br/>'.$d['Immagine'].'<br/>Descrizione: '.$d['Descrizione'].'</td>';
              
               ++$i;
               if ($i%2==0)   // $i è pari?
               {
                  print '</tr><tr>';
               }
            }
            
            if ($i%2!=0)
            {
               
               print '<td>&nbsp;</td>';
            }
            print '</tr>';
         ?>
        
         <tr><td colspan="2"><?php print $pager;?></td></tr>
      </table>
   </form>

<?php }?>

</body>
</html>



Testando la roba prima di fare la doccia (come sempre) sembra che la cosa stia in piedi.

Per variare la dimensione delle pagine basta cambiare il valore alla variabile $limit.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 30 Gen 2012 00:00    Oggetto: Rispondi citando

Bella aggiunta, hai arricchito ulteriormente il codice. Solo una domanda: se volessi visualizzare la lista di pagine totali, ad esempio: pagine 1 l 2 l 3 dovrei semplicemente andare a toccare la funzione che ha a che fare con select vero?
Top
Profilo Invia messaggio privato
Pazzini
Comune mortale
Comune mortale


Registrato: 29/01/12 03:23
Messaggi: 2

MessaggioInviato: 03 Feb 2012 01:30    Oggetto: Rispondi citando

Ciao, scusa se ti rispondo solo ora ma non ci sono stato. Potresti farmi un favore?
Vorrei che riscrivessi il codice in maniera che mi mostri le pagine così: pagina precedente 1 2 3 4 5 6 7 8 pagina successiva, senza la funzione scroll che hai messo, ho provato a farlo da solo ma sono molto incapace Embarassed .ù Ti prego di farmi questo favore please Wink
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 06 Feb 2012 19:22    Oggetto: Rispondi citando

Invece di creare la select occorre creare tanti "<a href="">...</a>" il cui link punti alla stessa pagina con il parametro "page" uguale all'indice della pagina e il parametro "cerca" uguale a quello che ora è nell'hidden.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 08 Feb 2012 02:37    Oggetto: Rispondi citando

Ok, allora vi posto quello che ho fatto fino ad ora modificando quel codice:
Codice:
  for($i=1; $i<$totPages; $i++) $pagine[]="<a href='../risultati.php?ricerca=ok&$cerca&p=".$i."'".($i==$p ? " class='this'" : '').">".$i."</a>";

Come detto da freemind ho ordinato allo script di creare tanti "<a href="">...</a>" allora ho sostituito alla funzione quello script trovato su google, e ovviamente riadattato a ciò che dovevo fare. Ho messo il parametro $cerca perchè ho notato che molti siti mettevano quella stringa(forse per stampar eil termine della riecrca su tutte le pagine, comunque sia prima ho provato senza la stringa $cerca è già non funzionava bene). Comunque alla fine ho aggiunto anche la variabile $p(che da quello che ho capito identifica le pagine della ricerca partendo da 0 come pagina iniziale dei risultati e aumentanto, ad esempio p=1 per la pagina due, ecc), però ho un problema, quando provo a sfogliare i risultati mi dà l'errore "Querystring errata", che è il messaggio che appare anche quando non si scrive nulla. Alla luce di ciò e dopo aver provato per 2 orette buone, ho pensato che stranamente dopo aver stampato le pagine lo scipt si "dimentica" della parola cercata, quindi se effettivamente ho 6 pagine nella ricerca, solo la prima conterrà risultati, le altre saranno vuote, tuttavia ho anche notato che se clicco per caricare una pagina , ad esempio la 3, e appare il messaggio di erore, dopo se tento di andare indietro scopro che il server ha chiuso la connessione con il database e ha eliminato i risulatti trovati e mi appare un errore: "documento scaduto". Se qualcuno magari sà la soluzione dell'enigma o può darmi qualceh indicazione per arrivarci gli sarei molto grato.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 09 Feb 2012 14:38    Oggetto: Rispondi citando

se sulla prima pagina usi un form in modalità 'POST' poi quando cercherai di passare alla seconda pagina attraverso un link non avrai più il valore 'POSTato'. Ti consiglio di passare il parametro sulla querystring, e quindi usare GET, così funzionerà in tutte le pagine successive.
Top
Profilo Invia messaggio privato HomePage
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 09 Feb 2012 23:17    Oggetto: Rispondi citando

Ok adesso provo, grazie per il consiglio.
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 09 Feb 2012 23:25    Oggetto: Rispondi citando

Nella generazione dei link, hai dimenticato di passare il parametro cerca (o almeno così mi pare).
Quando scrivi il for, ad un certo punto generi la query mettendo un "$cerca" ma dovresti fare una roba tipo: "..&cerca=$cerca&...".
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 10 Feb 2012 23:46    Oggetto: Rispondi citando

Ok, ci sono riuscito, avevo fatto alcuni errori sui parametri e dovevo sistemare meglio una riga che avevo fatto, grazie a tutti.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 16 Feb 2012 19:34    Oggetto: Rispondi citando

Ok, ho l'ultimo problema e poi ho finito tutto il database finalmente. Allora, se io cerco la parola "prova" e mi escono un totale di 30 pagine, il browser visualizzarà tutte e 30 le pagine, nella lista in basso per la selezione. Vorrei sapere se c'è un modo per visualizzare solo ad esempio le prime 6 pagine così: 1 2 3 4 5 6 e poi continuando, ad esempio cliccando sul 6 così: 4 5 6 7 8 9. Credo che si faccia con l'apposita funzione LIMIT, però ho qualche dubbio che sia propio così... Comunque su google non ho trovato nulla in proposito e mi chiedo se qualcuno di voi lo sappia. Se avete una guida che spiega il procedimento propio per fare questo meglio ancora. Grazie.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 17 Feb 2012 13:45    Oggetto: Rispondi citando

immagino tu usi un ciclo for per stampare i link alle altre pagine... bene, basta che il tuo ciclo for parta da
k=max(1,pagina corrente-3)
e vada a
min(numero totale pagine, k+5)

Ciao
Top
Profilo Invia messaggio privato HomePage
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 17 Feb 2012 21:18    Oggetto: Rispondi citando

Grazie della risposta, però nno ho capito bene come implementare, normalmente ho questo:
Codice:
   for($i=1; $i <= $totPages; $i++)
, che è il ciclo for usato per stampare, con sotto la variabikle che stampa il risultato "$pagine". Adesso, ho provato a fare così:
Codice:
    $k= max(1,$page-3);
   $m= min($totPages, $k+5);
   for($k; $m)($i=1; $i <= $totPages; $i++)
, ma forse tu non intendevi questo, comunque adesso faccio una ricerca su google e vedo se c'è qualche consiglio su questo tipo di aggiustamento, sperando di trovre magari dove sbaglio, se risolvo posto la soluzione. Ciao.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 18 Feb 2012 02:23    Oggetto: Rispondi citando

Allora, non ho ancora risolto il problema, ma dalle cose trovate su google meglio che specifichi subito il tutto. I dati per essere pubblicati passano attraverso una $variabile , che pubblica le pagine tramite una funzione implode( "$a", "$b"), ovviamente ho utilizzato nomi a caso per gli esempi, però meglio specificare il tutto... Quella cosa he ho scritto prima in codice ignoratela, non conoscevo la funzione è ho inserito il tutto un pò a caso, comunque ancora non ho capito come fare. Weeps
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 19 Feb 2012 13:23    Oggetto: Rispondi citando

Aspetta, che vuol dire:
Codice:

for($k; $m)($i=1; $i <= $totPages; $i++)

Il ciclo deve diventare
Codice:

for ($i=$k;$i<=$m;++$i)
{
...
}

ossia $i deve partire da $k e terminare in $m dove $k e $m sono definite come ti ha fatto vedere SverX.
Quello che hai scritto tu non esiste in php.
Top
Profilo Invia messaggio privato
HelpMe!!!
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 16/12/11 21:03
Messaggi: 87

MessaggioInviato: 19 Feb 2012 16:10    Oggetto: Rispondi

Grazie mille della risposta, avevo mal interpretato la sintassi di SverX ed ero andato fuori strada. Avevo pensato che dovessi metterli dentro quei parametri comunque, ma mi dava degli errori di sintassi, e ho pensato che non fosse quella la strada (invece lo era), per questo ho deciso di metterli fuori (sbagliando, anche se non avevo mai visto una cosa del genere, e come ho scritto, poi ho deciso di abbandonarla perchè sembrava veramente strana la sintassi, nonchè impossibile...).
Certo che voi due ne sapete di cose....
Come sempre adesso funziona. Bravi. Applause
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 1 ora
Vai a Precedente  1, 2, 3  Successivo
Pagina 2 di 3

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi