Jump to content
amando96

Esclarecer umas dúvidas que tenho sobre como guardar dados numa tabela.

Recommended Posts

amando96

Boas, tenho usado ficheiros de texto para guardar posts do meu site, funciona 5*, mas resolvi mudar tudo para DBs.

É assim, não sei bem como guardar os posts, e como marcá-los para saber quem qual página fazer display.

Tenho uma home page, um blog, uma sidebar, e várias páginas de tutoriais/projectos.

A minha ideia é passar a ter só uma página, que depois consoante o que peço faz display ou de um tutorial ou de um projecto etc.

Não percebo muito de bases de dados, aliás vou ler agora umas coisas, até lá posso esclarecer-me a mim mesmo.


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

A minha ideia é passar a ter só uma página, que depois consoante o que peço faz display ou de um tutorial ou de um projecto etc.

Na minha opinião não é boa ideia fazer dessa maneira. O melhor é separar por "temas".

Tomando, por exemplo, o phpbb. O phpbb separa o post, do viewtopic, do index, etc... Na minha opinião é a melhor maneira de fazer quando se faz com PHP. No entanto o SMF usa a maneira que falas e funciona bem.

Essa parte de se pedir por variáveis GET a página. É um procedimento de usar o include ou o require (a diferença é só no que acontece quando a página q procuras não existe).

Para evitar aceder a páginas que não queiras que o utilizador aceda, podes sempre usar o Switch e no default do Switch meteres uma mensagem de erro.

Para a parte da base de dados já é muito complicado ajudar-te sem obter mais informação sobre como é que o teu site funciona.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
amando96

Como o site funciona, como assim? estou a refazer tudo... mas onde meto os posts tenho assim:

weu38.png

O "Post to" dá-me a opção de postar no blog, na homepage ou na sidebar que está na home page.

E não tinha pensado em usar switch com default... tinha aqui uma carrada de ifs  ;)

Depois ainda vou adicionar outra ferramente que me deixa criar, apagr ou editar posts e páginas já existententes.


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

Como o site funciona, como assim?

Como é que escreveste o código. Há várias maneiras de fazer a mesma coisa em programação. E, para te ajudar, preciso de saber cmo é que tu fizeste.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
amando96

Ainda não fiz nada para guardar os dados nas DBs.


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

então o q é q tens para fazer com os ficheiros? (é para usar para te ajudar a transitar para uma DB)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
amando96

Tenho a imagem acima que recebe a localização do post(home page, blog, sidebar...), o título do post, e o post.

Depois vai para parse_posts.php que tem uns ifs para determinar onde guardar o post conforme a localização escolhida, e depois guarda o post no ficheiro de texto certo.

(faço uma table para cada localização? ou uma coluna por página chega?)

Depois na home page tenho um bocado de php que chama só esse ficheiro, atribui o seu valor a uma variável e passa-o por um str_replace() para trocar o BBcode para HTML,  e depois faz echo disso tudo, tal como tenho no blog e sidebar.

E é praticamente isso ;)

irei depois fazer algo automatizado que só deixa 10 posts visíveis de cada vez ou algo assim, para não ficar com uma página enorme.

Já tenho uma table feita com username e pass de administrador, também quero contar visitas de cada página, mas isso com um auto_increment vou lá :)


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

Eu estou a falar no código :wallbash:!! Código concreto e não a lógica que usaste para fazer.

ADD: Se bem q a lógica ajuda a perceber melhor o código pouco documentado ;)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
amando96

:dontgetit: peço desculpa.

aqui está:


<?php
session_start();
if(!isset($_SESSION["myusername"]) && !isset($_SESSION["mypassword"])){
	header("location:../index.php");
}
if(isset($_POST["message"]) && isset($_POST["whereto"]) && isset($_POST["Post_title"])){ // se esta variáveis estiverem definidas atribuir a uma session o seu valor
	$_SESSION["message"] = $_POST["message"];
	$_SESSION["whereto"] = $_POST["whereto"];
	$_SESSION["Post_title"] = $_POST["Post_title"];
} else { // senão atribuir o valor da session à session
	$_SESSION["message"] = $_SESSION["message"];
	$_SESSION["whereto"] = $_SESSION["whereto"];
	$_SESSION["Post_title"] = $_SESSION["Post_title"];
}
include "../files/pagetop.php"; // HTML da parte de cima da página
include "../files/BBcode2HTML.php";
if(isset($_POST["count_me"])){
	$_counts = $_POST["count_me"];
} else {
	$_counts = 0;
}
$openingdivs = '<div class="newPost" id="post1"> <div class="postTitle">'; // CSS para fazer display correct do novo post
$closetitlediv = '</div><p>';
$closingdivs = '</p><div id="date">By admin on, ';
$closedatediv = '</div></div>';
$txtFile = "posts.txt"; // O que está a fazer de DB
$fh = fopen($txtFile, 'r'); // em vez de abrir com append abri como read a copiei tudo para uma variável... sei que está mal.
$title = $_SESSION["Post_title"];
$_postmessage = $_SESSION["message"];
$Data = fread($fh, filesize($txtFile)+1);
fclose($fh);
$_arr = array($openingdivs,$title,$closetitlediv,$_postmessage,$closingdivs,date("Y-m-d"),$closedatediv);
$_top = join("",$_arr); // juntar as strings todas.
echo "Message preview:";
echo str_replace($_BBcode,$_HTML,$_top);
?>
<form id="qwerty" action="parse_posts.php" method="post"> <!-- Aqui quero fazer para ver uma preview do post, se clicar no "edit" volta para trás, e se clicar no "post" envia para a DB, abaixo tentei fazer algo que visse quantas vezes estive na página, para isto não postar logo, mas não consegui, já chegou a funcionar, mas não me lmebro como fiz.-->
<input type='button' value='Edit' onclick='window.history.go(-1);'>
<input type="Submit" value="Post">
</form>
<?php
if(!isset($_SESSION["beenhere"])){
	$_SESSION["beenhere"] = 0;
} else if(isset($_SESSION["beenhere"])){
	$_SESSION["beenhere"] = 1;
}

if($_SESSION["beenhere"] == 1){
	$location = $_SESSION["whereto"];
	if($location == "Homepage"){
		if(strlen($_SESSION["message"]) <= 0){
			echo "error, message is unexistent";
		} else {
			$fh = fopen($txtFile, 'w');
			$_array2 = array($_top,$Data);
			fwrite($fh,join($_array2));
			fclose($fh);
			echo "Message posted successfully to the home page!";
			$_SESSION["beenhere"] = 0;
		}		
	} else if($location == "Blog"){
		if(strlen($_SESSION["message"]) <= 0){
			echo "error, message is unexistent";
		} else {
			// send to blog table
			echo "Message posted successfully to the Blog!";
			$_SESSION["beenhere"] = 0;
		}		
	} else if($location == "Sidebar"){
		if(strlen($_SESSION["message"]) <= 0){
			echo "error, message is unexistent";
		} else {
			// send to sidebar table
			echo "Sidebar updated!";
			$_SESSION["beenhere"] = 0;
		}		
	}
}
include "../files/pagebottom.php";
?>

A maior parte deve estar uma bela porcaria, mas o que escolhe onde vai o quê esta no fim, o resto logo faço.


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

Assim fica melhor

:dontgetit: peço desculpa.

aqui está:

<?php
session_start();
if(!isset($_SESSION["myusername"]) && !isset($_SESSION["mypassword"])){
	header("location:../index.php");
}
if(isset($_POST["message"]) && isset($_POST["whereto"]) && isset($_POST["Post_title"])){ // se esta variáveis estiverem definidas atribuir a uma session o seu valor
	$_SESSION["message"] = $_POST["message"];
	$_SESSION["whereto"] = $_POST["whereto"];
	$_SESSION["Post_title"] = $_POST["Post_title"];
} else { // senão atribuir o valor da session à session
	$_SESSION["message"] = $_SESSION["message"];
	$_SESSION["whereto"] = $_SESSION["whereto"];
	$_SESSION["Post_title"] = $_SESSION["Post_title"];
}
include "../files/pagetop.php"; // HTML da parte de cima da página
include "../files/BBcode2HTML.php";
if(isset($_POST["count_me"])){
	$_counts = $_POST["count_me"];
} else {
	$_counts = 0;
}
$openingdivs = '<div class="newPost" id="post1"> <div class="postTitle">'; // CSS para fazer display correct do novo post
$closetitlediv = '</div><p>';
$closingdivs = '</p><div id="date">By admin on, ';
$closedatediv = '</div></div>';
$txtFile = "posts.txt"; // O que está a fazer de DB
$fh = fopen($txtFile, 'r'); // em vez de abrir com append abri como read a copiei tudo para uma variável... sei que está mal.
$title = $_SESSION["Post_title"];
$_postmessage = $_SESSION["message"];
$Data = fread($fh, filesize($txtFile)+1);
fclose($fh);
$_arr = array($openingdivs,$title,$closetitlediv,$_postmessage,$closingdivs,date("Y-m-d"),$closedatediv);
$_top = join("",$_arr); // juntar as strings todas.
echo "Message preview:";
echo str_replace($_BBcode,$_HTML,$_top);
?>
<form id="qwerty" action="parse_posts.php" method="post"> <!-- Aqui quero fazer para ver uma preview do post, se clicar no "edit" volta para trás, e se clicar no "post" envia para a DB, abaixo tentei fazer algo que visse quantas vezes estive na página, para isto não postar logo, mas não consegui, já chegou a funcionar, mas não me lmebro como fiz.-->
<input type='button' value='Edit' onclick='window.history.go(-1);'>
<input type="Submit" value="Post">
</form>
<?php
if(!isset($_SESSION["beenhere"])){
	$_SESSION["beenhere"] = 0;
} else if(isset($_SESSION["beenhere"])){
	$_SESSION["beenhere"] = 1;
}

if($_SESSION["beenhere"] == 1){
	$location = $_SESSION["whereto"];
	if($location == "Homepage"){
		if(strlen($_SESSION["message"]) <= 0){
			echo "error, message is unexistent";
		} else {
			$fh = fopen($txtFile, 'w');
			$_array2 = array($_top,$Data);
			fwrite($fh,join($_array2));
			fclose($fh);
			echo "Message posted successfully to the home page!";
			$_SESSION["beenhere"] = 0;
		}		
	} else if($location == "Blog"){
		if(strlen($_SESSION["message"]) <= 0){
			echo "error, message is unexistent";
		} else {
			// send to blog table
			echo "Message posted successfully to the Blog!";
			$_SESSION["beenhere"] = 0;
		}		
	} else if($location == "Sidebar"){
		if(strlen($_SESSION["message"]) <= 0){
			echo "error, message is unexistent";
		} else {
			// send to sidebar table
			echo "Sidebar updated!";
			$_SESSION["beenhere"] = 0;
		}		
	}
}
include "../files/pagebottom.php";
?>

A maior parte deve estar uma bela porcaria, mas o que escolhe onde vai o quê esta no fim, o resto logo faço.

Cmo já deves saber, aonde tens aí os fwrite é aonde estarão os insert into do sql

e aonde estão os fread é aonde estarão os Select (com todo o resto).

<!-- Aqui quero fazer para ver uma preview do post, se clicar no "edit" volta para trás, e se clicar no "post" envia para a DB, abaixo tentei fazer algo que visse quantas vezes estive na página, para isto não postar logo, mas não consegui, já chegou a funcionar, mas não me lmebro como fiz.-->

Usa Post ids. Com isso podes garantir que não existem repetições. Não gravas se o id já foi usado para gravar um POST.

A tabela q precisas é para gravar aquela info, certo?

$openingdivs,$title,$closetitlediv,$_postmessage,$closingdivs,date("Y-m-d"),$closedatediv

Basta criar colunas para cda um deles :thumbsup:

(Mais mais tarde)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
amando96

Exacto para guardar os posts e titulos.

Estive a fazer uma coisinha pequena que o utilizador pode partilhar links, que depois são escolhidos aleatóriamente para outro utilizador clicar... comecei por uma coisa com poucas colunas, só tem o ID do link e o link em si, depois faço

SELECT * FROM urls WHERE ID = $random

Acho já estar a ver como a tabela dos posts será:

Table name: Posts.

+---+-----------------------+-------------+------------------+----------------+

| ID |Posts_home_page| Titulos_HP| Posts_blog    | Titulos_blog  |

+---+-----------------------+-------------+------------------+----------------+

|  1 |    Post 1                | Titulo 1    | Post 1            | Titulo 1        |

+---+-----------------------+-------------+------------------+----------------+

|  2 |    Post 2                |  Titulo 2  | Post 2            | Titulo 2        |

+---+-----------------------+-------------+------------------+----------------+

Depois para chamar por exemplo o post #2 do blog faço assim?:

SELECT * FROM Posts_blog WHERE ID=2

Será que vale a pena guardar os titulos separadamente?

cumps


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

Será que vale a pena guardar os titulos separadamente?

Não. Guarda ambos juntos. Cda post tem 1 e 1 só título associado. Por isso é melhor ser no mm sítio (na mm linha).


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
amando96

Pensei caso necessitar de editar o título talvez fosse mais fácil tê-lo separado.

Quando chegar a casa farei isto :)

E depois as páginas de por exmeplo os projectos, guardo numa coluna "projectos" e cada projecto tem um ID?


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
amando96

Outra coisa, tenho um ID auto increment, posto na home page três vezes, passa a valer 3, mas posso não ter nenhum post no blog mas ele pensa haver a 3 por ser o mesmo ID  🤔


FACEPALMMOVLW PALMMOVWF FACE

Share this post


Link to post
Share on other sites
brunoais

usar isso para fazer a contagem é mal pensado. Usa a função do sql count()


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.