Nilson N 0 Denunciar post Postado Março 29, 2008 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
Wanderson Regis Silva 0 Denunciar post Postado Março 29, 2008 Tente concatenar as matrizes. "..." . $matriz[0][0][4][5] . "..." Compartilhar este post Link para o post Compartilhar em outros sites
Nilson N 0 Denunciar post Postado Março 29, 2008 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
batatinha66 0 Denunciar post Postado Março 30, 2008 todos os campos ficam Array(etc...)? outra coisa... posta o array $presente...$falta...e o resto pra v c tem algum erro... flwss Compartilhar este post Link para o post Compartilhar em outros sites
Nilson N 0 Denunciar post Postado Março 30, 2008 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
hinom 5 Denunciar post Postado Março 30, 2008 como você quer gravar esses dados dentro da tabela ? Compartilhar este post Link para o post Compartilhar em outros sites
Nilson N 0 Denunciar post Postado Março 30, 2008 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
Nilson N 0 Denunciar post Postado Março 30, 2008 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
hinom 5 Denunciar post Postado Março 31, 2008 Nilson desculpe mas nao entendi. poderia mostrar a estrutura da tabela ? com os nomes dos campos Compartilhar este post Link para o post Compartilhar em outros sites
Nilson N 0 Denunciar post Postado Março 31, 2008 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
hinom 5 Denunciar post Postado Março 31, 2008 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
Nilson N 0 Denunciar post Postado Março 31, 2008 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
hinom 5 Denunciar post Postado Abril 1, 2008 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