Problema com variaveis PHP

The Dealer

Power Member
Mais uma vez,

Tenho o seguinte form (preencher varios campos) em adicionaRegisto.php:

Código:
<?php  include("connectDB.php"); 
    mysql_select_db("notasgest",$connectDB);?>
      
   <b>Adição de registo </b>
<form method="POST" action="adicRegistoSO1.php">
<ul>

<li>Número de aluno<input type="text" name="numero" size="25"></li>
<li>Apelido<input type="text" name="apelido" size="25"></li>
<li>Nome <input type="text" name="nome" size="25"></li>
<li>Curso<input type="text" name="curso" size="25"></li>
<li>Email<input type="text" name="email" size="25"></li>
<li>Número de telefone<input type="text" name="n_telefone" size="25"></li>
</ul>
<p align="left"><input type="submit" value="Adicionar registo">
<input type="reset" value="Limpar Ecrã">
<p align="center">
</p>

E o seguinte código php em adicRegistoSO1.php:

Código:
<?php
        
    include("connectDB.php");
    mysql_select_db("notasgest",$connectDB);
    
    $sql = mysql_query("INSERT INTO alunosso (numero,apelido,nome,curso,email,n_telefone) VALUES('$numero','$apelido','$nome','$curso','$email','$n_telefone')");?>

E estou a ter vários erros de variaveis nao definidas (numero, apelido...).

Como posso eu defini-las neste caso?
 
Utiliza o seguinte código:
PHP:
<?php
    
    $numero = $_POST['numero'];
    $apelido = $_POST['apelido'];
    $nome = $_POST['nome'];
    $curso = $_POST['curso'];
    $email = $_POST['email'];
    $n_telefone = $_POST['n_telefone'];
        
    include("connectDB.php");
    mysql_select_db("notasgest",$connectDB);
    
    $sql = mysql_query("INSERT INTO alunosso (numero,apelido,nome,curso,email,n_telefone) VALUES('$numero','$apelido','$nome','$curso','$email','$n_telefone')");
?>

Completando a explicação do Baderous.

Cumps ;)
 
é isso mas tens de tratar os dados 1º senao tens ai uma falha de segurança grave para um SQL inject attack. wiki: en.wikipedia.org/wiki/SQL_injection , e convém principiar cedo com bons hábitos :)
 
Última edição:
já agora, podes fazer um resumo sobre o que é o SQL_Injection?
Não tenho tempo de ler a wiki agora, mas prometo que leio depois, só quero saber se é para evitar erros de programação, problemas de hacking ou outra coisa qualquer.

Cumps
 
Por acaso está bem explicado e simples na wiki, mas o problema consiste em passar as variáveis directamente para uma query sql sem as &quot;limpar&quot; de dados indesejados. por exemplo se alguém em vez de escrever um numero no campo numero, colocasse por exemplo
PHP:
 ') VALUES('1')&quot;; drop table alunosso; etc.. etcc...
ou seja modificava a query sql... isto é particularmente gravissimo se for usado em scripts com acesso ao publico tipo guestbooks etc.. etc... Costumo usare este codigo para limpar as variaveis
PHP:
 function SQLIJB($value) {      $SQLLixo = array(&quot;\&quot;&quot;, &quot;\\&quot;, &quot;/&quot;, &quot;*&quot;, &quot;'&quot;, &quot;=&quot;, &quot;-&quot;, &quot;#&quot;, &quot;;&quot;, &quot;&quot;, &quot;+&quot;, &quot;%&quot;);     if ($value) { return str_replace($SQLLixo, &quot;&quot;,$value); }     else return; }
depois é so passar a variável pela função
PHP:
 $variavel =  SQLIJB($_POST[&quot;variavel_recebida&quot;]);
 
Última edição:
Ok, obrigado pelo aviso, mas leio isso depois, em casa com tempo, no trabalho não tenho grande tempo para aprofundar este assunto.
thx e cumps
 
Costumo usare este codigo para limpar as variaveis
PHP:
 function SQLIJB($value) {      $SQLLixo = array(&quot;\&quot;&quot;, &quot;\\&quot;, &quot;/&quot;, &quot;*&quot;, &quot;'&quot;, &quot;=&quot;, &quot;-&quot;, &quot;#&quot;, &quot;;&quot;, &quot;&quot;, &quot;+&quot;, &quot;%&quot;);     if ($value) { return str_replace($SQLLixo, &quot;&quot;,$value); }     else return; }
depois é so passar a variável pela função
PHP:
 $variavel =  SQLIJB($_POST[&quot;variavel_recebida&quot;]);
Dei uma vista de olhos nessa tua função. Parece que algo te converteu isso, já agora posto cá a tua versão com algum espaçamento extra.
PHP:
function SQLIJB($value) {
    $SQLLixo = array("\"", "\\", "/", "*", "'", "=", "-", "#", ";", "+", "%");
    if ($value) { 
      return str_replace($SQLLixo, "",$value); 
    }     
    else return; 
  }

Até agora só usava a função
PHP:
$valor_convertido = htmlspecialchars($_POST['campo'], ENT_QUOTES);
que converte o grupo de [ <, >, &, *aspas*, *plicas* ] mas notei que se poderia usar o Backslash para ataques.

Pensei em modificar um pouco a tua informação, visto que ela assim apaga logo quaisquer caracteres especiais (por exemplo se isso fosse o texto de um utilizador que o guardou na base-de-dados ele deparava-se que lhe haviam desaparecido certos caracteres). Ponderei em usar Entidades de HTML, assim a informação fica lá, um pouco codificada mas com html_entity_decode() é fácil descodificar:
PHP:
function SQLIJB($value) {
    $SQLLixo = array("\"", "\\", "/", "*", "'", "=", "-", "#", ";", "<", ">", "+", "%");
    $sql_bonito = array("&#34;", "&#92;", "&#47;", "&#42;", "&#39;", "&#61;", "&#45;", "&#35;", "&#59;", "&#60;", "&#62;", "&#43;", "&#37;");
    if ($value) { 
      return str_replace($SQLLixo, $sql_bonito, $value); 
    }     
    else return false; 
  }

PS: Até tou a ter problemas com o fórum a tentar escrever as entidades que ele me converte logo as cenas.
 
Back
Topo