Ir para conteúdo

POWERED BY:

Arquivado

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

Nilson N

Matrizes em query SQL

Recommended Posts

Quando eu tento inserir essas matrizes no BD, ao invés de inserir o valor delas, aparece no BD: Array[1], Array[12], Array[9]... Onde está o problema?

 

$query = "SELECT CodJogador,Camisa FROM jogadores WHERE CodTime = '$CodTime_A'";

$resultado = mysql_query($query);

while ($linha = mysql_fetch_array($resultado)) {

$CodJogador = $linha['CodJogador'];

$camisa = $linha['Camisa']; //$camisa é um dos índices das matrizes

$sql = "REPLACE INTO `eventos_$competicao` VALUES('$CodJogo','$CodTime_A','$CodJogador','$Presente[1][$camisa]','$Quantidade[1][$camisa]','$Falta[1][$camisa]','$Cartao_Amarelo[1][$camisa]','$Cartao_Vermelho[1][$camisa]')";

$result = mysql_query($sql) or die(mysql_error());

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

São matrizes diferentes, que não possuem relação entre si. Não posso concatená-las. Quero saber se a sintaxe está errada ou se antes de inserir, devo executar alguma função do PHP, ou algo parecido?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os campos que não são matrizes ('$CodJogo','$CodTime_A','$CodJogador') estão normais.

 

print_r de cada matriz:

 

Quantidade: Array ( [1] => Array ( [01 ] => 1 ) [2] => Array ( [09 ] => 1 ) )

Presente: Array ( [1] => Array ( [01 ] => 1 [05 ] => 1 ) [2] => Array ( [11 ] => 1 [09 ] => 1 ) )

Falta: Array ( )

Cartao_Amarelo: Array ( [2] => Array ( [11 ] => 3 ) [1] => Array ( [05 ] => 1 ) )

Cartao_Vermelho: Array ( )

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela tem colunas com o nome igual ao das matrizes.

A matriz Quantidade, por exemplo, tem dois índices principais [1] e [2] que são os Times 1 e 2, e os índices secundários são o nº da camisa dos jogadores.

Então a matriz $Quantidade[1][01] => 1 significa que o jogador 01 do time 1 fez 1 gol.

 

Eu quero gravar assim:

 

VALUES('$CodJogo','$CodTime_A','$CodJogador','$Presente[1][$camisa]','$Quantidade[1][$camisa]','$Falta[1][$camisa]','$Cartao_Amarelo[1][$camisa]','$Cartao_Vermelho[1][$camisa]')";
Jogador com camisa [01] do time [1]: VALUES('59','1','2008001','1','1','0','0','0')";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu percebi que quando uso o print_r há um espaço entre o índice e os colchetes: [11 ], quando eu acho que o correto seria [11]. Por isso, resolvi postar o código quase completo para ver se ajuda.

 

//abrir o arquivo
	$arquivo = $_POST["arquivo"];
	$fp = fopen($arquivo,'r');

	//ler o arquivo
	$texto = fread($fp, filesize($arquivo)); 
	/* $texto recebeu uma string vinda de um arquivo txt, que vale, ( A0 AA E1 01 A0 CA E2 11 A0 CA E2 11 A0 CA E2 11 A0 CA E1 05 A0 AA E2 09 AA E1 01 ), eu tentei explodir essa string usando: $texto = explode(" ", $texto); mas o array ficou assim: Array ( [0] => A0 AA E1 01 A0 CA E2 11 A0 CA E2 11 A0 CA E2 11 A0 CA E1 05 A0 AA E2 09 ), depois tentei com $texto = explode("A0", $texto); e deu certo, só que complicou mais. */ 
	$texto = explode("A0", $texto);
	$CodJogador = array();
	$Presente = array();
	$Quantidade = array();
	$Falta = array();
	$Cartao_Amarelo = array();
	$Cartao_Vermelho = array();
	for ($i = 1;$i<count($texto);$i++){
		$camisa = $texto[$i];
		$camisa = substr($camisa, 7, 8);
		$camisa = substr($camisa, 3, 4);
		if(stristr($texto[$i], 'E1') == TRUE) {
			//TimeA
			if(stristr($texto[$i], 'AA') == TRUE) {
				$Quantidade[$camisa]++;
			}elseif(stristr($texto[$i], 'CA') == TRUE) {
				$Cartao_Amarelo[$camisa]++;
			}
		}
	}
	$query = "SELECT CodJogador,Camisa FROM jogadores WHERE CodTime = '$CodTime_A'";
	$resultado = mysql_query($query);
	while ($linha = mysql_fetch_array($resultado)) {
		$camisa = $linha['Camisa'];
		$CodJogador[$camisa] = $linha['CodJogador'];
	}

 

Antes eu estava usando matriz para fazer o TimeA e o TimeB simultaneamente, agora resolvi fazer um depois do outro para simplificar o código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No início eu disse que na tabela aparecia array[11], array[06].. porque eu mudei os campos para varchar para fazer um teste, mas quando os campos estão como tinyint não acontece nada e não aparece erro.

 

 

--

-- Estrutura da tabela `eventos_futebol`

--

 

CREATE TABLE `eventos_futebol` (

`CodJogo` smallint(6) NOT NULL default '0',

`CodTime` smallint(6) NOT NULL default '0',

`CodJogador` int(7) NOT NULL default '0',

`Presente` tinyint(1) NOT NULL default '0',

`Gol` tinyint(2) NOT NULL default '0',

`Falta` tinyint(2) NOT NULL default '0',

`Cartao_Amarelo` tinyint(2) NOT NULL default '0',

`Cartao_Vermelho` tinyint(2) NOT NULL default '0',

PRIMARY KEY (`CodJogo`,`CodJogador`),

KEY `CodJogo` (`CodJogo`),

KEY `CodTime` (`CodTime`),

KEY `CodJogador` (`CodJogador`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

--

-- Constraints for table `eventos_futebol`

--

ALTER TABLE `eventos_futebol`

ADD CONSTRAINT `eventos_futebol_ibfk_1` FOREIGN KEY (`CodJogo`) REFERENCES `jogos` (`CodJogo`) ON DELETE CASCADE,

ADD CONSTRAINT `eventos_futebol_ibfk_2` FOREIGN KEY (`CodTime`) REFERENCES `times` (`CodTime`) ON DELETE CASCADE,

ADD CONSTRAINT `eventos_futebol_ibfk_3` FOREIGN KEY (`CodJogador`) REFERENCES `jogadores` (`CodJogador`) ON DELETE CASCADE;

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi.

 

mas então por quê você está tentando gravar array dentro de um campo ?

 

você quer que todos os dados do array sejam gravados no campo ou algum índice em específico ?

 

aconselho a fazer o tratamento dessses dados antes de construir a query sql

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu queria gravar apenas um índice específico, consegui resolver e ficou assim:

 

<?
include "protecao_mesario.php";
include "conectar.php";
error_reporting("E_NOTICE");
$CodJogo = $_GET['CodJogo'];
$data = $_GET['Data'];
if (getenv("REQUEST_METHOD") == "POST") {
	$competicao = $_GET['competicao'];
	$CodTime_A = $_GET['CodTime_A'];
	$CodTime_B = $_GET['CodTime_B'];
	$arquivo = $_POST["arquivo"];
	$fp = fopen($arquivo,'r');
	$texto = fread($fp, filesize($arquivo));
	$texto = explode("A0", $texto);
	$CodJogador = array();
	$Presente = array();
	$Quantidade = array();
	$Falta = array();
	$Cartao_Amarelo = array();
	$Cartao_Vermelho = array();
	for ($i = 1;$i<count($texto);$i++){
		$camisa = $texto[$i];
		$camisa = substr($camisa, 7, 8);
		$camisa = substr($camisa, 3, 4);
		$camisa = substr($camisa, 0, 2);
		if(stristr($texto[$i], 'E1') == TRUE) {
			//TimeA
			if(stristr($texto[$i], 'AA') == TRUE) {
				$Quantidade[$camisa]++;
				$Presente[$camisa] = 1;
			}elseif(stristr($texto[$i], 'CA') == TRUE) {
				$Cartao_Amarelo[$camisa]++;
				$Presente[$camisa] = 1;
			}
		}
	}
	$query = "SELECT CodJogador,Camisa FROM jogadores WHERE CodTime = '$CodTime_A'";
	$resultado = mysql_query($query);
	while ($linha = mysql_fetch_array($resultado)) {
		$camisa = $linha['Camisa'];
		$CodJogador = $linha['CodJogador'];
		$sql = "REPLACE INTO `eventos_$competicao` VALUES('$CodJogo','$CodTime_A','$CodJogador','$Presente[$camisa]','$Quantidade[$camisa]','$Falta[$camisa]','$Cartao_Amarelo[$camisa]','$Cartao_Vermelho[$camisa]')";
		$result = mysql_query($sql) or die(mysql_error());
	}
	for ($i = 1;$i<count($texto);$i++){
		$camisa = $texto[$i];
		$camisa = substr($camisa, 7, 8);
		$camisa = substr($camisa, 3, 4);
		$camisa = substr($camisa, 0, 2);
		if(stristr($texto[$i], 'E2') == TRUE) {
			//TimeB
			if(stristr($texto[$i], 'AA') == TRUE) {
				$Quantidade[$camisa]++;
				$Presente[$camisa] = 1;
			}elseif(stristr($texto[$i], 'CA') == TRUE) {
				$Cartao_Amarelo[$camisa]++;
				$Presente[$camisa] = 1;
			}
		}
	}
	$query = "SELECT CodJogador,Camisa FROM jogadores WHERE CodTime = '$CodTime_B'";
	$resultado = mysql_query($query);
	while ($linha = mysql_fetch_array($resultado)) {
		$camisa = $linha['Camisa'];
		$CodJogador = $linha['CodJogador'];
		$sql = "REPLACE INTO `eventos_$competicao` VALUES('$CodJogo','$CodTime_B','$CodJogador','$Presente[$camisa]','$Quantidade[$camisa]','$Falta[$camisa]','$Cartao_Amarelo[$camisa]','$Cartao_Vermelho[$camisa]')";
		$result = mysql_query($sql) or die(mysql_error());
	}
	echo "<script>document.location.href='eventos.php?CodJogo=$CodJogo&Data=$data'</script>";
}

Só mais uma dúvida para pegar o nº 11, que é a camisa do jogador, de uma string como essa " AA E1 11 " eu fiz isso:

$camisa = substr($camisa, 7, 8);
$camisa = substr($camisa, 3, 4);
$camisa = substr($camisa, 0, 2);

Existe um jeito mais fácil?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que entendi até agora é que você está tendo dificuldades com recebimento de dados via GET POST, manipulação de strings e lógica sobre estruturas de banco de dados.

 

aconselho a consultar artigos e a documentação aos temas relacionados:

 

 

sobre strings veja essa série de artigos do portal imasters:

http://imasters.com.br/artigo/6742/php...oes_-_parte_01/

 

para especificações técnicas consulte a documentação oficial:

http://php.net/strings

 

POST, GET artigo

http://imasters.com.br/artigo/1016?cn=1016&cc=44

 

POST, GET documentação (Server Variables)

http://jp2.php.net/reserved.variables

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.