Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Márcio Lima

O abc do PHP e AJAX

Mensagens Recomendadas

Márcio Lima

Viva!

Nos últimos tempos tenho me aventurado em criar algumas análises e formulários a uma base de dados em MS SQL recorrendo a PHP.

Salvaguardo que os meus conhecimentos em HTML e/ou PHC são menos que básicos, contudo, recorrendo alguma pesquisa e tentativa erro, tenho conseguido solucionar alguns problemas.

No entanto, cheguei a um problema ainda não consegui resolver:

Tenho uma página em HTML e PHP que apresenta uma tabela, resultante de um select à minha BD. O meu objectivo agora é, por cada linha da tabela, disponibilizar uma caixa de texto e um botão de forma a actualizar um campo dessa mesma tabela.

<!DOCTYPE html>
<html lang="pt">
<head>
<link rel='icon' href='img/favicon.ico' type='image/x-icon'/ >
  <title>Listagem</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>


<?php
$sql = "select bistamp, nome, obrano, ref, design, qtt, familia from bi (nolock) where qtt<>0 and bostamp='".$_GET['pkno']."'";

include 'dbcon.php';
//Executa QUERY
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
 if( $head = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

echo "
<div class='container'>
  <h2>PackingList - ".$head['obrano']."</h2>
 </div>"; 



 
echo " 
 <div class='container'>

  <p><h5><b>Cliente: </b>".$head['nome']."</h5></p><br>            

  <table class='table table-striped'>";
}


echo "
	<thead>
      <tr>
        
		
        <th>Ref</th>
        <th>Design</th>
		<th>Qtt</th>
		<th>Qtd Stf</th>
	</tr>
	</thead>";
	

	//PRENCHIMENTO DE LINHA
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

  echo "
  <tbody>
      <tr>
        
		
        <td>".$row['ref']."</td>
		<td>".$row['design']."<br><br><b>Familia: </b>".$row['familia']."</td>
		<td>".$row['qtt']."</td>
		<td> 
		<form  name='updphc' method='post' action=''> 
    	<input class='form-control input-md' type='number' id='myqtt2' min='0' max='".$row['qtt']."'><br>
		<button class='btn btn-primary btn-lg' name='btn-".$row['bistamp']."' type='submit' value='".$row['bistamp']."' >Atualiza</button><br><br>
		</form>
		
		
			
		</td>
        
      </tr>
  </tbody>
  ";
 
}
sqlsrv_free_stmt( $stmt);

// Close the connection.
sqlsrv_close( $conn );

?>

</form>  
</table>
</div>

<script>
$(document).ready(function() {
   var delay = 2000;
   $('.btn-primary').click(function(e){
   e.preventDefault();
   var myqtt2 = $('#myqtt2').val();
   if(myqtt2 == ''){
   alert("Quandidade Vazia");
   $('#myqtt2').focus();
   return false;
   }
	
					
   $.ajax
   ({
   type: "POST",
   url: "query.php",
   data: { myqtt2: myqtt2 },
 	 
   success: function(data)
   {
   setTimeout(function() {
   $('.message_box').html(data);
   }, delay);
   }
   });
   });
			
});
</script>

</body>
</html>

O problema é que com este código actual apenas me é considerado a caixa de texto da primeira linha.

Sinto me perdido neste momento.

Alguem me pode ajudar sobre isto?

Um abraço,

 

Márcio LIma

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cerzedelo

A primeira questão é,  está a fazer a leitura do campo das qtt, quando está a carregar a página, através do documento ready. Isto é, a leitura das qtt é feita quando a página é carregada pelo browser e não quando clica no botão.

Deve só despoletar a acção de actualização, quando depois de actualizar o campo, clicar no botão actualizar, para isso, deve dar ao referido botão o evento click.

$( "#actualizar" ).click(function() {
  alert( "O botão actualizar foi premido." );
});

A tag actualizar seria o id do botão actualizar.

Depois existe a segunda fase da questão, é a de saber qual é a linha que está a actualizar, isto se quiser fazer o update na base de dados. E para isso, convinha ter um elemento identificativo, um id, por cada uma das linhas, coisa que aparentemente a sua tabela não mostra. Neste caso, nem precisa de um botão, basta clicar na linha da tabela para obter o resultado.

${'#tabela tr td').click(function(){
    var qt = $(this).attr('qtt');
    alert(qt);
    
});

 

Por último, se não quiser estar a redescobrir a roda, e facilitar o trabalho, pode utilizar  DataTables, que lhe permite manipular as tabelas em html.

Ver exemplo em : https://editor.datatables.net/examples/inline-editing/simple

 

  • Voto 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Márcio Lima

Viva

 

Obrigado pela ajuda. Parece-me lógico.

O problema aqui é precisar de resolver esta situação da actualização e não ter as noções básicas de como isto funciona.

Relativamente à identificação do actualizar, a minha ideia seria introduzir a primarykey da linha no id do botão e/ou caixa actualizar e utilizar esse código para a query.

Contudo a dificuldades também passa de: como passar uma variavel do PHP para o script ajax naquele preciso momento.

 

Obrigado pela ajuda.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.