Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

renatosilva94

Mostrar serviços somente da empresa selecionada

Recommended Posts

Olá pessoal, meu terceiro post no forum e quero aproveitar pra agradecer a todos que me ajudam e mais uma vez, outra duvida, estou na reta final do meu tcc.

 

ok, lá vai.

 

estou cadastrando os serviços normalmente, porém na hora de lista-los independente da empresa ele mostra todos, não sei se é algo com inner join.

Minha tabela servicos tem

idservico, valor, descricao, titulo

Minha classe ServicoDAL tem

 

public function listarServicos() {

include 'Classes/incConecta.php';
$str = "SELECT * FROM servico";
$query = mysqli_query($conecta, $str);
if ($query) {
return $query;
} else {
return false;
}
}

 

 

agora onde os serviços são listados.

 

<table class="listas" border="2px" bordercolor="#FF0000">

<thead>
<tr>
<td>Titulo</td>
<td>Valor</td>
<td>Descrição</td>
</tr>
</thead>
<tbody>
<?php
include 'Classes/DAL/ServicoDAL.php';
function listarServicos(){
$objDAL = new ServicoDAL();
$sql = $objDAL->listarServicos();
return $sql;
}
$sql = listarServicos();
while ($linha = mysqli_fetch_array($sql)){
?>
<tr>
<td class="codigo">
<?php echo $linha['titulo']; ?>
</td>
<td>
<?php echo $linha['valor']; ?>
</td>
<td>
<?php echo $linha['descricao']; ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>

 

 

Alguém sabe como proceder para quando eu for na página daquela empresa eu ver os serviços que ELA cadastrou?

Obrigado desde já :) #melhorforum

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira coisa, você tem que colocar um identificador da empresa nessa sua tabela dos serviços, ex: idempresa

 

Dai você faz a busca filtrando pelo ID da empresa que deseja

 

Que ela vá relacionar o serviço para aquela empresa, nesse tipo ele fica um tipo de serviço para uma unica empresa, agora se você quer cadastrar o mesmo serviços para várias empresas diferentes você deve criar uma tabela de relacionamento entre a de serviço e empresa

 

tipo assim

 

TB_SERVICOS

idservico, valor, descricao, titulo

 

TB_EMPRESA

idempresa, nome_da_empresa

 

TB_SERVICO_EMPRESA (essa seria a tabela de relacionamento)

idrelacionamente, idempresa, idservico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Renato.

 

Você deve enviar para a consulta o código da empresa que deseje consultar os serviços e adicionar tanto na estrutura de sua tabela de serviços quanto na query de consulta esta informação, conforme abaixo:

public function listarServicos($CodigoEmpresa) {
        
    include 'Classes/incConecta.php';
        
    $str = "SELECT * FROM servico WHERE codigo_empresa = {$CodigoEmpresa}";
        
    $query = mysqli_query($conecta, $str);
        
    if ($query) {
        return $query;
    } 
    else {
        return false;
    }    
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira coisa, você tem que colocar um identificador da empresa nessa sua tabela dos serviços, ex: idempresa

 

Dai você faz a busca filtrando pelo ID da empresa que deseja

 

Que ela vá relacionar o serviço para aquela empresa, nesse tipo ele fica um tipo de serviço para uma unica empresa, agora se você quer cadastrar o mesmo serviços para várias empresas diferentes você deve criar uma tabela de relacionamento entre a de serviço e empresa

 

tipo assim

 

TB_SERVICOS

idservico, valor, descricao, titulo

 

TB_EMPRESA

idempresa, nome_da_empresa

 

TB_SERVICO_EMPRESA (essa seria a tabela de relacionamento)

idrelacionamente, idempresa, idservico

Você diz inserir nela um idusuario(é onde são gravadas as empresas) relacionando com idusuario da tabela usuario? (chave estrangeira)?

 

ou seja

 

minha tabela servico ficaria

 

idservico

titulo

descricao

valor

idusuario(chave estrangeira da da tabela usuario)?

 

Olá Renato.

 

Você deve enviar para a consulta o código da empresa que deseje consultar os serviços e adicionar tanto na estrutura de sua tabela de serviços quanto na query de consulta esta informação, conforme abaixo:

 

 

public function listarServicos($CodigoEmpresa) {
        
    include 'Classes/incConecta.php';
        
    $str = "SELECT * FROM servico WHERE codigo_empresa = {$CodigoEmpresa}";
        
    $query = mysqli_query($conecta, $str);
        
    if ($query) {
        return $query;
    } 
    else {
        return false;
    }    
}

seria mais ou menos oque o wolfphw disse não é? porém ainda tenho que fazer a criação da chave estrangeira e ajustar na pagina que vai exibir os resultados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renato, em sua aplicação, um serviço pode ser fornecido por mais de uma empresa ou cada serviço é exclusivo de uma empresa X ?

Poste sua estrutura de dados atual para analisarmos melhor qual solução é mais viável para você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Renato, em sua aplicação, um serviço pode ser fornecido por mais de uma empresa ou cada serviço é exclusivo de uma empresa X ?

 

Poste sua estrutura de dados atual para analisarmos melhor qual solução é mais viável para você.

 

estrutura.png

 

está e a estrutura a qual o meu professor me ajudou a fazer, estou desenvolvendo o tcc a uma media de 5 meses e o tempo é curto para explorar tudo do php e do mysql ( o php começou faz mais ou menos 1 mês), eu não entendi muito bem os relacionamentos de tabela.

 

<?php

header ('Content-type: text/html; charset=UTF-8');
include '../security.php';
$titulo = XSS($_POST['titulo']);
$descricao = XSS($_POST ['descricao']);
$valor = XSS($_POST ['valor']);
if (empty($titulo) || empty($descricao) || empty($valor)) {
echo '<script>'
.' alert ("Por favor, preencha todos os campos."); '
.' history.go(-1);'
.'</script>';
} else {
include 'TO/ServicoTO.php';
$objTO = new ServicoTO();
$objTO->setTitulo($titulo);
$objTO->setDescricao($descricao);
$objTO->setValor($valor);
include 'DAL/ServicoDAL.php';
$objDAL = new ServicoDAL ();
if ($objDAL->salvaServico($objTO)){
echo '<script>'
.' alert ("Serviço Cadastrado"); '
.' location.href = "../pagInicial.php";'
.'</script>';
}else{
echo '<script>'
.' alert ("Erro ao realizar o Cadastro."/); '
.' history.go(-1);'
.'</script>';
}
}

Isto é a parte logica do cadastro de serviços, ele cadastra normal, não sei se falta algo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua tabela "empresa_servico" tem algum registro ?

Caso o relacionamento do serviço estiver nesta tabela, basta trazer o id de sua empresa no arquivo e executar a seguinte query:

$sSql = "SELECT servico.idservico,
                servico.valor,
                servico.descricao,
                servico.titulo
           FROM servico
           JOIN empresa_servico
             ON empresa_servico.idservico = servico.idservico
            AND empresa_servico.idusuario = ".$usuario
        

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

A sua tabela "empresa_servico" tem algum registro ?

 

Caso o relacionamento do serviço estiver nesta tabela, basta trazer o id de sua empresa no arquivo e executar a seguinte query:

$sSql = "SELECT servico.idservico,
                servico.valor,
                servico.descricao,
                servico.titulo
           FROM servico
           JOIN empresa_servico
             ON empresa_servico.idservico = servico.idservico
            AND empresa_servico.idusuario = ".$usuario
        

não cara, ela não possui nenhum registro :(

e esse é meu problema, não explicaram como vai ser inserido nessas tabelas e eu to meio apavorado entendeu? adsdhuduhsaddasdsayg esse é o famoso TCC, e eu fiquei com todo back-end :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Você deve fazer um relacionamento entre uma empresa de um serviço para assim listar somente os serviços de uma empresa X.

sim cara, na realidade serviços elas vão cadastrar pra posteriormente eu pode colocar eles em um carrinho, mas eu não sei COMO fazer isso, eu vou fazer essas alterações no

 

 

public function listarServicos() {

include 'Classes/incConecta.php';
$str = "SELECT * FROM servico ";
$query = mysqli_query($conecta, $str);
if ($query) {
return $query;
} else {
return false;
}
}

 

e se for, onde?

 

e posteriormente

 

 

<table class="listas" border="2px" bordercolor="#FF0000">

<thead>
<tr>
<td>Titulo</td>
<td>Valor</td>
<td>Descrição</td>
</tr>
</thead>
<tbody>
<?php
include 'Classes/DAL/ServicoDAL.php';
function listarServicos(){
$objDAL = new ServicoDAL();
$sql = $objDAL->listarServicos();
return $sql;
}
$sql = listarServicos();
while ($linha = mysqli_fetch_array($sql)){
?>
<tr>
<td class="codigo">
<?php echo $linha['titulo']; ?>
</td>
<td>
<?php echo $linha['valor']; ?>
</td>
<td>
<?php echo $linha['descricao']; ?>
</td>
</tr>
<?php
}
?>
</tbody>
</table>

 

sei que eu sou meio "noob" mas é que o tempo é curto demais, ando acessando diariamente esse forum e não tem um dia que eu não chegue com duvidas na aula...

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim cara, na realidade serviços elas vão cadastrar pra posteriormente eu pode colocar eles em um carrinho, mas eu não sei COMO fazer isso, eu vou fazer essas alterações no

 

 

e se for, onde?

 

e posteriormente

 

 

sei que eu sou meio "noob" mas é que o tempo é curto demais, ando acessando diariamente esse forum e não tem um dia que eu não chegue com duvidas na aula...

 

Sim, entendo a complicação, você precisa, além de ter o cadastro de empresa e serviço, ter uma tela de cadastro para fazer o relacionamento de um serviço X a uma empresa para assim dizer que, por exemplo, o serviço "1 - Capinar pasto" é fornecido pela empresa "98 - Empresa do zé"

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, entendo a complicação, você precisa, além de ter o cadastro de empresa e serviço, ter uma tela de cadastro para fazer o relacionamento de um serviço X a uma empresa para assim dizer que, por exemplo, o serviço "1 - Capinar pasto" é fornecido pela empresa "98 - Empresa do zé"

segundo meu modelo do banco seria a tabela empresa_servico contendo os campos idservico e idusuario, então eu teria que alterar algo no código que salva os serviços?

 

 

<?php

header ('Content-type: text/html; charset=UTF-8');
include '../security.php';
$titulo = XSS($_POST['titulo']);
$descricao = XSS($_POST ['descricao']);
$valor = XSS($_POST ['valor']);
if (empty($titulo) || empty($descricao) || empty($valor)) {
echo '<script>'
.' alert ("Por favor, preencha todos os campos."); '
.' history.go(-1);'
.'</script>';
} else {
include 'TO/ServicoTO.php';
$objTO = new ServicoTO();
$objTO->setTitulo($titulo);
$objTO->setDescricao($descricao);
$objTO->setValor($valor);
include 'DAL/ServicoDAL.php';
$objDAL = new ServicoDAL ();
if ($objDAL->salvaServico($objTO)){
echo '<script>'
.' alert ("Serviço Cadastrado"); '
.' location.href = "../pagInicial.php";'
.'</script>';
}else{
echo '<script>'
.' alert ("Erro ao realizar o Cadastro."/); '
.' history.go(-1);'
.'</script>';
}
}

esse é o codigo que salva o serviço e esses a classe DAL do servico

 

<?php

class ServicoDal {
public function __construct() {}
public function salvaServico($obj) {
include 'incConecta.php';
$str = 'INSERT INTO servico(valor, descricao, titulo) VALUES ('
. '' . $obj->getValor() . ','
. '"' . $obj->getDescricao() . '",'
. '"' . $obj->getTitulo() . '")';
$query = mysqli_query($conecta, $str);
if ($query) {
return true;
} else {
return false;
}
}
public function listarServicos() {
include 'Classes/incConecta.php';
$str = "SELECT * FROM servico ";
$query = mysqli_query($conecta, $str);
if ($query) {
return $query;
} else {
return false;
}
}
}

eu teria que mudar algo quando ele salvar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim brother, cria uma nova tela chamada "Serviços empresa" a qual você irá cadastrar o idservico e o idusuario e salvá-los na tabela empresa_servico, pois você tem o cadastro da empresa e o cadastro do serviço, porém, conforme a sua estrutura, o seu cadastro de serviço é global, ou seja, eu posso cadastrar um serviço X e ele pode ser fornecido por N empresas, por isso o relacionamento foi feito em outra tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

meio confuso essa tela, ela vai salvar automaticamente depois que eu gravar os serviços? e seria alguma coisa EmpresaServicoDAL

 

 

<?php

class ServicoDal {
public function __construct() {}
public function salvaServicoEmpresa($obj) {
include 'incConecta.php';
$str = 'INSERT INTO empresa_servico(idservico, idusuario) VALUES ('
. '' . $obj->getIdUsuario() . ','
. '"' . $obj->getIdServico() . '")';
$query = mysqli_query($conecta, $str);
if ($query) {
return true;
} else {
return false;
}
}

depois que eu gravasse o serviço ele ia redirecionar pra essa página pra poder gravar? novamente desculpa ser noob :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

meio confuso essa tela, ela vai salvar automaticamente depois que eu gravar os serviços? e seria alguma coisa EmpresaServicoDAL

 

depois que eu gravasse o serviço ele ia redirecionar pra essa página pra poder gravar? novamente desculpa ser noob :/

 

Esqueça o cadastro de serviço, o cadastro de serviço é responsável por alimentar somente a tabela "servico".

Pense comigo, você abre por exemplo uma conta conjunta com seu amigo Robervaldo em um banco, conta 123 vamos citar, ela é inserida na tabela de contas. Após isso, você deve dizer que a conta 123 pertence tanto a você quanto ao seu amigo, para que ambos a utilizem, esta informação deve ser inserida em uma outra tabela, fazendo uma relação 1 para N, onde 1 seria a sua conta e N seria os beneficiários desta.

 

Portanto, você insere o seu serviço normalmente e dentro de seu sistema você deve ter uma outra tela de relacionamento de 1 para N, onde 1 é a sua empresa e N são os seus serviços, desta forma, o serviço de código 9 por exemplo pode estar relacionado tanto com a empresa de código 1 quando a empresa de código 7.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Esqueça o cadastro de serviço, o cadastro de serviço é responsável por alimentar somente a tabela "servico".

Pense comigo, você abre por exemplo uma conta conjunta com seu amigo Robervaldo em um banco, conta 123 vamos citar, ela é inserida na tabela de contas. Após isso, você deve dizer que a conta 123 pertence tanto a você quanto ao seu amigo, para que ambos a utilizem, esta informação deve ser inserida em uma outra tabela, fazendo uma relação 1 para N, onde 1 seria a sua conta e N seria os beneficiários desta.

 

Portanto, você insere o seu serviço normalmente e dentro de seu sistema você deve ter uma outra tela de relacionamento de 1 para N, onde 1 é a sua empresa e N são os seus serviços, desta forma, o serviço de código 9 por exemplo pode estar relacionado tanto com a empresa de código 1 quando a empresa de código 7.

Com a tua explicação e um modelo que o meu professor me passou entendi perfeitamente o relacionamento das tabelas, obrigado cara :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Esqueça o cadastro de serviço, o cadastro de serviço é responsável por alimentar somente a tabela "servico".

Pense comigo, você abre por exemplo uma conta conjunta com seu amigo Robervaldo em um banco, conta 123 vamos citar, ela é inserida na tabela de contas. Após isso, você deve dizer que a conta 123 pertence tanto a você quanto ao seu amigo, para que ambos a utilizem, esta informação deve ser inserida em uma outra tabela, fazendo uma relação 1 para N, onde 1 seria a sua conta e N seria os beneficiários desta.

 

Portanto, você insere o seu serviço normalmente e dentro de seu sistema você deve ter uma outra tela de relacionamento de 1 para N, onde 1 é a sua empresa e N são os seus serviços, desta forma, o serviço de código 9 por exemplo pode estar relacionado tanto com a empresa de código 1 quando a empresa de código 7.

hey cara, eu tinha marcado como resolvido pois entendi perfeitamente a lógica, porém tem uma coisa que não to conseguindo... armazenar o id da empresa que ta efetuando o cadastro, esse é meu código agora, falta só isso :)

 

 

<?php

header ('Content-type: text/html; charset=UTF-8');
include '../security.php';
$titulo = XSS($_POST['titulo']);
$descricao = XSS($_POST ['descricao']);
$valor = XSS($_POST ['valor']);
if (empty($titulo) || empty($descricao) || empty($valor)) {
echo '<script>'
.' alert ("Por favor, preencha todos os campos."); '
.' history.go(-1);'
.'</script>';
} else {
include 'TO/ServicoTO.php';
include 'DAL/ServicoDAL.php';
$objTO = new ServicoTO();
$objTO->setTitulo($titulo);
$objTO->setDescricao($descricao);
$objTO->setValor($valor);
$objDAL = new ServicoDAL ();
$idservico = $objDAL->salvaServico($objTO);
if($idservico > 0){
$idusuario = $_POST['id'];
include 'TO/EmpresaServicoTO.php';
$objESTO = new EmpresaServico();
$objESTO->setIdServico($idservico);
$objESTO->setIdUsuario($idusuario);
include 'DAL/EmpresaServicoDAL.php';
$objESDAL = new EmpresaServicoDAL();
if($objESDAL->salvaEmpresaServico($objESTO)){
echo "<script>"
. " alert('Cadastro realizado com sucesso.');"
. " location.href = '../pagInicial.php';"
. "</script>";
}
}
}

 

sabe como fazer? o modelo que eu tenho ele pega o valor de um SELECT e nesse eu preciso pegar o ID da sessão... abraço e valeu :)

Traduzindo

 

$idusuario = $_POST['id'];
Notice: Undefined index: id in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\CiaDoEventoV4\Classes\cadastroServico2.php on line 39
preciso somente recuperar o id pra posteriormente poder armazenar ele :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

hey cara, eu tinha marcado como resolvido pois entendi perfeitamente a lógica, porém tem uma coisa que não to conseguindo... armazenar o id da empresa que ta efetuando o cadastro, esse é meu código agora, falta só isso :)

 

 

sabe como fazer? o modelo que eu tenho ele pega o valor de um SELECT e nesse eu preciso pegar o ID da sessão... abraço e valeu :)

Traduzindo

 

$idusuario = $_POST['id'];
Notice: Undefined index: id in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\CiaDoEventoV4\Classes\cadastroServico2.php on line 39
preciso somente recuperar o id pra posteriormente poder armazenar ele :)

 

 

Olá renato.

 

Se você já está recebendo o id da empresa via POST no $_POST['id']; você pode estar armazenando este na sessão (procure sobre sessões em php, $_SESSION['id'], session_start()) ou você pode simplesmente criar um input para que não se perca o envio do id na tela, adicionando esta linha na sua tela de relacionamento

serviço x empresa:

echo "<input type='text' id='id' name='id' value='{$_POST['id']}'>";

Desta forma, o seu ID chega na página via POST, após o submit nela mesma, ele continua sendo enviado via POST devido a existência do input na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá renato.

 

Se você já está recebendo o id da empresa via POST no $_POST['id']; você pode estar armazenando este na sessão (procure sobre sessões em php, $_SESSION['id'], session_start()) ou você pode simplesmente criar um input para que não se perca o envio do id na tela, adicionando esta linha na sua tela de relacionamento

serviço x empresa:

echo "<input type='text' id='id' name='id' value='{$_POST['id']}'>";

Desta forma, o seu ID chega na página via POST, após o submit nela mesma, ele continua sendo enviado via POST devido a existência do input na tela.

Perfeito, consegui por meio do SESSION :)

 

session_start();
$idusuario = $_SESSION['id'];
include 'TO/EmpresaServicoTO.php';
$objESTO = new EmpresaServico();
$objESTO->setIdServico($idservico);
$objESTO->setIdUsuario($idusuario);
valeu ai :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.