Jump to content
MrFilipe

Auto-Increment

Recommended Posts

MrFilipe

Boas pessoal,

Gostaria que me ajudassem se possível num problema que estou a ter. Pediram-me para soluciona-lo, mas também não encontro forma de o fazer.

Este código abaixo consiste numa inserção para uma BD, mas de momento não esta a fazer-lo, porque na tabela seleccionada existe um auto-increment, eu ja testei fazer um insert no phpmyadmin e funciona.

Gostaria de saber como tenho de fazer para que ele funcione direito com este código???

<?php
$nome_em = $_POST['nome_em'];
$pri_nom = $_POST['pri_nom'];
$apelido = $_POST['apelido'];
$email = $_POST['email'];
$codigo_ar = $_POST['codigo_ar'];
$numerote = $_POST['numerote'];
$morada = $_POST['morada'];
$complemento = $_POST['complemento'];
$localidade = $_POST['localidade'];
$distrito = $_POST['distrito'];
$cod_postal = $_POST['cod_postal'];
$pais = $_POST['pais'];
$tipo_of = $_POST['tipo_of'];
$funcao = $_POST['funcao'];
$num_vagas = $_POST['num_vagas'];
$decricaosum = $_POST['decricaosum'];
$descricao_per = $_POST['descricao_per'];
$con_infor = $_POST['con_infor'];
$per_laboral = $_POST['per_laboral'];
$vin_laboral = $_POST['vin_laboral'];
$local_tra = $_POST['local_tra'];
$dat_inicio = $_POST['dat_inicio'];
$dat_limite = $_POST['dat_limite'];
$forma_can = $_POST['forma_can'];
$outras_inf = $_POST['outras_inf'];

    if (!$nome_em || !$pri_nom || !$apelido || !$email|| !$codigo_ar || !$numerote || !$morada || !$complemento || !$localidade || !$distrito || !$cod_postal || !$pais || !$tipo_of || !$funcao || !$num_vagas || !$decricaosum || !$descricao_per || !$con_infor || !$per_laboral || !$vin_laboral || !$local_tra || !$dat_inicio || !$dat_limite || !$forma_can || !$outras_inf ) {
        echo 'Campos em falta. Volte atras e tente novamente.'; exit;}
    echo '<h4>Dados recebidos</h4>';

    $ligax = mysqli_connect('localhost', 'root', '');
    if(!$ligax){
        echo '<p> Erro: Falha na ligacao'; exit;}
    mysqli_select_db($ligax, 'e_107_e');
    $insere = "Insert into ". MPREFIX ."ofestagio 
    values ('" . $nome_em . "','" . $pri_nom . "','" . $apelido . "','" . $email . "','" . $codigo_ar . "','" . $numerote . "','" . $morada . "','" . $complemento . "','" . $localidade . "','" . $distrito . "','" . $cod_postal . "','" . $pais . "','" . $tipo_of . "','" . $funcao . "','" . $num_vagas . "','" . $decricaosum . "','" . $descricao_per . "','" . $con_infor . "','" . $per_laboral . "','" . $vin_laboral . "','" . $local_tra . "','" . $dat_inicio . "','" . $dat_limite . "','" . $forma_can . "','" . $outras_inf . "')";
    $result = mysqli_query($insere, $ligax);
    if ($result)
        echo "<p> Registo efectuado com sucesso. <br>";
    else
        echo "<p> Problemas no registo <br>";
?>

Desde já obrigado.


Abraço.

Share this post


Link to post
Share on other sites
herty

Qual é o campo que é autonumber?

Outra coisa:

Eu aconselhava-te que na query do insert, que indicasses os campos a que estas a fazer o insert

Insert into ofestagio(campo1,campo2) values (valor1,valor2) 

I quando tiveres um campo autonumber ou um campo null que não queiras meter um valor, simplesmente não metas o campo nem o valor

por exemplo o campo1 é autonumber, inseres só o campo2

Insert into ofestagio(campo2) values (valor2) 

Share this post


Link to post
Share on other sites
MrFilipe

Mas não necessário "dizer" que existe um campo auto-increment??

Pois o problema é que eu faço o que tu dizes e dá erro  :)


Abraço.

Share this post


Link to post
Share on other sites
fil79

outra coisa, é recomendado que trates as variáveis POST antes de as inserires na base de dados


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
softklin

Na tua query, experimenta meter o campo de autoincrement com o valor NULL: deve ser assumido o valor por omissão, isto é, o próximo valor.


Tratares os dados significa que deves verificar por caracteres que te possam alterar a query. Solução rápida: abre a ligação com a base de dados antes de obteres os dados do array $_POST, e troca essas linhas conforme o exemplo:

$nome_em = $_POST['nome_em'];
$pri_nom = $_POST['pri_nom'];
$apelido = $_POST['apelido'];
...

passa a

$nome_em = mysql_real_escape_string($_POST['nome_em']);
$pri_nom = mysql_real_escape_string($_POST['pri_nom']);
$apelido = mysql_real_escape_string($_POST['apelido']);
...

Assim, o teu código já não fica vulnerável a SQL Injection. Isto não te resolve o problema que tens actualmente, mas é uma coisa que vais precisar de fazer antes de tornar o site público.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
MrFilipe

Mas eu já tinha tentado anteriormente colocar o valor do auto increment como null, mas mesmo assim não deu  :) .

Só se eu coloquei mal, se fosse possível indicar com o código como o coloco como o valor null???


Abraço.

Share this post


Link to post
Share on other sites
softklin

Simplesmente como NULL (sem aspas ou plicas), desta forma:

INSERT INTO tabela VALUES (NULL, 'valor1', 2, ....)

Podias seguir também a sugestão do Herty, ao colocares os nomes das colunas na query, pois pode ajudar-te a prevenir o erro de estares a atribuir valores errados a outros campos.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá MrFilipe,

A título temporário, altera esta linha:

echo "<p> Problemas no registo <br>";

Para:

echo "<p> Problemas no registo <br> " . mysqli_error();

E tenta fazer o Insert e diz-me qual é o erro que te aparece :) :)

Share this post


Link to post
Share on other sites
ruimcosta

MrFilipe,

No SQL, especifica sempre os campos e respectivos valores. Se tens um campo auto-increment, não o "chames" nesse SQL, porque a auto incrementação é automática, tal como o nome sugere. Sempre que existir um novo registo nessa tabela esse campo irá começar em 1 e continuar em 2,3,4...


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
MrFilipe

Olá MrFilipe,

A título temporário, altera esta linha:

echo "<p> Problemas no registo <br>";

Para:

echo "<p> Problemas no registo <br> " . mysqli_error();

E tenta fazer o Insert e diz-me qual é o erro que te aparece :) :)

Boas,

Ora bem o erro que aparece é este:

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\estagio\script.php on line 38

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\estagio\script.php on line 42


Abraço.

Share this post


Link to post
Share on other sites
MrFilipe

Simplesmente como NULL (sem aspas ou plicas), desta forma:

INSERT INTO tabela VALUES (NULL, 'valor1', 2, ....)

Podias seguir também a sugestão do Herty, ao colocares os nomes das colunas na query, pois pode ajudar-te a prevenir o erro de estares a atribuir valores errados a outros campos.

Mesmo colocando os nomes das colunas da na mesma erro  :)


Abraço.

Share this post


Link to post
Share on other sites
MrFilipe

Fiz echo do sql e apresenta todos os dados que eu insiro do form, o problema esta mesmo quando tenta colocar os dados dentro da BD, porque ele passa bem os dados  :)


Abraço.

Share this post


Link to post
Share on other sites
ruimcosta

MrFilipe:

Tens uma técnica 100% fiável que te permite validar o teu sql.

Após a linha

$insere = "insert .....";

Insere esta:

echo $insere;

Vai mostrar no ecrã o sql, copias e colas no phpmyadmin. O erro que o phpmyadmin te der será mais fiável que o erro que o php te dá, que é genérico.


Abraços e beijinhos,Rui Costa

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn
Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\estagio\script.php on line 38

Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\estagio\script.php on line 42

.... já está visto qual é o problema... pelo menos desta parte.... experimenta alterar esta linha:

$result = mysqli_query($insere, $ligax);

para:

$result = mysqli_query($ligax,$insere);

Já podes remover o mysqli_error() da tua string de erro ...

Share this post


Link to post
Share on other sites
MrFilipe

.... já está visto qual é o problema... pelo menos desta parte.... experimenta alterar esta linha:

$result = mysqli_query($insere, $ligax);

para:

$result = mysqli_query($ligax,$insere);

Já podes remover o mysqli_error() da tua string de erro ...

Tens realmente toda a razão era mesmo isso...  :)

Fica desde já um grande agradecimento a todos que ajudaram  ;)    :)


Abraço.

Share this post


Link to post
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.