Elenco link con ciclo for

  • Creatore Discussione Creatore Discussione LucaB
  • Data di inizio Data di inizio

LucaB

Nuovo Utente
24 Ago 2009
12
0
0
Ciao a tutti :byebye:
Premetto che sono un principiante di php... Ho letto la vostra guida PHP e diversi tutorial nella rispettiva sezione del sito. Curiosando un po' qua e là sono riuscito a tirare giù qualche riga di codice che sembra addirittura funzionare :elvis: Ora che credo di volgere verso la fine del lavoro mi sono bloccato su un ostacolo... Per questo chiedo il vostro aiuto.
Espongo in pratica quanto devo fare, in modo da essere il più chiaro possibile. Ho una tabella con tante news... E devo stamparle su pagina web, preferibilmente un tot per pagina. In merito a questo ho letto il tutorial per l'utilizzo della funzione LIMIT(). Nel tutorial stesso https://www.mrw.it/php/articoli/paginazione-dati-estratti-db-mysql_455.html viene utilizzato un for che stampa a video un elenco composto da un tot righe prese dalla tabella nel database. Fino qui tutto ok. Il mio problema è che, siccome devo elencare delle news, vorrei stampare soltanto il titolo e far sì che si possa cliccarci sopra e così aprire la news intera composta di titolo e testo. Mi sono scervellato un po', ma non riesco a trovare un metodo un po' solido per ottenere questo risultato. Per ogni elemento dell'elenco posso mettere qualcosa tipo echo "<td>" . <a href="">titolo news</a> . "</td>";. Il mio dubbio è proprio cosa mettere tra le virgolette in <a href" ">... Cioè come recuperare quella singola news e poterla stampare in un'altra pagina.
Spero di essere riuscito a spiegarmi un po'... :crying:
Grazie per l'attenzione
 
ciao
immagino che tu abbia una tabella per le news cosi composta
id data titolo testo
se è così potresti fare:

echo "<td><a href=\"pag_news_completa.php?id=$id\" target=\"_blank\">$titolo_news</a></td>";

nella pagina pag_news_completa.php prelevi la query

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

//fai dei controlli sull'idi ricevuto ed esegui la query

$query="SELECT * FROM mie_news WHERE id='$id'";
$result=mysql_query($query);
$riga=mysql_fetch_array($result);

echo "data $riga['data'] <br>";
echo "titolo $riga['titolo'] <br>";
echo "testo $riga['testo'] <br>";

a te la formattazione della pagina e testi

prova, al massimo non funzia
 
ciao
immagino che tu abbia una tabella per le news cosi composta
id data titolo testo
se è così potresti fare:

echo "<td><a href=\"pag_news_completa.php?id=$id\" target=\"_blank\">$titolo_news</a></td>";

nella pagina pag_news_completa.php prelevi la query

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

//fai dei controlli sull'idi ricevuto ed esegui la query

$query="SELECT * FROM mie_news WHERE id='$id'";
$result=mysql_query($query);
$riga=mysql_fetch_array($result);

echo "data $riga['data'] <br>";
echo "titolo $riga['titolo'] <br>";
echo "testo $riga['testo'] <br>";

a te la formattazione della pagina e testi

prova, al massimo non funzia

Grazie mille per la tempestiva e chiara risposta :beer:
Questa sera che ho un po' di tempo proverò senz'altro e ti farò sapere.
Grazie ancora :fonzie:
 
ricordiamoci sempre di effetture un controllo sui dati inviati per querystring:
PHP:
if(isset($_GET['id']))
{
$id=htmlspecialchars($_GET['id']);
}
 
Ciao, grazie ancora per le risposte. Ho tardato un paio di giorni :dormo: Ma finalmente sono riuscito a provare il codice. Ne ho capito, almeno credo, la logica.
Mi restituisce però un errore:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\Program Files\EasyPHP3.1\www\news.php on line 41


Sapete dirmi dove sbaglio?
Vi posto anche la parte di codice soggetta all'errore:


$rs = mysql_query("SELECT * FROM news LIMIT $first, $x_pag");
$nr = mysql_num_rows($rs);
if ($nr != 0){
for($x = 0; $x < $nr; $x++){
$row = mysql_fetch_array($rs);
echo "<table><tr>";
echo "<td><a href=\"pag_news_completa.php?id_news=$row['id_news']\" target=\"_blank\">$row['titolo']</a></td>";
echo "</tr></table>";
}


La linea 41 citata dall'errore è quella contenente il link del titolo, presente nel codice che vi ho postato.
Sapreste aiutarmi?
Grazie mille ancora per l'aiuto
 
ciao
prova a scrivere la riga in questa maniera (delle volte gli apici all'interno delgli array danno fastidio)

PHP:
echo "<td><a href=\"pag_news_completa.php?id_news=".$row['id_news']."\" target=\"_blank\">".$row['titolo']."</a></td>";
 
ciao, scusa ma mi sono accorto di una cosa, hai messo un ciclo for per leggere le news è meglio un ciclo while
prova a correggere così

PHP:
$rs = mysql_query("SELECT * FROM news LIMIT $first, $x_pag");
$nr = mysql_num_rows($rs);
if ($nr != 0){
	echo "<table>";
	while($row= mysql_fetch_array($rs)){
		echo "<tr>";
		echo "<td><a href=\"pag_news_completa.php?id_news=".$row['id_news']."\" target=\"_blank\">".$row['titolo']."</a></td>";  
		echo "</tr>";
	}//fine while
	echo "</table>";
}//fine if != 0
 
Ah grazie mille!! Ti stavo giusto rispondendo relativamente all'altro messaggio. Ho provato a sostituire quella parte di codice e ora funziona! Ora sistituirò tutto con il while allora, grazie sei gentilissimo.

Mentre gioco con queste cose mi è venuta un'idea... Mi chiedo se sia fattibile... Mi piacerebbe stampare a video sotto al titolo anche un pezzetto del testo, seguito dai "tre puntini" (...). Ci vuole una funzione per le stringhe che riesca a prelevare i primi tot caratteri e li stampi... Giusto? Si potrebbe fare una cosa del tipo:

if(num_caratteri>tot)
{
stampa primi tot caratteri;
stampa i tre puntini (...);
}
else
{
stampa tutto;
}

Potrebbe avere senso secondo voi?
Non vi chiedo di postare il codice, non posso farvi perdere tempo così, chiedo solo se l'idea è giusta :fonzie:
 
ciao
subito dopo il while inserisci
$max_car=10;
$testo=substr($row['testo'],0,$max_car)."..."

prelevi i primi $max_car e aggiunge i puntini

nella riga del link inserisci

.........\"_blank\">".$row['titolo']."</a><br>$testo</td>";

un piccolo consiglio
quando inserisci le news nel db su tutti i campi di testo metti
...addslashes(testo) (non ho scritto il codice preciso)
e quando li leggi
...stripslshes(testo)

perchè es. testo="ho bello l'aree meo"
viene interpretato come due stringhe da cui errore
addslshes trasforma in
="ho bello l\'aree meo"

e stripslashe toglie lo \ che in lettura è molto brutto
 
Ho sostituito il for col while, poi ho inserito quell'accorgimento per i tre puntini (...) e ho anche utilizzato le funzioni che mi hai suggerito per evitare errori con gli apici nelle stringhe :book:
Qualche errorino qua e là subito l'ho seminato, ma nulla che non sia riuscito a mettere a posto :beer:
Ma sembrava troppo bello per essere vero: la pagina mi restituisce ancora un errore e una, diciamo, anomalia :crying:

Relativamente a questo codice:

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = $_GET['pag']; (linea 13)

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


Mi restituisce questo errore:

Notice: Undefined index: pag in C:\Program Files\EasyPHP3.1\www\news.php on line 13

Mentre invece relativamente a questo codice:

if ($all_pages > $pag){
echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $pag + 1 . "\">";
echo "Pagina Avanti</a>";
}


Mi stampa a video soltanto:

1">Pagina Avanti (nemmeno come link).

Si tratta di erroracci per voi evidenti? :o

PS Quei due pezzetti di codice servono entrambi per distribuire in più pagine i dati presi dal db, come ben spiegato nel tutorial per la funzione limit().
 
Ultima modifica:
ciao
guarda qui

PHP:
/*
devi controllare il $_GET non $pag
la prima volta che chiami la pagina $_GET è nullo
quando usi $_GET e $_SERVER è meglio mettere sempre htmlspecialchars
per motivi di sicurezza
*/
if(!isset($_GET['pag'])){
	 $pag=1;
}else{
	$pag=htmlspecialchars($_GET['pag']);
}
//da qui a P righe per prova
$all_pages=5;
echo " pagine totali $all_pages<br>";
echo "sono a pagina $pag<br>";
// P
if ($all_pages > $pag){
	/*chiudi tra parentesi $pag + 1 
	altrimenti eco non capsce se deve fare la somma del valore
	di <a href....?$pag e quello con con 1."\"......Pagina avanti<\a>
	*/
	echo "<a href=\"" . htmlspecialchars($_SERVER['PHP_SELF']) . "?pag=" . ($pag + 1). "\">Pagina Avanti</a>&nbsp;&nbsp;";
}

if($pag >1){
	echo "<a href=\"" . htmlspecialchars($_SERVER['PHP_SELF']) . "?pag=" . ($pag - 1). "\">Pagina Indietro</a>";
}
 
Ho provato e funziona tutto alla perfezione :beer:
Grazie mille sei stato gentilissimo mi hai dato un grosso aiuto! :fonzie:
 

Discussioni simili