Vytvoření nové stránky podle záznamu v databázi – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vytvoření nové stránky podle záznamu v databázi – PHP – Fórum – Programujte.comVytvoření nové stránky podle záznamu v databázi – PHP – Fórum – Programujte.com

 

A. H.
~ Anonymní uživatel
8 příspěvků
16. 9. 2020   #1
-
0
-

Ahoj,

chci se zeptat, zda je možné, aby se stránky vytvořily úplně sami po přidání záznamu do databáze. Nejlépe vysvětlí příklad:

Chci udělat web, na který budu publikovat články. Web chci mít napojený na databázi. V Databázi budu mít sloupce "clanek_id", "nazev", "text_clanku". Lze nějak udělat, aby pokaždé, když do databáze přidám nový záznam, se vytvořila i HTML stránka s tímto článkem. Nechci, aby jsem měl např. jen jednu stránku "www.mojezpravyabcd987456.cz/clanek.php" a PHP skript by na ní vždy načetl článek, který zrovna chci. Potřeboval bych, aby každý článek byl na jiné adrese (-> nař. aby bylo možné články jednouše sdílet). Ovšem ještě bych potřeboval, aby tato akce byla zautomtizovaná. (Buď aby se stránka po vložení záznamu do DB vytvořila sama (myslím, že toto ani udělat nelze), a nebo, aby když uživatel klikne na článek, aby PHP kód zkontroloval, jestli daná stránka již existuje a pokud ne, vytvoří ji) Příp. existuje jiný způsob?

Je mi jedno, jaký tvar bude mít adresa (Jestli www.mojezpravyabcs987456.cz/…se-kocka.php, nebo třeba www.mojezpravyabcd987456.cz/clanek-id38). Jde mi jen o to, aby každý článek měl jinou adresu

Předem děkuji za všechny nápady!

Nahlásit jako SPAM
IP: 89.102.236.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 9. 2020   #2
-
0
-

Parametry jsou součástí adresy. clanek.php?id=1 a clanek.php?id=23 jsou různé adresy.

Ale jinak se tomů říká Hezké URL a je to v podstatě neviditelné přesměrování, takže se třeba pro /clanky/123 fakticky načte clanky.php?id=123. Fantazii se meze nekladou, pogoogli a určitě najdeš variantu, která ti bude vyhovovat.

Nahlásit jako SPAM
IP: 213.211.51.–
A. H.
~ Anonymní uživatel
8 příspěvků
17. 9. 2020   #3
-
0
-

#2 gna
Aha, ono se to dělá automaticky...

To jsem nevěděl. Díky, hned zkusím a uvidím (;

Nahlásit jako SPAM
IP: 89.102.236.–
A. H.
~ Anonymní uživatel
8 příspěvků
17. 9. 2020   #4
-
0
-

#2 gna
No, tak jsem rovnou zkoušel načíst jeden z článků pomocí připsání ID do adresy, ale nefungovalo to.

Předpokládám, že musím nějak upravit PHP kód, ale absolutně nevím, jak? Tohle je aktuálně můj. Zatím funguje bez problémů, ale zobrazuje pouze všechny články na jedné stránce.

	<?php
	include ("login.php");
	$conn = new mysqli($server, $name, $password, $database);
	if ($conn->connect_error) {
	die("Connection failed: " . $conn->connect_error);
	}
	$sql = "SELECT nazev, datum, text, img FROM clanky ORDER BY nazev";
	$result = $conn->query($sql);
	
	if ($result->num_rows > 0) {
	  while($row = $result->fetch_assoc()) {
	    $obrazek = $row["img1"];
	    $nazev = $row["nazev"];
	    echo '<h1 style="line-height: 2.5; font-size: 42px">' . $row["nazev"] . '</h1>';
	    echo '<h2>' ."Datum: ". $row["datum"]. '</h2>';
	    echo '<h4>' ."Text článku: ". $row["text"]. '</h2>';
        echo "<img src=\"Obrazky/$obrazek\"/ name=$nazev width='1536' height='864' > <br>";
	  }
	} else {
	  echo "0 results";
	}
	$conn->close();
	?>

Mohl by mi prosím ještě někdo poradit, jak by bylo možné udělat, aby si PHP načetlo článek, jehož id bude zatím uložené v proměnné?

Děkuji moc všem!

Nahlásit jako SPAM
IP: 89.102.236.–
gna
~ Anonymní uživatel
1891 příspěvků
17. 9. 2020   #5
-
0
-

Parametry z URL jsou v poli $_GET, testovat jejich přítomnost můžeš funkci isset a v SQL můžeš filtrovat pomocí WHERE.

Nezkoušel jsem to, ale takhle nějak by to mohlo chodit. 

if (isset($_GET["id"])) {
	$stmt = $conn->prepare("SELECT nazev, datum, text, img FROM clanky WHERE id = ?");
	$stmt->bind_param("i", $_GET["id"]);
	$stmt->execute();
	$result = $stmt->get_result();
} else {
	$sql = "SELECT nazev, datum, text, img FROM clanky ORDER BY nazev";
	$result = $conn->query($sql)
}
Nahlásit jako SPAM
IP: 213.211.51.–
A. H.
~ Anonymní uživatel
8 příspěvků
19. 9. 2020   #6
-
0
-

#5 gna
Děkuji moc! Tento kód opravdu funguje! 

Zde dávám komplet kód mé upravené stránky, pokud by někdo také potřeboval  :

 Funguje, pokud zadáte výše zmiňovanou adresu, tedy např.: www.http/…z/clanek.php?id=3.

	<?php
	include ("login.php");
	$conn = new mysqli($server, $name, $password, $database);

	if (isset($_GET["id"])) {
	$stmt = $conn->prepare("SELECT nazev, datum, text, img1 FROM clanky WHERE id = ?");
	$stmt->bind_param("i", $_GET["id"]);
	$stmt->execute();
	$result = $stmt->get_result();
	} else {
	$sql = "SELECT nazev, datum, text, img1 FROM clanky ORDER BY nazev";
	$result = $conn->query($sql);
	}

	if ($result->num_rows > 0) {
	  while($row = $result->fetch_assoc()) {
$obrazek = $row["img1"];
	    $nazev = $row["nazev"];
	    echo '<h1 style="line-height: 2.5; font-size: 42px">' . $row["nazev"] . '</h1>';
	    echo '<h2>' ."Datum: ". $row["datum"]. '</h2>';
	    echo '<h4>' ."Text článku: ". $row["text"]. '</h2>';
        echo "<img src=\"Obrazky/$obrazek\"/ name=$nazev width='1536' height='864' > <br>";
	  }
	} else {
	  echo "0 results";
	}
	$conn->close();
	?>

Ještě jednou ti "gna" moc děkuji za pomoc! Velmi si mi usnadnil moji práci! 

Nahlásit jako SPAM
IP: 89.102.236.–
A. H.
~ Anonymní uživatel
8 příspěvků
28. 9. 2020   #7
-
0
-

#6 A. H.
Promiňte, že zase otravuji, ale potřeboval bych ještě pomoc.

Nevím totiž, jak otevřít záznam z DB pomocí sloupce nazev.

Jak jsem psal v minulé zprávě, otevření podle ID fungovala perfektně.

Nyní jsem ale upravil tuto část kódu z podoby:

	if (isset($_GET["id"])) {
	$stmt = $conn->prepare("SELECT nazev, datum, text, img1 FROM clanky WHERE id = ?");
	$stmt->bind_param("i", $_GET["id"]);

na tuto podobu:

	if (isset($_GET["nazev"])) {
	$stmt = $conn->prepare("SELECT nazev, datum, text, img1 FROM clanky WHERE nazev = ?");
	$stmt->bind_param("i", $_GET["nazev"]);

Přešel jsem na stránku http://www.http//www.mojezpravyabcd987456.cz/clanek.php?nazev=Pokus a na stránce se zobrazily všechny články, ne pouze ten žádaný s názvem "Pokus". (V databázi jsem měl záznam s názvem "Pokus".) 

Mohl by mi prosím někdo poradit, co dělám špatně. Zkoušel jsem už i něco hledat, ale nic použitelného jsem na netu nenašel (:

Děkuji moc!

Nahlásit jako SPAM
IP: 89.102.236.–
gna
~ Anonymní uživatel
1891 příspěvků
28. 9. 2020   #8
-
0
-

První parametr bind_param určuje typ dalších parametrů. Teď to bude "s".

$stmt->bind_param("s", $_GET["nazev"]);
Nahlásit jako SPAM
IP: 213.211.51.–
A. H.
~ Anonymní uživatel
8 příspěvků
28. 9. 2020   #9
-
0
-

#8 gna
Jé, díky!

Opět bezchybná rada, fungovalo ihned!

A díky za odkaz. Podle tabulky na té stránce mi konečně došlo, co ty písmena("s", "i"...) znamenají. Předtím jsem si to vůbec nespojil .

Nahlásit jako SPAM
IP: 89.102.236.–
Kit+15
Guru
28. 9. 2020   #10
-
0
-

#9 A. H.
Obvykle stačí nahlédnout do manuálu, Google v něm také umí skvěle hledat.

Nahlásit jako SPAM
IP: 213.175.43.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý