• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

deathseeker25

Processamente do formulário sem efeito!

12 mensagens neste tópico

Boas,

Tenho um formulário e um script de inserção de dados na BD. Acontece que quando insiro dados no formulário aparecem sempre as mensagens de erro, isto é, as mensagens de que não existem dados inseridos no formulário, quando na realidade existem.

Este é o código do formulário:

<form method="post" id="addcode" action="addcode.php">
  <p>Título:
      <input type="text" id="codename" />
    <br />
    Código:
    <textarea id="conteudo"></textarea>
    <br />
    <br />
    Linguagem:<select name="select"><option value="" selected="selected">GeSHi
     
      </option>
      <option value="ActionScript-French">ActionScript-French</option>
      <option value="ActionScript">ActionScript</option>
      <option value="Ada">Ada</option>
      <option value="Apache">Apache</option>
      <option value="Log">Log</option>
      <option value="AppleScript">AppleScript</option>
      <option value="ASM">ASM</option>
      <option value="ASP">ASP</option>
      <option value="Bash">Bash</option>
      <option value="CAD">CAD</option>
      <option value="DCL">DCL</option>
      <option value="CADLisp">CADLisp</option>
      <option value="C for Macs">C for Macs</option>
      <option value="C++">C++</option>
      <option value="C#">C#</option>
      <option value="CSS">CSS</option>
      <option value="Delphi">Delphi</option>
      <option value="Diff">Diff</option>
      <option value="DIV">DIV</option>
      <option value="DOS">DOS</option>
      <option value="D">D</option>
      <option value="Eiffel">Eiffel</option>
      <option value="FreeBasic">FreeBasic</option>
      <option value="GML">GML</option>
      <option value="HTML4 Strict">HTML4 Strict</option>
      <option value="INI">INI</option>
      <option value="Inno">Inno</option>
      <option value="Java">Java</option>
      <option value="Javascript">Javascript</option>
      <option value="Lisp">Lisp</option>
      <option value="Lua">Lua</option>
      <option value="Matlab">Matlab</option>
      <option value="Microprocessor ASM">Microprocessor ASM</option>
      <option value="MSIS">MSIS</option>
      <option value="Objective C">Objective C</option>
      <option value="OCaml-Brief">OCaml-Brief</option>
      <option value="OpenOffice">OpenOffice</option>
      <option value="Basic">Basic</option>
      <option value="Oracle 8">Oracle 8 </option>
      <option value="SQL">SQL</option>
      <option value="Pascal">Pascal</option>
      <option value="Perl">Perl</option>
      <option value="PHP-Brief">PHP-Brief</option>
      <option value="PHP">PHP</option>
      <option value="Python">Python</option>
      <option value="Q(uick) BASIC">Q(uick) BASIC</option>
      <option value="Ruby">Ruby</option>
      <option value="Scheme">Scheme</option>
      <option value="SDLBasic">SDLBasic</option>
      <option value="Smarty SQL">Smarty SQL </option>
      <option value="Visual BASIC . NET">Visual BASIC .NET</option>
      <option value="Visual BASIC">Visual BASIC </option>
      <option value="VHDL">VHDL</option>
      <option value="Visual Fox Pro ">Visual Fox Pro</option>
      <option value="XML">XML </option>
      </select>
    
    <br />
    Referencias externas:
    <textarea id="referencias externas"></textarea>
    </p>
  <p>Referencias internas:
    <textarea id="referencias internas"></textarea>
         </p>
  <p>
    <input type="submit" value="Adicionar" id="Submit" /> 
    </p>
</form>

E este é o código do script que, supostamente, insere dados na base de dados através do formulário:

<?php

include("dados_login.php");

$ligacao=mysql_connect("$localhost","$utilizador","$password") or die("Impossivel aceder á base de dados. Contacte o administrador.");

mysql_select_db($base_dados,$ligacao);

$codename=$_POST["codename"];
$utilizador="deathseeker25";
$conteudo=$_POST["conteudo"];
$linguagem=$_POST["linguagem"];

$timestamp=time();
$data=date("m/d/y",$timestamp);
$hora=date("G.i:s",$timestamp);

$referencias_externas=$_POST["referencias externas"];
$referencias_internas=$_POST["referencias internas"];

$sql="INSERT INTO codigo (codename,utilizador,conteudo,linguagem,data,hora,referencias externas,referencias internas) VALUES ('$codename','$utilizador','$linguagem','$data','$hora','$referencias_externas','$referencias_internas')";

$resultado=mysql_db_query($base_dados,$sql);

if($resultado)
{	
	echo "Código adicionado com sucesso!";
}

if(is_null($codename) or is_null($conteudo))
{
	echo "Faltam inserir dados!";
}




mysql_close();
?>

Em que é que estou a falhar? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não será no id????

Nos input que eu saiba é name=**** e não id=****

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não será no id????

Nos input que eu saiba é name=**** e não id=****

Já experimentei mudar o id= para name = e continua a não actualizar na base de dados e a dar o erro...

Vou experimentar fazendo umas alterações no script, no entanto podem ir sugerindo possíveis erros... ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me que descobri qual era o erro.

Era no form.

Como usas acentuação tens de dizer o tipo de encode.

<form action="addcode.php" method="post" enctype="multipart/form-data">
  <p>Título:
      <input type="text" name="codename" />
    <br />
    Código:
    <textarea name="conteudo"></textarea>
    <br />
    <br />
    Linguagem:<select name="linguagem"><option value="" selected="selected">GeSHi
     
      </option>
      <option value="ActionScript-French">ActionScript-French</option>
      <option value="ActionScript">ActionScript</option>
      <option value="Ada">Ada</option>
      <option value="Apache">Apache</option>
      <option value="Log">Log</option>
      <option value="AppleScript">AppleScript</option>
      <option value="ASM">ASM</option>
      <option value="ASP">ASP</option>
      <option value="Bash">Bash</option>
      <option value="CAD">CAD</option>
      <option value="DCL">DCL</option>
      <option value="CADLisp">CADLisp</option>
      <option value="C for Macs">C for Macs</option>
      <option value="C++">C++</option>
      <option value="C#">C#</option>
      <option value="CSS">CSS</option>
      <option value="Delphi">Delphi</option>
      <option value="Diff">Diff</option>
      <option value="DIV">DIV</option>
      <option value="DOS">DOS</option>
      <option value="D">D</option>
      <option value="Eiffel">Eiffel</option>
      <option value="FreeBasic">FreeBasic</option>
      <option value="GML">GML</option>
      <option value="HTML4 Strict">HTML4 Strict</option>
      <option value="INI">INI</option>
      <option value="Inno">Inno</option>
      <option value="Java">Java</option>
      <option value="Javascript">Javascript</option>
      <option value="Lisp">Lisp</option>
      <option value="Lua">Lua</option>
      <option value="Matlab">Matlab</option>
      <option value="Microprocessor ASM">Microprocessor ASM</option>
      <option value="MSIS">MSIS</option>
      <option value="Objective C">Objective C</option>
      <option value="OCaml-Brief">OCaml-Brief</option>
      <option value="OpenOffice">OpenOffice</option>
      <option value="Basic">Basic</option>
      <option value="Oracle 8">Oracle 8 </option>
      <option value="SQL">SQL</option>
      <option value="Pascal">Pascal</option>
      <option value="Perl">Perl</option>
      <option value="PHP-Brief">PHP-Brief</option>
      <option value="PHP">PHP</option>
      <option value="Python">Python</option>
      <option value="Q(uick) BASIC">Q(uick) BASIC</option>
      <option value="Ruby">Ruby</option>
      <option value="Scheme">Scheme</option>
      <option value="SDLBasic">SDLBasic</option>
      <option value="Smarty SQL">Smarty SQL </option>
      <option value="Visual BASIC . NET">Visual BASIC .NET</option>
      <option value="Visual BASIC">Visual BASIC </option>
      <option value="VHDL">VHDL</option>
      <option value="Visual Fox Pro ">Visual Fox Pro</option>
      <option value="XML">XML </option>
      </select>
    
    <br />
    Referencias externas:
    <textarea name="referencias_externas"></textarea>
  </p>
  <p>Referencias internas:
    <textarea name="referencias_internas"></textarea>
  </p>
  <p>
    <input type="submit" value="Adicionar" name="Submit" /> 
  </p>
</form>

<?php

include("dados_login.php");

$ligacao=mysql_connect("$localhost","$utilizador","$password") or die("Impossivel aceder á base de dados. Contacte o administrador.");

mysql_select_db($base_dados,$ligacao);

$codename=$_POST['codename'];
$utilizador="deathseeker25";
$conteudo=$_POST['conteudo'];
$linguagem=$_POST['linguagem'];
print $_REQUEST['codename'];
$timestamp=time();
$data=date("m/d/y",$timestamp);
$hora=date("G.i:s",$timestamp);

$referencias_externas=$_POST["referencias_externas"];
$referencias_internas=$_POST["referencias_internas"];

$sql="INSERT INTO codigo (codename,utilizador,conteudo,linguagem,data,hora,referencias externas,referencias internas) VALUES ('$codename','$utilizador','$linguagem','$data','$hora','$referencias_externas','$referencias_internas')";

$resultado=mysql_db_query($base_dados,$sql);

if($resultado)
{	
	echo "Código adicionado com sucesso!";
}

if(is_null($codename) or is_null($conteudo))
{
	echo "Faltam inserir dados!";
}




mysql_close();
?>

Eu aconselho a guardares a data e hora num so campo int em que guardas o time() e assim é so pegar e transformar...

Mas cada um é k sabe como gosta mais.

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Acrescentei o enctype no formulário e continua a não actualizar na base de dados. Seja como for, amanhã tento fazer as modificações necessárias ao script para que este finalmente funcione e possa continuar o meu projecto.

Cumprimentos... ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora bem... aqui vão umas dicas....

olhando só para o código pode ser dificil... o processo de debugging requer alguma perícia e astúcia. Basicamente temos que ir despistando possibilidades...

por isso aconselho a usares truques do tipo para localizares o teu bug:

<?php
//esta parte assim está bem... da para saber se tudo correu bem
$ligacao=mysql_connect("$localhost","$utilizador","$password") or die("Impossivel aceder á base de dados. Contacte o administrador.");

//Aqui vamos fazer basicamente o mesmo
$dbok=mysql_select_db($base_dados,$ligacao);
if($dbok != TRUE){
     echo "erro ao escolher base de dados";
     die;
}
?>

Outra coisa que deves mudar é a função que utilizas para fazer o query... foi descontinuada... a partir da versão 4 deves usar exclusivamente mysql_query()

Para alem de te evitar outros problemas esta função imprime-te a mensagem de erro do mysql para uqe possas saber o que se passou.

outra coisa... experimenta imprimir as variáveis volta e meia para ver se está tudo ok.. usa uma função deste tipo para imprimir um array de forma legível

function  imprimearray( $array_a_imprimir ){
    //isto imprime arrays ou variaveis de forma inteligivel a um humano.
   echo "<pre>".$array_a_imprimir."</pre>";
}

podes por exemplo imprimir o post e ver se está lá tudo no sitio.

Por exemplo.. podes imprimir as strings dos queries, copia-las e pedi-las directamente ao mysql e verificar se o problema é no query ou não.

Assim torna-se muito mais facil encontrar o erro e acaba por ser um processo metódico.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes ter algum dado mal no insert na base de dados.

Eu testei sem base de dados e fazia print do $sql e tava correcto....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes ter algum dado mal no insert na base de dados.

Eu testei sem base de dados e fazia print do $sql e tava correcto....

Não, o problema provavelmente não está na query, já que eu testei retirando as variáveis e acrescentando directamente os valores e a query foi executada com sucesso. Eu penso que há algum problema por parte das variáveis que não estão a ler o que introduzo no formulário.

<form method="post" name="addcode" action="<?php addcode();?>" enctype="multipart/form-data">
  <p>Título:
      <input type="text" name="codename" />
    <br />
    Código:
    <textarea name="conteudo"></textarea>
    <br />
    <br />
    Linguagem:<select name="linguagem"><option value="" selected="selected">GeSHi
     
      </option>
      <option value="ActionScript-French">ActionScript-French</option>
      <option value="ActionScript">ActionScript</option>
      <option value="Ada">Ada</option>
      <option value="Apache">Apache</option>
      <option value="Log">Log</option>
      <option value="AppleScript">AppleScript</option>
      <option value="ASM">ASM</option>
      <option value="ASP">ASP</option>
      <option value="Bash">Bash</option>
      <option value="CAD">CAD</option>
      <option value="DCL">DCL</option>
      <option value="CADLisp">CADLisp</option>
      <option value="C for Macs">C for Macs</option>
      <option value="C++">C++</option>
      <option value="C#">C#</option>
      <option value="CSS">CSS</option>
      <option value="Delphi">Delphi</option>
      <option value="Diff">Diff</option>
      <option value="DIV">DIV</option>
      <option value="DOS">DOS</option>
      <option value="D">D</option>
      <option value="Eiffel">Eiffel</option>
      <option value="FreeBasic">FreeBasic</option>
      <option value="GML">GML</option>
      <option value="HTML4 Strict">HTML4 Strict</option>
      <option value="INI">INI</option>
      <option value="Inno">Inno</option>
      <option value="Java">Java</option>
      <option value="Javascript">Javascript</option>
      <option value="Lisp">Lisp</option>
      <option value="Lua">Lua</option>
      <option value="Matlab">Matlab</option>
      <option value="Microprocessor ASM">Microprocessor ASM</option>
      <option value="MSIS">MSIS</option>
      <option value="Objective C">Objective C</option>
      <option value="OCaml-Brief">OCaml-Brief</option>
      <option value="OpenOffice">OpenOffice</option>
      <option value="Basic">Basic</option>
      <option value="Oracle 8">Oracle 8 </option>
      <option value="SQL">SQL</option>
      <option value="Pascal">Pascal</option>
      <option value="Perl">Perl</option>
      <option value="PHP-Brief">PHP-Brief</option>
      <option value="PHP">PHP</option>
      <option value="Python">Python</option>
      <option value="Q(uick) BASIC">Q(uick) BASIC</option>
      <option value="Ruby">Ruby</option>
      <option value="Scheme">Scheme</option>
      <option value="SDLBasic">SDLBasic</option>
      <option value="Smarty SQL">Smarty SQL </option>
      <option value="Visual BASIC . NET">Visual BASIC .NET</option>
      <option value="Visual BASIC">Visual BASIC </option>
      <option value="VHDL">VHDL</option>
      <option value="Visual Fox Pro ">Visual Fox Pro</option>
      <option value="XML">XML </option>
      </select>
    
    <br />
    Referencias externas:
    <textarea name="referencias_externas"></textarea>
    </p>
  <p>Referencias internas:
    <textarea name="referencias_internas"></textarea>
         </p>
  <p>
    <input type="submit" value="Adicionar" name="Submit" /> 
    </p>
</form>

 </div></td>
  </tr>
  
</table>
<?php

function addcode(){

include("dados_login.php");

$ligacao=mysql_connect("$localhost","$utilizador","$password") or die("Impossivel aceder á base de dados. Contacte o administrador.");

$dbok=mysql_select_db($base_dados,$ligacao);
if($dbok=!TRUE){
	echo "Erro ao escolher base de dados!";
	die;
	}
else{
$codename=$_POST['codename'];
$utilizador="deathseeker25";
$conteudo=$_POST['conteudo'];
$linguagem=$_POST['linguagem'];

$timestamp=time();
$data=date("m/d/y",$timestamp);
$hora=date("G.i:s",$timestamp);

$referencias_externas=$_POST['referencias_externas'];
$referencias_internas=$_POST['referencias_internas'];

$sql="INSERT INTO codigo (codename) VALUES ('$codename')";

$resultado=mysql_query($sql);

if($resultado)
{	
	echo "Código adicionado com sucesso!<br />";
	echo $sql;
}

else{

	die("Erro de base de dados:".mysql_error());
	}

}
}
mysql_close();
?>
</body>
</html>


Fiz algumas alterações no código, pelo que optei por testar tudo no mesmo ficheiro.

O que acontece de momento é que há inserção de registos na base de dados, mas não são inseridos os dados introduzidos no formulário, mas sim todos os registos em branco.

pedrotuga, não percebi a parte do $imprime_array, pelo que optei por não inventar muito para já.

O que poderá estar mal? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

deathseeker25, se postasses os erros que o script mostra já ajudavas ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, parece que temos o problema resolvido.

<?php

function addcode(){

include("dados_login.php");

$ligacao=mysql_connect("$localhost","$utilizador","$password") or die("Impossivel aceder á base de dados. Contacte o administrador.");

$dbok=mysql_select_db($base_dados,$ligacao);
if($dbok=!TRUE){
	echo "Erro ao escolher base de dados!";
	die;
	}
else{
$codename=$_POST['codename'];
$utilizador="deathseeker25";
$conteudo=$_POST['conteudo'];
$linguagem=$_POST['linguagem'];

$timestamp=time();
$data=date("y/m/d",$timestamp);
$hora=date("G.i:s",$timestamp);

$referencias_externas=$_POST['referencias_externas'];
$referencias_internas=$_POST['referencias_internas'];

$sql="INSERT INTO codigo (codename,utilizador,conteudo,linguagem,data,hora,referencias_externas,referencias_internas) VALUES ('$codename','$utilizador','$conteudo','$linguagem','$data','$hora','$referencias_externas','$referencias_internas')";

$resultado=mysql_query($sql);

if($resultado)
{	
	echo "Código adicionado com sucesso!<br />";
	echo $sql;
}

else{

	die("Erro de base de dados:".mysql_error());
	}

}
}

?>

<table width="762" height="332" border="0">
  <tr>
    <td width="123"><div align="center">
      <li><a href="addcode.php">Adicionar código</a></li><br />
      <li><a href="editcode.php">Editar código</a></li><br />
      <li><a href="delcode.php">Remover código</a></li><br />
    </div></td>
<td width="629"><div id="addcode" align="center">Adicionar código</div>
<div id="form" align="left">

<?php	if ($_POST['Submit']){
   addcode();
}
else{
  ?>

<form method="post" name="addcode" action="" enctype="multipart/form-data">
  <p>Título:
      <input type="text" name="codename" />
    <br />
    Código:
    <textarea name="conteudo"></textarea>
    <br />
    <br />
    Linguagem:<select name="linguagem"><option value="" selected="selected">GeSHi
     
      </option>
      <option value="ActionScript-French">ActionScript-French</option>
      <option value="ActionScript">ActionScript</option>
      <option value="Ada">Ada</option>
      <option value="Apache">Apache</option>
      <option value="Log">Log</option>
      <option value="AppleScript">AppleScript</option>
      <option value="ASM">ASM</option>
      <option value="ASP">ASP</option>
      <option value="Bash">Bash</option>
      <option value="CAD">CAD</option>
      <option value="DCL">DCL</option>
      <option value="CADLisp">CADLisp</option>
      <option value="C for Macs">C for Macs</option>
      <option value="C++">C++</option>
      <option value="C#">C#</option>
      <option value="CSS">CSS</option>
      <option value="Delphi">Delphi</option>
      <option value="Diff">Diff</option>
      <option value="DIV">DIV</option>
      <option value="DOS">DOS</option>
      <option value="D">D</option>
      <option value="Eiffel">Eiffel</option>
      <option value="FreeBasic">FreeBasic</option>
      <option value="GML">GML</option>
      <option value="HTML4 Strict">HTML4 Strict</option>
      <option value="INI">INI</option>
      <option value="Inno">Inno</option>
      <option value="Java">Java</option>
      <option value="Javascript">Javascript</option>
      <option value="Lisp">Lisp</option>
      <option value="Lua">Lua</option>
      <option value="Matlab">Matlab</option>
      <option value="Microprocessor ASM">Microprocessor ASM</option>
      <option value="MSIS">MSIS</option>
      <option value="Objective C">Objective C</option>
      <option value="OCaml-Brief">OCaml-Brief</option>
      <option value="OpenOffice">OpenOffice</option>
      <option value="Basic">Basic</option>
      <option value="Oracle 8">Oracle 8 </option>
      <option value="SQL">SQL</option>
      <option value="Pascal">Pascal</option>
      <option value="Perl">Perl</option>
      <option value="PHP-Brief">PHP-Brief</option>
      <option value="PHP">PHP</option>
      <option value="Python">Python</option>
      <option value="Q(uick) BASIC">Q(uick) BASIC</option>
      <option value="Ruby">Ruby</option>
      <option value="Scheme">Scheme</option>
      <option value="SDLBasic">SDLBasic</option>
      <option value="Smarty SQL">Smarty SQL </option>
      <option value="Visual BASIC . NET">Visual BASIC .NET</option>
      <option value="Visual BASIC">Visual BASIC </option>
      <option value="VHDL">VHDL</option>
      <option value="Visual Fox Pro ">Visual Fox Pro</option>
      <option value="XML">XML </option>
      </select>
    
    <br />
    Referencias externas:
    <textarea name="referencias_externas"></textarea>
    </p>
  <p>Referencias internas:
    <textarea name="referencias_internas"></textarea>
         </p>
  <p>
    <input type="submit" value="Adicionar" name="Submit" /> 
    </p>
</form>
	<?
	}
	?>

Obrigado a todos pela ajuda. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

deathseeker25, se postasses os erros que o script mostra já ajudavas :P

Pois... na verdade devia estar nas regras de boa afixação aqui no fórum.

Lá está mais uma coisa que me esqueci de dizer.

Quanto ao imprimearray foi uma pequena função que escrevi que serve para veres o conteudo de qq variável.

Experimenta... com uma variavel "semples" e com um array. N era para incluir no código de forma definitiva... é apenas uma prática de debugging.

Assim como o teste da string de um query. N é boa politica ir por lá vlores manualemente antes de o mandar cá para fora para ver se está tudo bem.

Isto são tudo práticas de despistagem de erros, não servem par programar em si mas evitam que se passe horas de volta de dois ou tres erros de esquecimento.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora