Ir para conteúdo
Jack Oliveira

Erro ao Atualizar

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
foreach ($_POST['fq_title'] as $value) {
    $arr1[] = $value;// agora crie um array novo e coloque $value em um novo índice
}

// 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,
   você deveria imprimir o valor de $_POST.
   Isso pode ser feito com print_r ou var_dump, como fiz mais abaixo.
*/
$_POST = [
    'fq_title' => [
        'valor1',
        'valor2',
        'valor3',
        'valor4',
    ]
];

// Aqui inseri o trecho citado na explicação anterior.
foreach ( $_POST['fq_title'] as $value ) {
    $arr1[] = $value;
}

// E aqui exibi as duas informações para comparar o resultado
echo '<pre>';
print_r( $arr1 );
print_r( $_POST[ 'fq_title' ] );
echo '</pre>';

// Veja que o resultado é exatamente igual para ambos os casos:

/**

<pre>Array
(
    [0] => valor1
    [1] => valor2
    [2] => valor3
    [3] => valor4
)
Array
(
    [0] => valor1
    [1] => valor2
    [2] => valor3
    [3] => valor4
)
</pre>

 * /

 

Não analisei o bloco (for) que aparece depois desses foreach, mas me parece que ele poderia ser um pouco mais simples também.

 

Mas o ponto principal do problema, pelo que consigo perceber, está justamente no seu formulário. Perceba que seu input multivalorado fq_title recebe esse atributo:

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:

<input type="text" name="item[0][fq_title]" />
<input type="text" name="item[0][fq_content]" />

<input type="text" name="item[1][fq_title]" />
<input type="text" name="item[1][fq_content]" />

<input type="text" name="item[2][fq_title]" />
<input type="text" name="item[2][fq_content]" />

Talvez assim seja mais prática a manipulação da lógica no PHP depois.

 

Se eu não estou enganado ou entendi mal a questão, acredito que corrigindo esse aspecto você será capaz de progredir na solução do problema.

Caso ainda não consiga, peço que traga-nos as mensagens de erro e informações adicionais. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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