Erro on line 59, e DUPLICATE KEY entre 0

Enviada por Rafael Oliveira de Mentzingen 
Rafael Oliveira de Mentzingen
Erro on line 59, e DUPLICATE KEY entre 0
14 de May de 2013 às 01:47PM
Bem ,estou montando um sistema de boletim escolar eletrônico.
Estou usando os seguintes programas:
- MSQL
- Komodo edit
- Wamp server

Bem, esta acontecendo alguns problemas. Quando vou validar ou testar um formulario no locallhost no navegador da a seguinte mensagem:

( ! ) Notice: Undefined index: p1 in C:\wamp\www\escola-aula\bancodedados.php on line 59
Call Stack
# Time Memory Function Location
1 0.0005 677736 {main}( ) ..\index.php:0
2 1.0159 761568 Bancodedados->inserir( ) ..\index.php:8

E quando no arquivo index.php altero de: $tabela = 'situacao';
echo '<p>'.$tabela.'</p>'; para $tabela = 'serie'; ou com turno, ou com situacao( como esta acima). Porem quando uso sutuacao, além do erro mostrado acima , da: Consulta Inválida: Duplicate entry '0' for key 'PRIMARY.

a online 59 dita acima, provavelmente é desse arquivo: Bancodedados.php

<?php
class Bancodedados{
private $_conexao = "";

function __construct(){
$this->_conexao = $this->conexao();
}

function where($sql, $where){
$i = 1;
$where_inc = ' WHERE ';
$total = count($where);
foreach($where as $key => $value){
$where_inc .= " $key = '$value'";
if($i < $total)
$where_inc .= " AND ";
$i++;
}
return $sql.$where_inc;
}
function consultas($tabela, $where=false){
switch($tabela){
case 'idcadastro':
case 'cadastro':
$sql = 'SELECT * FROM cadastro c';
break;
case 'idserie':
case 'serie':
$sql = 'SELECT * FROM serie s';
break;
case 'situacao':
$sql = 'SELECT * FROM situacao s';
break;
case 'idturno':
case 'turno':
$sql = 'SELECT * FROM turno t';
break;
case 'boletim':
$sql = "SELECT c.id, c.nome, c.email, c.foto, se.nome as serie, @m:= (s.p1 + s.p2 + s.p3 + s.p4)/4 as media, if(@m>=7,'aprovado', if(@m >=4,'recuperacao','reprovado')) as resultado, s.p1, s.p2, s.p3, s.p4, s.recuperacao, s.ano, t.nome as turno FROM cadastro c INNER JOIN situacao s ON c.id = s.idcadastro INNER JOIN serie se ON s.idserie = se.id INNER JOIN turno t ON s.idturno = t.id";
break;
default:
$sql = false;
break;
}
if($sql && $where)
$sql = $this->where($sql, $where);
return $sql;
}
function inserir(){
$sql = false;
if(isset($_POST) && isset($_POST['formulario'])){
$tabela = $_POST['formulario'];
$campos = $this->arraycampos($tabela);
if($campos){
$sql = "INSERT INTO $tabela VALUES('', ";
$total = count($campos); $total--;
for($i=0;$i<count($campos);$i++){
$campo = $campos[$i][1];
$sql .= "'".$_POST["$campo"]."'";
if($i < $total)
$sql .= ", ";
else
$sql .=')';
}
}
$res = $this->executaConsulta($sql);
return ($res?'Efetuado com sucesso!':'Erro');
}
}
function conexao(){
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
die('Não foi possível conectar: ' . mysql_error());
}
mysql_select_db('escolaaula', $link);
//echo 'Conexão bem sucedida';
/*mysql_close($link);*/
return $link;
}
function executaConsulta($sql){
$result = mysql_query($sql, $this->_conexao);
if (!$result) {
die('Consulta Inválida: ' . mysql_error());
}else{
return $result;
}
}
function arraycampos($tabela){
switch($tabela){
case 'cadastro':
$array = array(
array('Nome','nome','text'),
array('Email','email','text'),
array('Foto','foto','text')
);
break;
case 'serie':
$array = array(
array('Nome','nome','text')
);
break;
case 'situacao':
$array = array(
array('Aluno','idcadastro','select'),
array('Série','idserie','select'),
array('Turno','idturno','select'),
array('Prova 1','p1','text'),
array('Prova 2','p2','text'),
array('Prova 3','p3','text'),
array('Prova 4','p4','text'),
array('Recuperacao','recuperacao','text'),
array('Ano','ano','text')
);
break;
case 'turno':
$array = array(
array('Nome','nome','text')
);
break;
default:
$array = false;
break;
}
return $array;
}
}
?>

Tem o arquivo index.php também:

<?php
$tabela = 'situacao';
echo '<p>'.$tabela.'</p>';
require_once('bancodedados.php');
require_once('html.php');
$html = new Html;
if(isset($_POST))
echo $html->inserir();
$form = $html->formulario($tabela);
?>
<!DOCTYPE html>

<html>
<head>
<title>Page Title</title>
</head>

<body>
<?php echo ($form?$form:'') ?>

</body>
</html>

e tem o arquivo html.php:

<?php
class Html extends Bancodedados{
function options($nome){
$res = false;
$sql = $this->consultas($nome);
$result = $this->executaConsulta($sql);
if($result){
while ($row = mysql_fetch_array($result)) {
$res .= '<option value="'.$row['id'].'">'.$row['nome'].'</options>';
}
}
return $res;
}
function formulario($nome=false){
$res = false;
if($nome){
$campos = $this->arraycampos($nome);
$res = '<form name="'.$nome.'" method="post" action="">';
$res .= '<input type="hidden" value="'.$nome.'" name="formulario" />';
for($i=0;$i<count($campos);$i++){
if($campos[$i][2] == 'text'){
$res .= '<input type="text" value="" name"'.$campos[$i][1].'" />';
}
if($campos[$i][2] == 'select'){
$res .= '<select name="'.$campos[$i][1].'">'.$this->options($campos[$i][1]).'</select>';
}
}
$res .= '<input type="submit" name="Salvar" />';
$res .= '</form>';
}
return $res;
}
}
?>

VocÊs podiam me ajudar a encontrar o erro nesses formmularios que estão ocasionando o erro mostrado lá em cima da pergunta.

Obrigado.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.