Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal boa noite..
Vou tentar explicar aqui o meu problema da melhor forma que der, espero que possam entender...
Amigos eu estou tendo um problema em fazer uma atualização
Bom quando vou cadastrar da sucesso e é gravado normal no banco de dados ate ai esta ok..
Seria o seguinte dentro de um form ele gera linhas ou seja + inputs caso seja preciso entende? Usando javascript´s, quando vou atualizar as informações que esta nas tabelas ou seja
são 3 tabelas
tbl_department
dep_id
nome
news etc....
tbl_department_openning_hour
hou_id
titulo
time
dep_id <-- Aqui onde pega o id da tabela tbl_department
tbl_department_faq
faq_id
titulo
conteudo
dep_id <-- Aqui onde pega tbm o id da tabela tbl_department
Obs: Ele Grava normal no banco de dados, porem quando atualizar que não esta dando certo, e é preciso que seja atualizado todos os input das tabelas tbl_department_faq e tbl_department_openning_hour. Acredito que já entenderam aqui umas das parte que seria preciso.
Bom vou posta uma parte do HTML do FORM para melhor entender o que seria ok!!, Sei que não tem nada a ver com o PHP, mais como tinha dito apenas para melhor entender..
<?php $dep_id = get('EditarItem'); $QueryTblDepartment = DBRead('tbl_department','*',"WHERE dep_id = '{$dep_id}'"); if (is_array($QueryTblDepartment)) { foreach ($QueryTblDepartment as $TblDepartment) {
?>
<form method="post" action="?Atualizar=<?= $TblDepartment['dep_id']; ?>" enctype="multipart/form-data">
<div class="col-md-6">
<div class="form-group">
<label>Titulo:</label>
<input class="form-control" name="dep_name" value="<?= $TblDepartment['dep_name']; ?>" placeholder="Exemplo: Globo City" autocomplete="off" required>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Telefone:</label>
<input class="form-control telefone" name="dep_phone" value="<?= $TblDepartment['dep_phone']; ?>" placeholder="Exemplo: (00) 0000-0000" autocomplete="off">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>WhatsApp:</label>
<input class="form-control whatsapp" name="dep_whatsapp" value="<?= $TblDepartment['dep_whatsapp']; ?>" placeholder="Exemplo: (00) 0.0000-0000" autocomplete="off">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Fax:</label>
<input class="form-control" name="dep_fax" value="<?= $TblDepartment['dep_fax']; ?>" placeholder="Exemplo: (00) 0000-0000" autocomplete="off">
</div>
</div>
<div class="form-group">
<label>Seção de FAQ:</label>
<table id="fqSection" class="table table-bordered table-striped">
<thead>
<tr>
<th style="width:50%;">Titulo</th>
<th>Contente</th>
<th>Ação</th>
</tr>
</thead>
<tbody>
<?php
//Departamento FAQ
$QueryDepartamentoFaq = DBRead('tbl_department_faq','*',"WHERE dep_id='{$dep_id}'"); if (is_array($QueryDepartamentoFaq)) { foreach ($QueryDepartamentoFaq as $Fa) {
$arr_fq_id[] = $Fa['fq_id'];
$arr_fq_title[] = $Fa['fq_title'];
$arr_fq_content[] = $Fa['fq_content'];
}}
if(isset($arr_fq_title)):
for($i=0;$i<count($arr_fq_title);$i++) {
?>
<tr>
<td>
<input autocomplete="off" type="text" class="form-control" style="width:100%" name="fq_title" value="<?= $arr_fq_title[$i]; ?>">
</td>
<td>
<textarea class="form-control" cols="30" rows="10" style="width:100%;height:50px;" name="fq_content"><?= $arr_fq_content[$i]; ?></textarea>
</td>
<td>
<span class="btn btn-danger btn-xs"><a onclick="DeletarItem(<?= $arr_fq_id[$i]; ?>, 'DeletarFaq');" href="#!" style="color: #fff;">Excluir</a></span>
</td>
</tr>
<?php
//}}
}
endif;
?>
</tbody>
</table>
<!-- Aqui para criar novos input para serem gravado no banco caso seja preciso -->
<input type="button" class="btn btn-info btn-small" id="btnAddFaq" value="+ Adicionar linha" style="margin-bottom:10px;">
</div>
<center><hr>
<button class="btn btn-primary">Atualizar</button>
<br><br>
</center>
</div>
</form>
<?php } } ?>
Bom ai esta apenas um pouco do form tem mais coisa que seria igual o que preciso resolver
Agora a parte do **PHP **que preciso resolver, vou posta apenas uma parte para poder entender tbm
<?php // Atualizar Item de Departamento
if (isset($_GET['Atualizar'])) {
$dep_id = get('Atualizar');
$fq_empty = 0;
if( !empty($_POST['fq_title']) && !empty($_POST['fq_content']) ) {
$fq_empty = 1;
foreach ($_POST['fq_title'] as $value) { //Sempre mostra o erro nesta linha
$arr1[] = $value;
}
foreach ($_POST['fq_content'] as $value) { //Sempre mostra o erro nesta linha
$arr2[] = $value;
}
$j=0;
for($i=0;$i<count($arr1);$i++) { //Sempre mostra o erro nesta linha
if($arr1[$i]=='' && $arr2[$i]=='') {continue;}
else {
$new_arr1[$j] = $arr1[$i];
$new_arr2[$j] = $arr2[$i];
$j++;
}
}
}
$AtualizarDepartment = array(
'dep_name' => post('dep_name'),
'dep_slug' => UrlAmigavel(post('dep_name')),
'dep_detail' => post('dep_detail'),
'dep_address' => post('dep_address'),
'dep_phone' => post('dep_phone'),
'dep_whatsapp' => post('dep_whatsapp'),
'dep_fax' => post('dep_fax'),
'dep_email' => post('dep_email'),
'meta_title' => post('dep_name'),
'meta_keyword' => post('meta_keyword'),
'meta_description' => LimitarTexto(post('dep_detail'),'200','...')
);
$QueryTblDepartment = DBUpdate('tbl_department', $AtualizarDepartment, "dep_id = '{$dep_id}'", TRUE);
if ($QueryTblDepartment != 0) {
Redireciona('?sucesso&Department');
} else {
Redireciona('?erro&Department');
}
// Atualizar tbl_department_faq
if($fq_empty == 1) {
for($i=0;$i<count($new_arr1);$i++) {
$TblDepartmentFaq = array(
'fq_title' => $new_arr1[$i],
'fq_content' => $new_arr2[$i],
'dep_id' => $dep_id
);
$QueryTblDepartmentFaq = DBUpdate('tbl_department_faq', $TblDepartmentFaq, "dep_id = '{$dep_id}'");
}
}
if ($QueryTblDepartmentFaq != 0) {
Redireciona('?sucesso&AtualizarFaq');
} else {
Redireciona('?erro&AtualizarFaq');
}
// Criar Novo input para tbl_department_faq
if($fq_empty == 1) {
for($i=0;$i<count($new_arr1);$i++) {
$SqlFaq = array(
'fq_title' => $new_arr1[$i],
'fq_content' => $new_arr2[$i],
'dep_id' => $QueryTblDepartment
);
$QueryFaq = DBRead('tbl_department_faq', $SqlFaq);
}
}
if ($QueryFaq != 0) {
Redireciona('?sucesso&Faq');
} else {
Redireciona('?erro&Faq');
}
}
Neste caso ao mesmo tempo que teria que atualizar a
**tbl_department_faq**
faq_id
titulo
conteudo
dep_id <-- Aqui onde pega tbm o id da tabela **tbl_department**
Ele precisa grava caso seja preciso criar nova linha ou seja criar novo input para atualizar junto entende?
Pessoal espero que eu tenha sido bem objetivo aqui para que possam entender....
Desde já agradeçoÉ importante observar ainda que se sua intenção é atualizar os registros, o PHP deverá ter acesso aos IDs de cada uma dessas linhas, então no lugar de item[0], item[1], item[2], seria item[id_do_registro][fq_title].
Em casos como esse é comum querermos passar informações de forma transparente (sem conhecimento do usuário), e para isso podemos contar com os campos hidden.
Não acho que seja necessário no seu caso, mas dê uma olhada também: https://www.w3schools.com/tags/att_input_type_hidden.asp
Ola Matheus Tavares Boa noite, obrigado pela resposta..
Então fiz assim tbm e não deu certo....
>
Em 21/05/2021 at 10:20, Matheus Tavares disse:
É importante observar ainda que se sua intenção é atualizar os registros, o PHP deverá ter acesso aos IDs de cada uma dessas linhas, então no lugar de item[0], item[1], item[2], seria item[id_do_registro][fq_title].
Em casos como esse é comum querermos passar informações de forma transparente (sem conhecimento do usuário), e para isso podemos contar com os campos hidden.
Não acho que seja necessário no seu caso, mas dê uma olhada também: https://www.w3schools.com/tags/att_input_type_hidden.asp
Nesta parte se tu observar no form que mostrei ira ver como fiz para chamar ou seja tem os id´s relacionado a cada
Ex:
<?php
//Departamento FAQ
$QueryDepartamentoFaq = DBRead('tbl_department_faq','*',"WHERE dep_id='{$dep_id}'"); if (is_array($QueryDepartamentoFaq)) { foreach ($QueryDepartamentoFaq as $Fa) {
$arr_fq_id[] = $Fa['fq_id'];
$arr_fq_title[] = $Fa['fq_title'];
$arr_fq_content[] = $Fa['fq_content'];
}}
if(isset($arr_fq_title)):
for($i=0;$i<count($arr_fq_title);$i++) {
?>
<tr>
<td>
<input autocomplete="off" type="text" class="form-control" style="width:100%" name="fq_title" value="<?= $arr_fq_title[$i]; ?>">
</td>
<td>
<textarea class="form-control" cols="30" rows="10" style="width:100%;height:50px;" name="fq_content"><?= $arr_fq_content[$i]; ?></textarea>
</td>
<td>
<span class="btn btn-danger btn-xs"><a onclick="DeletarItem(<?= $arr_fq_id[$i]; ?>, 'DeletarFaq');" href="#!" style="color: #fff;">Excluir</a></span>
</td>
</tr>
<?php
//}}
}
endif;
?>
**Aqui onde esta ****"WHERE dep_id='****{$dep_id}****' **nesta parte ele pega o ID da pagina que esta sendo editando {$dep_id}
Entende??
Olá amigo, tudo bem?
Primeiro vamos analisar um trecho do seu código:
// para cada item dentro do array fq_title, me dê seu valor através da var $value
// Percebe que esse trecho é redundante?
Agora veja esse exemplo:
<?php
/* Isso é o que você está esperando do Form
E para ter certeza de que você está recebendo um valor parecido à esse,
*/
// Aqui inseri o trecho citado na explicação anterior.
// E aqui exibi as duas informações para comparar o resultado
// Veja que o resultado é exatamente igual para ambos os casos:
/**
<pre>Array
(
Array
(
name="fq_title"
Se enviamos arrays ao PHP, devemos enviar nesse padrão:
name="fq_title[]"
Outra sugestão que me vem à cabeça é aprimorar a indexação das informações, com algo assim: