titolo al posto dell'id

achille610

Utente Attivo
18 Mag 2015
34
0
6
Ciao a tutti,
il mio sito restituisce quando clicco sul titolo che mi genera la pagina dei risultati mi restituisce la seguente url


miosito/pippo.php?id=1905

come posso fare per farmi restituire al posto di questa url il titolo della pagina ? so che le url friendly da google sono viste meglio di questa :(
 
buonasera a tutti, ho trovato questo scrip online che oltre ad aiutarmi potrebbe aiutare altri.

PHP:
 db 
CREATE TABLE 'blog'
(
id INT PRIMARY KEY AUTO_INCREMENT,
title TEXT UNIQUE, 
body TEXT,
url TEXT UNIQUE,
) ENGINE=MyISAM  DEFAULT;

con questo memorizzo la url che deve sostituire quella dinamica



PHP:
<?php
include('db_connect.php');
function string_limit_words($string, $word_limit) 
{
$words = explode(' ', $string);
return implode(' ', array_slice($words, 0, $word_limit));
}

if($_SERVER["REQUEST_METHOD"] == "POST")
{
$title=mysql_real_escape_string($_POST['title']);
$body=mysql_real_escape_string($_POST['body']);
$title=htmlentities($title);
$body=htmlentities($body);
$date=date("Y/m/d");
//Title to friendly URL conversion
$newtitle=string_limit_words($title, 6); // First 6 words
$urltitle=preg_replace('/[^a-z0-9]/i',' ', $newtitle);
$newurltitle=str_replace(" ","-",$newtitle);
$url=$date.'/'.$newurltitle.'.html'; // Final URL
//Inserting values into my_blog table
mysql_query("insert into blog(title,body,url) values('$title','$body','$url')");
}
?>
//HTML Part
<form method="post" action="">
Title:
<input type="text" name="title"/>
Body:
<textarea name="body"></textarea>
<input type="submit" value=" Publish "/>
</form>

adesso iniziano i problemi :( questo l'ho messo nel body della pagina che restituisce i risultati con url es articoli.php?id=1905,
secondo quanto c'era scritto la url si doveva modificare in articoli/pippoepluto.html tramite il file .htaccess "nn l'ho mai fatto" quindi chiedo intanto in che estensione devo salvarlo ? oltre a questo devo salvarlo nella stessa cartella dove ho il sito ?

PHP:
<?php
include('db_connect.php');
if($_GET['url'])
{
$url=mysql_real_escape_string($_GET['url']);
$url=$url.'.html'; //Friendly URL 
$sql=mysql_query("select title,body from blog where url='$url'");
$count=mysql_num_rows($sql);
$row=mysql_fetch_array($sql);
$title=$row['title'];
$body=$row['body'];
}
else
{
echo '404 Page.';
}
?>
//HTML Part
<body>
<?php 
if($count)
{
echo "<h1>$title</h1><div class='body'>$body</div>";
}
else
{
echo "<h1>404 Page.</h1>";
}
?>

file .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ articoli?url=$1 [PT,L] ( questo è quello che hanno postato sul sito) ma penso che sia sbagliato perché la mia stringa finisce con ?id=, oltre a questo nello script nn c'è nessun $1

ho provato a modificarlo anche così ma nn funziona .php?id=$url [PT,L]

qualcuno mi può' aiutare a capire!!! grazie
 
innanzi tutto lo script php, da quanto capisco, non cambia semplicemente le url ma prevede che titolo e body di ogni pagina siano in una riga del database. se il tuo sito è costruito diversamente e ci metti questo script non funzionerà.
il file htaccess è un file nascosto, non ha estensione ma semplicemente comincia con un punto seguito da htaccess (.htaccess)
quello che vedo qua sembra sbagliato nel senso che andrebbe scritto articoli.php?url=$1

tanto per capire $1 starebbe a significare "tutto quello che combacia con il valore fra parentesi", tu hai ^(.*)$ che significa:
^ = inizio stringa
( = inizia a raccogliere i dati
.* = qualsiasi cosa ci sia scritta
) = fine raccolta dati
$ fine stringa
praticamente viene passato alla pagina articoli.php la url intera come variabile GET 'url', quindi dentro a $_GET['url'] ti troverai l'intera url.
il file .htaccess va messo nella root del sito, di solito dove si trova index
 
ah grazie mille.

pensavo che nn dovevo per forza modificare il body :(

tu conosci qualche altro modo da consigliarmi ? per creare urne friendly
 
be' se non utilizzi un cms che abbia già la funzione dovresti programmartelo tu, se le url sono ben costruite non è difficilissimo è una combinazione di htaccess e php. ora sono col telefono, quando arrivo ad un computer provo a scriverti una sottospecie di codice :)
 
magari grazie mille :)

cmq nn uso un cm ecco perché mi serve qualcosa di altro, tieni presente che la url che restituisce il risultato è sempre la stessa per qualsiasi categoria del sito.
 
allora per avere le url abbellite è necessario che ogni articolo nel database abbia oltre al suo id anche un titolo univoco.

bisogna costruire i link mettendo al posto dell'id il titolo della pagina quindi al posto di
Codice:
miosito/pippo.php?id=1905
si mette una cosa tipo
Codice:
miosito/titolo-della-pagina.html

fatta questa modifica devi modificare il file htaccess
Codice:
RewriteRule ^(.*).html$ pippo.php?url=$1 [PT,L]

ora ti serve un php che prenda la variabile url dal get e cerchi quel titolo nel database e ti restituisca l'id.
una volta che hai l'id la pagina funziona come prima
 
Ciao,
ok con s_get recupero il titolo, ho fatto varie prove stampando a video e mi viene fuori il titolo esatto.

PHP:
<?php


//Recupero il valore del parametro "titolo"
$id_annunci=$_GET['titolo'];

//Recupero il valore del parametro "$ titolo"

//Ora stampo semplicemente a video il risultato
echo "titolo s get .... " . $id_annunci . " $titolo " ;
?>

Ora se nn ho capito male (ovviamente tolgo l'echo) metto il file .htaccess impostato come mi hai detto, e nella url dovrei trovare al posto di: articolo.php?id=1234 troverò pippohamangiato.html ? esatto

Un'ultima domanda questo variabile dove e meglio metterla nella pagina, all'inizio o alla fine ?
 
Allora ho messo la nuova variabile S_GET ho aggiunto .htaccess nella cartella del sito ma vedo sempre come finale della url php?id=1905 e nn il titolo :( perché
 
non mi sono spiegato, non c'è nulla che cambierà i link all'interno del sito, quello devi farlo tu a mano quindi dovrai sostituire tutti i link che hanno l'id con link col nome.

il file htaccess serve perché prende la url finta e la sostituisce con una vera mandando la variabile get al file php

una volta che hai il titolo nella pagina php puoi caricare dal database i contenuti della pagina

quindi
1. trasformi i link da miosito/pippo.php?id=1954 a miosito/titolo-della-pagina.html
2. tramite htaccess trasformi miosito/titolo-della-pagina.html (che non porterebbe a niente perché quella pagina html non esiste) in miosito/pippo.php?url=titolo-della-pagina
3. con php nella pagina pippo carichi dal datatabase i contenuti della pagina

purtroppo non è possibile trasformare i link già fatti con l'id in link col titolo automaticamente, gli script, sia questo che quelli che trovi, gestiscono i link col titolo in modo che il sito li capisca ma non possono trasformare quanto è già stato fatto, quello lo devi fare tu a mano.
 
potrebbe essere che i link del tuo sito siano creati da una funzione nel qual caso potresti modificare la funzione perché crei link col titolo e non con l'id
 
emh ok... mi puoi fare un esempio di cosa e come dovrei scriverlo nel file .htaccess ? quindi se nn ho capito male così come ho fatto passando la variabile s_Get titolo ed estraendo il titolo nn serve a nulla, oppure poi google legge il titolo al posto di id=1234
 
io passo cosi il tutto ....

PHP:
<?php

require ("db_connect.php"); 

$id_annunci=$_GET['id'];


$query = mysql_query ("SELECT * FROM
     ricette INNER JOIN tipologia ON (ricette.tipologiaid=tipologia.id )
     INNER JOIN cottura ON (ricette.cotturaid=cottura.id )
     INNER JOIN difficolta ON (ricette.difficoltaid=difficolta.id )
     INNER JOIN regione ON (ricette.regioneid=regione.id )
     INNER JOIN solo ON (ricette.soloid=solo.id )
     INNER JOIN speciali ON (ricette.specialiid=speciali.id )
     INNER JOIN stato ON (ricette.statoid=stato.id )
     INNER JOIN tempo ON (ricette.tempoid=tempo.id )
     INNER JOIN tipo ON (ricette.tipoid=tipo.id )
      INNER JOIN ingrediente ON (ricette.ingredienteid=ingrediente.id )
       INNER JOIN users ON (ricette.user_id=users.id)
       WHERE id_annunci=$id_annunci LIMIT 1"); 


if (!$query) {
  exit('<p>Error performing query: ' . mysql_error() . '</p>');
}


while ($row = mysql_fetch_array($query)) {
$user_id = $row ['id'];
$titolo = $row ['titolo'];
$id_annunci = $row ['id_annunci'];
$ts = $row ['ts'];

SOlo che se modifico $id_annunci=$_GET['id']; in $id_annunci=$_GET['titolo nn funziona e mi da errore'];
 

Discussioni simili