i.Surfer 0 Denunciar post Postado Agosto 29, 2005 Tudo bom galera??? Seguinte, tava tentando criar um script pra inserir um array multidimensional no DB, só que envez de exibir tudo que tem no array, ele para quando termina o primeiro bimestre e da este erro: bimestre: 1 | materia: 1 | nota: 8.9bimestre: 1 | materia: 2 | nota: 2.5bimestre: 1 | materia: 3 | nota: 10bimestre: 1 | materia: 4 | nota: 0.4bimestre: 1 | materia: 5 | nota: 9.11Duplicate entry '1-1' for key 1Mas quando tiro a parte do de inserir no DB ele funciona perfeitamente. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Aqui esta o script: PHP [*]<? [*]FUNCTION EXEC($i,$notas) { [*] global $tb; [*] FOREACH ($notas AS $tda => $x) { [*] FOREACH ($notas[$tda] AS $mat => $nota ) { [*] DB_OPEN(); [*] @mysql_query("INSERT INTO {$tb['notas_ano']} (aluno,materia,{$tb['dano']},nota) [*] VALUES ('{$i}','{$mat}','{$tda}','{$nota}')") [*] OR ERRO(mysql_error()); [*] DB_CLOSE(); [*] echo "bimestre: $tda | materia: $mat | nota: $nota<br />"; [*] } [*] } [*]} [*] [*]$n["1"]["1"] = 8.90; $n["1"]["2"] = 2.50; $n["1"]["3"] = 10.0; $n["1"]["4"] = 0.40; $n["1"]["5"] = 9.11; [*]$n["2"]["1"] = 4.50; $n["2"]["2"] = 6.54; $n["2"]["3"] = 7.00; $n["2"]["4"] = 8.99; $n["2"]["5"] = 6.30; [*]$n["3"]["1"] = 2.40; $n["3"]["2"] = 6.00; $n["3"]["3"] = 8.50; $n["3"]["4"] = 9.00; $n["3"]["5"] = 7.80; [*]$n["4"]["1"] = 9.36; $n["4"]["2"] = 5.40; $n["4"]["3"] = 6.10; $n["4"]["4"] = 6.30; $n["4"]["5"] = 8.00; [*] [*]EXEC("1",$n) [*]?> Atenção: 1) A variável '$tb' vem de um config que fiz, e os valores usados dela são $tb['notas_ano'] = "notas_bimestrais" e $tb['dano'] = "bimestre". 2) As funções, DB_OPEN() para abrir conexao com o DB, ERRO() mostrar erro personalizadamente caso exista, e DB_CLOSE() que fecha a conexao. Gente, agradeço muito se alguem puder me ajudar, tentei de tudo aqui mas não achei uma solução, pesquisei no php.net e no mysql.com também, mas não encontrei nada à respeito. Valeu ! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Agosto 29, 2005 Você definiu o campo bimestre como UNIQUE ou outra propriedade do SGBD que não permite ter valores duplicados? Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Agosto 29, 2005 A tabela onde ocorre esse INSERT é essa: CREATE TABLE notas_ano ( aluno INT NOT NULL DEFAULT '', materia INT NOT NULL DEFAULT '', bimestre INT NOT NULL DEFAULT '', nota FLOAT NOT NULL DEFAULT '', PRIMARY KEY (aluno,materia) ); 1) Sem a parte do MySQL no codigo funciona normalmente certo?! Então deve ser algo com o MySQL mesmo, mas não sei o que é. 2) O que é esse negócio de duplicado ??? 3) Não usei UNIQUE, devo usar??? Bom, valeu pela ajuda ! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Rauffer 0 Denunciar post Postado Agosto 29, 2005 você define um campo como UNIQUE para que não possa ser inserido 2 vezes o mesmo valor, texto... bastante usado para email, id, coisas do tipo. valor duplicado é o mesmo valor inserido 2 vezes, por exemplo dois produtos com mesmo código ou o mesmo aluno na mesma matéria duas vezes. :P Então, a pergunta do Felipe é se você usou alguma propriedade que evite sejam inseridos mesmos valores 2 vezes... Você definiu a chave primária aluno + matéria.... Está inserindo até aluno = 1 e matéria = 5 bimestre: 1 | materia: 1 | nota: 8.9bimestre: 1 | materia: 2 | nota: 2.5bimestre: 1 | materia: 3 | nota: 10bimestre: 1 | materia: 4 | nota: 0.4bimestre: 1 | materia: 5 | nota: 9.11 A partir dae você tenta repetir a chave. Não poderá mais repetir a combinação aluno = 1 e matéria = 2 ou outra que se repita. Assim estará cadastrando o mesmo aluno na mesma matéria duas vezes. Duplicidade :) Dae você tem que ver, se for permitido cadastrar o mesmo aluno na mesma matéria, deve mudar a chave primária. Consegui me expressar direitinho? :P Abraço Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Agosto 29, 2005 você define um campo como UNIQUE para que não possa ser inserido 2 vezes o mesmo valor, texto... bastante usado para email, id, coisas do tipo. valor duplicado é o mesmo valor inserido 2 vezes, por exemplo dois produtos com mesmo código ou o mesmo aluno na mesma matéria duas vezes. :P Então, a pergunta do Felipe é se você usou alguma propriedade que evite sejam inseridos mesmos valores 2 vezes... Você definiu a chave primária aluno + matéria.... Está inserindo até aluno = 1 e matéria = 5 bimestre: 1 | materia: 1 | nota: 8.9bimestre: 1 | materia: 2 | nota: 2.5bimestre: 1 | materia: 3 | nota: 10bimestre: 1 | materia: 4 | nota: 0.4bimestre: 1 | materia: 5 | nota: 9.11A partir dae você tenta repetir a chave. Não poderá mais repetir a combinação aluno = 1 e matéria = 2 ou outra que se repita. Assim estará cadastrando o mesmo aluno na mesma matéria duas vezes. Duplicidade :) Dae você tem que ver, se for permitido cadastrar o mesmo aluno na mesma matéria, deve mudar a chave primária. Consegui me expressar direitinho? :P Abraço <{POST_SNAPBACK}> http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Entendi ! Ótima explicação, muito obrigado ! Só mais um coisa, não tem outra solução, porque preciso ter alunos e matérias como chave primária para poder fazer select multiplo, como posso resolver isso gente ? Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Agosto 31, 2005 Alguem ??? Estou precisando encontrar uma solução pessoal, por favor, alguem pode me ajudar???Grato ! Compartilhar este post Link para o post Compartilhar em outros sites
Rauffer 0 Denunciar post Postado Setembro 1, 2005 Cria um outro campo e declara como uma terceira chave... hora + data... time() ou então uma ID pra cada registro... alguma coisa para que não haja duplicidade. Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Setembro 3, 2005 Olá! Consegui resolver o problema da duplicidade ! :D Fiz como você falou Rauffer, coloquei como PK 3 campos, assim o problema foi resolvido. http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Continuando o script, cheguei a outro erro muito estranho que fiquei horas tentando contornar e nada, o script funciona, faz tudo que mando fazer, só que exibe um erro que não faz nada :wacko: Se alguem puder me ajudar fico grato ! O script segue logo abaixo: PHP [*]FUNCTION EDIT($id,$f) { [*] global $tb; [*] FOREACH ($f AS $d => $x) { [*] FOREACH ($f[$d] AS $m => $ft) { [*] DB_OPEN(); [*] $q = @mysql_query("SELECT faltas [*] FROM {$tb['faltas']} [*] WHERE aluno='{$id}' AND {$tb['dano']}='{$d}' [*] AND materia='{$m}'") [*] OR ERRO(mysql_error()); [*] [*] $r = @mysql_fetch_row($q); [*] [*] IF ($r[0] == "") { [*] @mysql_query("INSERT INTO {$tb['faltas']} [*] (aluno,{$tb['dano']},materia,faltas) [*] VALUES ('{$id}','{$d}','{$m}','{$ft}')") [*] OR ERRO(mysql_error()); [*] [*] $metodo = "INSERT"; [*] } [*] ELSE { [*] @mysql_query("UPDATE {$tb['faltas']} [*] SET faltas='{$ft}' [*] WHERE aluno='{$id}' AND {$tb['dano']}='{$d}' [*] AND materia='{$m}'") [*] OR ERRO(mysql_error()); [*] [*] $metodo = "UPDATE"; [*] } [*] DB_CLOSE(); [*] echo "{$tb['dano']}: {$d} | materia: {$m} [*] | falta: {$ft} ($metodo)<br />"; [*] } [*] } [*]} [*] [*]$f["1"]["1"] = 11; $f["2"]["1"] = 6; $f["3"]["1"] = 5; $f["4"]["1"] = 14; [*]$f["1"]["2"] = 9.; $f["2"]["2"] = 8; $f["3"]["2"] = 10; $f["4"]["2"] = 6; [*]$f["1"]["3"] = 15; $f["2"]["3"] = 4; $f["3"]["3"] = 3; $f["4"]["3"] = 8; [*]$f["1"]["4"] = 3; $f["2"]["4"] = 7; $f["3"]["4"] = 0; $f["4"]["4"] = 10; [*]$f["1"]["5"] = 8; $f["2"]["5"] = 1; $f["3"]["5"] = 15; $f["4"]["5"] = 0; [*]$f["1"]["6"] = 4; $f["2"]["6"] = 5; $f["3"]["6"] = 12; $f["4"]["6"] = 0; [*]$f["1"]["7"] = 12; $f["2"]["7"] = 2; $f["3"]["7"] = 7; $f["4"]["7"] = 0; [*]$f["1"]["8"] = 9; $f["2"]["8"] = 0; $f["3"]["8"] = 8; $f["4"]["8"] = 4; [*]$f["1"]["9"] = 0; $f["2"]["9"] = 0; $f["3"]["9"] = 1; $f["4"]["9"] = 1; [*]$f["1"]["10"] = 0; $f["2"]["10"] = 1; $f["3"]["10"] = 1; $f["4"]["10"] = 6; [*]$f["1"]["11"] = 6; $f["2"]["11"] = 1; $f["3"]["11"] = 0; $f["4"]["11"] = 1; [*]$f["1"]["12"] = 2; $f["2"]["12"] = 3; $f["3"]["12"] = 0; $f["4"]["12"] = 2; [*]$f["1"]["13"] = 1; $f["2"]["13"] = 7; $f["3"]["13"] = 9; $f["4"]["13"] = 2; [*]$f["1"]["14"] = 0; $f["2"]["14"] = 6; $f["3"]["14"] = 3; $f["4"]["14"] = 0; [*]$f["1"]["15"] = 1; $f["2"]["15"] = 2; $f["3"]["15"] = 1; $f["4"]["15"] = 0; [*]EDIT("1",$f); ATENÇÃO: As funções DB_OPEN() e DB_CLOSE() vem de outro arquivo, elas fazem a conexão com o Banco de Dados. E a variável $tb é um array que contém o nome das tabelas no Banco de Dados. E ele imprime no browser isso: Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 Warning: Invalid argument supplied for foreach() in C:\root\teste.php on line 4 bimestre: 1 | materia: 1 | falta: 11 (INSERT) bimestre: 1 | materia: 2 | falta: 9 (INSERT) bimestre: 1 | materia: 3 | falta: 15 (INSERT) bimestre: 1 | materia: 4 | falta: 3 (INSERT) bimestre: 1 | materia: 5 | falta: 8 (INSERT) bimestre: 1 | materia: 6 | falta: 4 (INSERT) bimestre: 1 | materia: 7 | falta: 12 (INSERT) bimestre: 1 | materia: 8 | falta: 9 (INSERT) bimestre: 1 | materia: 9 | falta: 0 (INSERT) bimestre: 1 | materia: 10 | falta: 0 (INSERT) bimestre: 1 | materia: 11 | falta: 6 (INSERT) bimestre: 1 | materia: 12 | falta: 2 (INSERT) bimestre: 1 | materia: 13 | falta: 1 (INSERT) bimestre: 1 | materia: 14 | falta: 0 (INSERT) bimestre: 1 | materia: 15 | falta: 1 (INSERT) bimestre: 2 | materia: 1 | falta: 6 (INSERT) bimestre: 2 | materia: 2 | falta: 8 (INSERT) bimestre: 2 | materia: 3 | falta: 4 (INSERT) bimestre: 2 | materia: 4 | falta: 7 (INSERT) bimestre: 2 | materia: 5 | falta: 1 (INSERT) bimestre: 2 | materia: 6 | falta: 5 (INSERT) bimestre: 2 | materia: 7 | falta: 2 (INSERT) bimestre: 2 | materia: 8 | falta: 0 (INSERT) bimestre: 2 | materia: 9 | falta: 0 (INSERT) bimestre: 2 | materia: 10 | falta: 1 (INSERT) bimestre: 2 | materia: 11 | falta: 1 (INSERT) bimestre: 2 | materia: 12 | falta: 3 (INSERT) bimestre: 2 | materia: 13 | falta: 7 (INSERT) bimestre: 2 | materia: 14 | falta: 6 (INSERT) bimestre: 2 | materia: 15 | falta: 2 (INSERT) bimestre: 3 | materia: 1 | falta: 5 (INSERT) bimestre: 3 | materia: 2 | falta: 10 (INSERT) bimestre: 3 | materia: 3 | falta: 3 (INSERT) bimestre: 3 | materia: 4 | falta: 0 (INSERT) bimestre: 3 | materia: 5 | falta: 15 (INSERT) bimestre: 3 | materia: 6 | falta: 12 (INSERT) bimestre: 3 | materia: 7 | falta: 7 (INSERT) bimestre: 3 | materia: 8 | falta: 8 (INSERT) bimestre: 3 | materia: 9 | falta: 1 (INSERT) bimestre: 3 | materia: 10 | falta: 1 (INSERT) bimestre: 3 | materia: 11 | falta: 0 (INSERT) bimestre: 3 | materia: 12 | falta: 0 (INSERT) bimestre: 3 | materia: 13 | falta: 9 (INSERT) bimestre: 3 | materia: 14 | falta: 3 (INSERT) bimestre: 3 | materia: 15 | falta: 1 (INSERT) bimestre: 4 | materia: 1 | falta: 14 (INSERT) bimestre: 4 | materia: 2 | falta: 6 (INSERT) bimestre: 4 | materia: 3 | falta: 8 (INSERT) bimestre: 4 | materia: 4 | falta: 10 (INSERT) bimestre: 4 | materia: 5 | falta: 0 (INSERT) bimestre: 4 | materia: 6 | falta: 0 (INSERT) bimestre: 4 | materia: 7 | falta: 0 (INSERT) bimestre: 4 | materia: 8 | falta: 4 (INSERT) bimestre: 4 | materia: 9 | falta: 1 (INSERT) bimestre: 4 | materia: 10 | falta: 6 (INSERT) bimestre: 4 | materia: 11 | falta: 1 (INSERT) bimestre: 4 | materia: 12 | falta: 2 (INSERT) bimestre: 4 | materia: 13 | falta: 2 (INSERT) bimestre: 4 | materia: 14 | falta: 0 (INSERT) bimestre: 4 | materia: 15 | falta: 0 (INSERT) Fico no aguardo, valeu gente !! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Setembro 3, 2005 Utilizando a informações (o array) que foi passado, fiz da seguinte forma: foreach ($f as $bimestre => $materia){ print "<h2>" . $bimestre . "</h2>"; foreach ($materia as $mat => $nota) { print $mat ."=>".$nota."<br />"; }} Verifique se é o esperado. []'s Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Setembro 3, 2005 Utilizando a informações (o array) que foi passado, fiz da seguinte forma: foreach ($f as $bimestre => $materia){ print "<h2>" . $bimestre . "</h2>"; foreach ($materia as $mat => $nota) { print $mat ."=>".$nota."<br />"; }}Verifique se é o esperado. []'s <{POST_SNAPBACK}> Tentei adaptar ao modo que você fez e continua dando o mesmo erro! Mas o que você fez não ;e exatamente o que quero. Eu altererei uma parte do script que fiz por uma parte do seu que estava diferente, olha ai: PHP [*]FUNCTION EDIT($id,$f) { [*] global $tb; [*] FOREACH ($f AS $d => $x) { [*]// Foi nesta parte abaixo que troquei o ' $f[$d] ' por $x como o que você fez Felipe [*] FOREACH ($x AS $m => $ft) { [*] DB_OPEN(); [*] $q = @mysql_query("SELECT faltas [*] FROM {$tb['faltas']} [*] WHERE aluno='{$id}' AND {$tb['dano']}='{$d}' [*] AND materia='{$m}'") [*] OR ERRO(mysql_error()); [*] [*] $r = @mysql_fetch_row($q); [*] [*] IF ($r[0] == "") { [*] @mysql_query("INSERT INTO {$tb['faltas']} [*] (aluno,{$tb['dano']},materia,faltas) [*] VALUES ('{$id}','{$d}','{$m}','{$ft}')") [*] OR ERRO(mysql_error()); [*] [*] $metodo = "INSERT"; [*] } [*] ELSE { [*] @mysql_query("UPDATE {$tb['faltas']} [*] SET faltas='{$ft}' [*] WHERE aluno='{$id}' AND {$tb['dano']}='{$d}' [*] AND materia='{$m}'") [*] OR ERRO(mysql_error()); [*] [*] $metodo = "UPDATE"; [*] } [*] DB_CLOSE(); [*] echo "{$tb['dano']}: {$d} | materia: {$m} [*] | falta: {$ft} ($metodo)<br />"; [*] } [*] } [*]} [*] [*]$f["1"]["1"] = 11; $f["2"]["1"] = 6; $f["3"]["1"] = 5; $f["4"]["1"] = 14; [*]$f["1"]["2"] = 9.; $f["2"]["2"] = 8; $f["3"]["2"] = 10; $f["4"]["2"] = 6; [*]$f["1"]["3"] = 15; $f["2"]["3"] = 4; $f["3"]["3"] = 3; $f["4"]["3"] = 8; [*]$f["1"]["4"] = 3; $f["2"]["4"] = 7; $f["3"]["4"] = 0; $f["4"]["4"] = 10; [*]$f["1"]["5"] = 8; $f["2"]["5"] = 1; $f["3"]["5"] = 15; $f["4"]["5"] = 0; [*]EDIT("1",$f); Mas obrigado mesmo assim pela ajuda, aguardo respostas! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Setembro 3, 2005 Como devem vir os resultados?Pensei que era:-------------------------BimestreMateria => Nota...------------------------- Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Setembro 3, 2005 Como devem vir os resultados? Pensei que era: ------------------------- Bimestre Materia => Nota ... ------------------------- <{POST_SNAPBACK}> Isso que o script imprime na tela é apenas como debugger pra ver o que o codigo esta fazendo, o importante é a inserção ou atualização no banco de dados. E o erro está ocorrendo no segundo foreach, mas não entendo o porque ! Valeu! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Setembro 4, 2005 O erro ainda é:Invalid argument supplied for foreach()??Se for, verifique a estrutura do Array fornecido com print_r() antes de utilizar os foreach's.[]'s Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Setembro 4, 2005 O erro ainda é: Invalid argument supplied for foreach() ?? Se for, verifique a estrutura do Array fornecido com print_r() antes de utilizar os foreach's. []'s <{POST_SNAPBACK}> Como que verifico a estrutura com print_r ?? E sim, o erro é " invalid arqument supplied for foreach() " Grato! Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Setembro 4, 2005 Coloca: FUNCTION EDIT($id,$f) { global $tb; //---------------------- // Visualizar array print "<pre>"; print_r($f); //-------------------- FOREACH ($f AS $d => $x) {// Foi nesta parte abaixo que troquei o ' $f[$d] ' por $x como o que você fez Felipe FOREACH ($x AS $m => $ft) { DB_OPEN(); $q = @mysql_query("SELECT faltas FROM {$tb['faltas']} WHERE aluno='{$id}' AND {$tb['dano']}='{$d}' AND materia='{$m}'") OR ERRO(mysql_error()); $r = @mysql_fetch_row($q); IF ($r[0] == "") { @mysql_query("INSERT INTO {$tb['faltas']} (aluno,{$tb['dano']},materia,faltas) VALUES ('{$id}','{$d}','{$m}','{$ft}')") OR ERRO(mysql_error()); $metodo = "INSERT"; } ELSE { @mysql_query("UPDATE {$tb['faltas']} SET faltas='{$ft}' WHERE aluno='{$id}' AND {$tb['dano']}='{$d}' AND materia='{$m}'") OR ERRO(mysql_error()); $metodo = "UPDATE"; } DB_CLOSE(); echo "{$tb['dano']}: {$d} | materia: {$m} | falta: {$ft} ($metodo)<br />"; } }} Com print_r() veremos como está a estrutura do Array. Com isso veremos o porque do erro no foreach. Vamos lá! Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Setembro 4, 2005 Aee !! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Consegui, muito obrigado c0deman !! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites