Jump to content

Processamente do formulário sem efeito!


deathseeker25

Recommended Posts

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? 😉

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
Share on other 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? 😉

Link to comment
Share on other 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. 😉

Link to comment
Share on other sites

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

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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.