Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala pessoal, sou novo aqui e também na linguagem php. Estou enfrentando um problema sem sentido, tenho um formulário de cadastro de chamado que tenho nome, data, hora, observação, etc.. e uma página gravar que recupera estes dados e insere no banco. Tudo acontece perfeito, mas quando o campo observação contém muito texto, ele retorna o erro:
ERRO: Column count doesn't match value count at row 1
O campo obs está como text no banco de dados. É engraçado pois, se eu inserir uma frase ou duas por exemplo, eu envio para o banco, se for um parágrafo inteiro, não. Meu código é este:
<form id="um" method="post" action="gravar.php" >
<tr>
Nome: <input type="text" id="estado_autocomplete" size="50px" name="nome" value="<?php echo $resSqlBuscaDados['nome'];?>" autocomplete="off" readonly />
E-mail: <input type="text" name="email" size="35px" id="uf1" value="<?php echo $resSqlBuscaDados['email'];?>" readonly />
Ramal: <input type="text" id="id_estado" name="ramal" value="<?php echo $resSqlBuscaDados['ramal']; ?>" readonly />
</tr><br><br>
<tr>
<td align="left">Data: </td>
<td align="left"><input type="text" name="data" id="data" size="15px" maxlength="10" value="<? echo $data; ?>" readonly />
<td align="left">Hora: </td>
<td align="left"><input type="text" name="hora" id="hora" size="15px" maxlength="10" value="<? echo $hora; ?>" readonly />
<td align="left">Setor: </td>
<td align="left">
<select name="setor" onchange="aval( this.value )" >
<option value="0" selected="selected" disabled="disabled">Selecione...</option>
<?php
$sqlMotivos = $conecta->seleciona("SELECT * FROM setor ORDER BY primeiro_motivo");
while($resSqlMotivos = mysql_fetch_array($sqlMotivos)){
echo '<option value="'.$resSqlMotivos[menu_id].'">'.$resSqlMotivos[primeiro_motivo].'</option>';
}
?>
</select>
</td>
</tr>
<tr style="visibility:hidden">
<td align="center">Solicitação:</td>
<td align="left" >
<select name="solicitacao">
<option value="" selected="selected" disabled="disabled" >Selecione...</option>
<?php
$listBairros = $conecta->seleciona("SELECT * FROM jobs ORDER BY motivo ");
while($resListBairros = mysql_fetch_array($listBairros)){
echo '<option value="'.$resListBairros['motivo'].'">'.$resListBairros['motivo'].'</option>';
}
?>
</select>
</td> <br><br>
<td align="left">Urgência: </td>
<td align="left"><label><input type="radio" select="urgencia" name="urgencia" value="sim"/>Sim</label>
<td align="left"><label><input type="radio" select="urgencia" name="urgencia" value="nao"/>Não </label>
</tr><br><br>
<td align="left">Deseja ser avisado da resolução: </td>
<td align="left"><label><input type="radio" select="aviso" name="aviso" value="sim"/>Sim</label>
<td align="left"><label><input type="radio" select="aviso" name="aviso" value="nao"/>Não </label>
</tr><br><br>
<tr>
<td>Descrição: </td>
<td><textarea rows="3" cols="45" name="obs" id="obs"></textarea></td>
</tr>
<br><br>
<center>
<input type="submit" id="enviar" name="enviar" value="Gravar" class="buton" />
<input type="reset" value="Limpar" class="buton" />
</center>
E este é a página que recupera os Posts:
<?php
mysql_connect('srv','user','senha');
mysql_select_db('banco');
//codigo para enviar variaveis com acento para o bd
mysql_query("SET NAMES ‘utf8'");
mysql_query("SET character_set_connection=utf8");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_results=utf8");
function gravar($tabela) {
$val = end($_POST);
$pos = array_search($val, $_POST);
unset($_POST[$pos]);
foreach ($_POST as $campo => $val) {
$campos[] = $campo;
$conteudo[] = mysql_real_escape_string(strip_tags($val));
}
$insert = "INSERT INTO chamados(".implode(',',$campos).") VALUES('".str_replace(",","','",implode(',',$conteudo))."')";
mysql_query($insert) or die ('ERRO: '.mysql_error());
}
echo gravar('chamados');
//query para retornar ultimo id cadastrado, protocolo de consulta
$chamado1 = $conecta->seleciona("SELECT id FROM chamados ORDER BY id DESC LIMIT 1");
$sql = mysql_fetch_array($chamado1);
$sql1 = $sql['id'];
echo "<script>alert(' Numero do chamado: $sql1.\\n $nome, sua solicitacao foi enviada com sucesso.\\n\\n Acompanhe o andamento do seu chamado no menu Acompanhamento, dentro de Aplicativos.');window.location='abertura_chamado.php'</script>";
?>
Quem puder ajudar, por favor.
Já li sobre o problema, dizem ser campo a mais ou a menos no envio.. Mas o erro deveria dar sempre então, certo? quando envio pouco caractere no campo OBS eu não tenho este problema.
Resolvi, mudei o insert para:
$nome = $_POST['nome'];
$email = $_POST['email'];
$ramal = $_POST['ramal'];
$data = $_POST['data'];
$hora = $_POST['hora'];
$setor = $_POST['setor'];
$status = $_POST['status'];
$solicitacao = $_POST['solicitacao'];
$urgencia = $_POST['urgencia'];
$aviso = $_POST['aviso'];
$obs = $_POST['obs'];
mysql_query("INSERT INTO chamados (id, nome, email, ramal, data, hora, setor, status, solicitacao, urgencia, aviso, obs)
VALUES ('', '$nome', '$email', '$ramal', '$data', '$hora', '$setor', 'Aguardando', '$solicitacao', '$urgencia', '$aviso', '$obs')");
mysql_close($dados);
Agora, independente do tamanho do campo obs, ele vai OK para o banco.
obrigado.
Carregando comentários...