web-dev-qa-db-fra.com

Comment générer une page HTML de manière dynamique en utilisant PHP?

J'ai une page qui affiche des informations sur une propriété, en fonction de l'ID unique de l'URL, en recherchant cet ID dans la base de données mysql, en obtenant toutes les informations de cette ligne, etc., assez standard. 

Je me demandais si/comment je pouvais "créer" une page html pour chaque ligne de la base de données, car je suppose que cela serait préférable pour le référencement? Avoir plusieurs pages avec des mots-clés sur plutôt qu'une page dynamique?

Mes propriétés sont ajoutées à la base de données par un système de formulaire/téléchargement sur le site. Je pensais que la création de la page lors du téléchargement serait peut-être plus facile, mais je suis ouvert aux suggestions!

11
rpsep2

Je me demandais si/comment je pouvais "créer" une page HTML pour chaque ligne de la base de données ?

Il vous suffit de créer un fichier php qui génère un modèle html. Ce qui change est le contenu textuel de cette page. Dans cette page, vous pouvez obtenir un paramètre (par exemple, l'id de la ligne) via POST ou GET, puis obtenir les informations de la base de données.

Je suppose que ce serait mieux pour le référencement?

Le moteur de recherche comme Google interprète que example.php?id=33 et example.php?id=44 sont des pages différentes, et oui , de cette façon, est préférable à une page de référencement unique du point de vue du référencement, vous n'avez donc besoin que de deux fichiers php au moins (listing.php et single.php), car il est préférable de relier ces pages à partir du listing.php

Conseils supplémentaires:

example.php?id=33 est vraiment moche et pas très convivial, peut-être avez-vous besoin d'un code de réécriture d'URL. Quelque chose comme example/properties/property-name c'est mieux;)

21
Tom Sarduy

Juste au cas où quelqu'un voudrait générer/créer un fichier HTML réel ...

$myFile = "filename.html"; // or .php   
$fh = fopen($myFile, 'w'); // or die("error");  
$stringData = "your html code php code goes here";   
fwrite($fh, $stringData);
fclose($fh);

Prendre plaisir! 

18
Armand

Selon vos besoins, vous n'avez pas à générer une page HTML dynamiquement. Cela peut être fait par . fichier htaccess.

C'est quand même un exemple de code pour générer une page HTML

<?php

 $filename = 'test.html';
 header("Cache-Control: public");
 header("Content-Description: File Transfer");
 header("Content-Disposition: attachment; filename=$filename");
 header("Content-Type: application/octet-stream; ");
 header("Content-Transfer-Encoding: binary");
?>

vous pouvez créer n’importe quel fichier .html, .php en modifiant simplement l’extension dans le nom du fichier

8
sandip

Vous n'avez pas besoin de générer une page HTML dynamique, utilisez simplement le fichier .htaccess et réécrivez l'URL.

3
Yashankit Vyas

Ça a l'air drôle mais ça marche.

<?php 
$file = 'newpage.html';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new person to the file
$current .= "<!doctype html><html>
<head><meta charset='utf-8'>
<title>new file</title>
</head><body><h3>New HTML file</h3>
</body></html>
";
// Write the contents back to the file
file_put_contents($file, $current);
?>
2
user8743488

Je travaille un peu comme ceci et j'ai un code qui pourrait vous aider. L'exemple en direct est ici et ci-dessous, est le code que j'utilise pour que vous puissiez l'avoir comme référence. 

create-page.php

<?php

// Session is started.
session_start();

// Name of the template file.
$template_file = 'couples-template.php';

// Root folder if working in subdirectory. Name is up to you ut must match with server's folder.
$base_path = '/couple/';

// Path to the directory where you store the "couples-template.php" file.
$template_path = '../template/';

// Path to the directory where php will store the auto-generated couple's pages.
$couples_path = '../couples/';

// Posted data.
$data['groom-name'] = str_replace(' ', '', $_POST['groom-name']);
$data['bride-name'] = str_replace(' ', '', $_POST['bride-name']);
// $data['groom-surname'] = $_POST['groom-surname'];
// $data['bride-surname'] = $_POST['bride-surname'];
$data['wedding-date'] = $_POST['wedding-date'];
$data['email'] = $_POST['email'];
$data['code'] = str_replace(array('/', '-', ' '), '', $_POST['wedding-date']).strtoupper(substr($data['groom-name'], 0, 1)).urlencode('&').strtoupper(substr($data['bride-name'], 0, 1));

// Data array (Should match with data above's order).
$placeholders = array('{groom-name}', '{bride-name}', '{wedding-date}', '{email}', '{code}');

// Get the couples-template.php as a string.
$template = file_get_contents($template_path.$template_file);

// Fills the template.
$new_file = str_replace($placeholders, $data, $template);

// Generates couple's URL and makes it frendly and lowercase.
$couples_url = str_replace(' ', '', strtolower($data['groom-name'].'-'.$data['bride-name'].'.php'));

// Save file into couples directory.
$fp = fopen($couples_path.$couples_url, 'w');
fwrite($fp, $new_file);
fclose($fp);

// Set the variables to pass them to success page.
$_SESSION['couples_url'] = $couples_url;
// If working in root directory.
$_SESSION['couples_path'] = str_replace('.', '', $couples_path);
// If working in a sub directory.
//$_SESSION['couples_path'] = substr_replace($base_path, '', -1).str_replace('.', '',$couples_path);

header('Location: success.php');

?>

J'espère que ce fichier pourra vous aider et servir de référence pour démarrer et dynamiser votre projet.

1
KAZZABE

Je vous suggère d'utiliser le mod de réécriture d'URL est suffisant pour votre problème, j'ai le même problème mais en utilisant le mod de réécriture d'URL et obtenir une bonne réponse de SEO. Je peux vous donner un petit exemple. Par exemple, si vous considérez WordPress, les données sont stockées dans une base de données, mais de nombreux sites Web WordPress utilisent la méthode de réécriture d’URL pour obtenir de bonnes réponses de la part de Google.

Exemple: URL wordpress sans URL réécrire mod-domaine.com/?p=123 après le mode de réécriture d'URL - domain.com/{title de l'article} comme domain.com/seo-url-rewrite-mod

je pense que tu as compris ce que je veux te dire

1
santosh

Je vais simplement mettre à jour le code pour contenir les modifications et le commenter afin que vous puissiez voir clairement ce qui se passe ... 

<?php   
include("templates/header.htm");   

// Set the default name 
$action = 'index'; 
// Specify some disallowed paths 
$disallowed_paths = array('header', 'footer'); 
if (!empty($_GET['action'])) { 
    $tmp_action = basename($_GET['action']); 
    // If it's not a disallowed path, and if the file exists, update $action 
    if (!in_array($tmp_action, $disallowed_paths) && file_exists("templates/{$tmp_action}.htm")) 
        $action = $tmp_action; 
} 
// Include $action 
include("templates/$action.htm"); 

include("templates/footer.htm");
0
Julien