Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tiago j.a

[Resolvido] Inserindo dados no banco

Recommended Posts

Bom dia pessoal, eu estou com um problema de inserção no banco de dados, ele está inserindo apenas o último campo do formulário.

Eu tenho um formulário, onde esse formulário possui vários valores, é um array.

E quando envio para o banco, envio os dados para duas tabelas, com um loop, mas ele está enviando para o banco apenas o último.

esse é o código de envio:

if(isset($_POST['fornecedor'])){
        //$fornecedor = $_POST['fornecedor'];
        foreach($_POST['data'] as $IdArray => $ValueArray)
		?><br /><a href="index.php?link=2" class="textocentro">Voltar<br /></a><?php
		{
				if (($_POST['data'][$IdArray] == "" || $_POST['equipamento'][$IdArray] == "" || $_POST['numero_certificado'][$IdArray] == "" || $_FILES['pdf']['name'][$IdArray] == ""))
				{
				echo "Nao foi possivel inserir os dados do campo: "; 
				echo $IdArray + 1;
				echo "<br>";
				}
				else
				{
				if(isset($INSERT)){
					
                        $INSERT .=  ",('$fornecedor[0]','".$_POST['data'][$IdArray]."','".$_POST['numero_certificado'][$IdArray]."','".$_FILES['pdf']['name'][$IdArray]."')";
						$INSERT2 .=  ",('$fornecedor[0]','".$_POST['numero_certificado'][$IdArray]."','".$_POST['equipamento'][$IdArray]."')";
                }
				else{
                        $INSERT = "INSERT INTO certificado (fornecedor,data,numero_certificado,pdf) values ('$fornecedor[0]','".$_POST['data'][$IdArray]."','".$_POST['numero_certificado'][$IdArray]."','".$_FILES['pdf']['name'][$IdArray]."')";
						$INSERT2 = "INSERT INTO equipamento (fornecedor,numero_certificado,equipamento) values ('$fornecedor[0]','".$_POST['numero_certificado'][$IdArray]."','".$_POST['equipamento'][$IdArray]."')";
				}
        mysql_query($INSERT);
		mysql_query($INSERT2);
		}
		}
        if(isset($INSERT) && isset($INSERT2)){
				echo "<br>";
				echo "Dados corretos enviados com sucesso";
		}
		
}

Desde já agradeço a compreensão e ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Insira uns echos nos blocos para ver onde estão caindo.

E arrume a indentação do código. Está péssimo de entender. Não consegui perceber onde termina cada bloco. Assim fica mais difícil de detectar os problemas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porquê você verifica:

if(isset($INSERT)){

Sem mesmo nao ter nada nessa variável ?

 

Não é para entrar no If propositalmente e entrar no Else ?

 

 

Ps:

Beraldo

E arrume a indentação do código. Está péssimo de entender. Não consegui perceber onde termina cada bloco. Assim fica mais difícil de detectar os problemas.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso,ele entra no else sempre, tirei já aquela verificação.

Ele tá enviando apenas o último, porque, essa parte aqui, está fora do loop, ou isso não tem nada a ver?

mysql_query($INSERT);
mysql_query($INSERT2);

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei dentro do loop, mas continua enviando apenas o último.

if(isset($_POST['fornecedor']))
{
foreach($_POST['data'] as $IdArray => $ValueArray)
?><br /><a href="index.php?link=2" class="textocentro">Voltar<br /></a><?php
{
			if (($_POST['data'][$IdArray] == "" || $_POST['equipamento'][$IdArray] == "" || $_POST['numero_certificado'][$IdArray] == "" || 												$_FILES['pdf']['name'][$IdArray] == ""))
				{
				echo "Nao foi possivel inserir os dados do campo: "; 
				echo $IdArray + 1;
				echo "<br>";
				}
				else
				{
                $INSERT = "INSERT INTO certificado (fornecedor,data,numero_certificado,pdf) values ('$fornecedor[0]','".$_POST['data'][$IdArray]."','".$_POST['numero_certificado'][$IdArray]."','".$_FILES['pdf']['name'][$IdArray]."')";
				$INSERT2 = "INSERT INTO equipamento (fornecedor,numero_certificado,equipamento) values ('$fornecedor[0]','".$_POST['numero_certificado'][$IdArray]."','".$_POST['equipamento'][$IdArray]."')";
				}
		mysql_query($INSERT);
		mysql_query($INSERT2);
}				
        if(isset($INSERT) && isset($INSERT2))
		{	
		echo "<br>";
		echo "Dados corretos enviados com sucesso";
		}
		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só um detalhe, no seu insert você colocou isso:

$_POST['data'][$IdArray]

Mas no Foreach você declarou isso como $ValueArray, então porque você nao coloca:

$ValueArray[$IdArray]

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

outra coisa é que você está inserindo conteúdo entre o foreach e a chave de abertura. Junte as duas partes

 

$INSERT e $INSERT2 são strings. Sempre retornarão TRUE. Você tem que testar o retorno de mysql_query. Mais precisamente, precisa usar a função mysql_affected_rows para determinar o número de linhas afetadas pelo comando SQL.

 

Sua indentação ainda está deprimente. Desculpe a sinceridade.

Já pensou em alinahr os blocos? É bem mais fácil de entender:

 

foreach( ... )
{
    if ( ... )
    {
        ...
    }
    else
    {
        if ( ... )
        {
            ...
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

uahsuahsua

desculpa a bagunça, é que faz pouco que começei, isso não justifica mas, to meio enrolado ainda .prometo que vou fazerda maneira certa.

 

usei a função que me passou, e me retornou:

 

Warning: mysql_affected_rows() expects parameter 1 to be resource, string given in C:\xampp\htdocs\quali\Admin\teste_qualipar\cadastra_certificado.php on line 105

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre como fez.

 

Provavelmente colocou uma string como parâmetro. Veja a documentação da função:

 

http://www.php.net/manual/en/function.mysql-affected-rows.php

 

O parâmetro é opcional, mas, se passar parâmetor, deve ser o link de conexão

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só ler o link que passei.

 

Returns the number of affected rows on success, and -1 if the last query failed.

 

A query falhou. Use mysql_error para verificar o erro que foi retornado

 

http://www.php.net/mysql_error

 

 

 

A documentação explica tudo sobre as funções.

Compartilhar este post


Link para o post
Compartilhar em outros sites

passo por parametro o insert, isso?

me retornou o seguinte:

Warning: mysql_error() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\quali\Admin\teste_qualipar\cadastra_certificado.php on line 104

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai está o script, o mysql_affected_rows() imprimi apenas 1, era para imprimir dois valores, pois estou enviando dois campos pelo formulário. eu não sei o que está acontecendo, ele envia apenas o último campo, verifiquei se o for está fazendo o loop corretamente, e está, imprimi as variaveis dentro do loop para ver se tinha valor nelas, e imprimiu corretamente.

$certificado[0]

$certificado[1]

Só que ao enviar para o banco, ele envia apenas o último

 

foreach($_POST['data'] as $IdArray => $ValueArray)
	?><br /><a href="index.php?link=2" class="textocentro">Voltar<br /></a><?php
	{
			if (($_POST['data'][$IdArray] == "" || $_POST['equipamento'][$IdArray] == "" || $_POST['numero_certificado'][$IdArray] == "" || 												$_FILES['pdf']['name'][$IdArray] == ""))
			{
				echo "Nao foi possivel inserir os dados do campo: "; 
				echo $IdArray + 1;
				echo "<br>";
			}
			else
			{
                $INSERT = "INSERT INTO certificado (fornecedor,data,numero_certificado,pdf) values ('$fornecedor[0]','".$_POST['data'][$IdArray]."','".$_POST['numero_certificado'][$IdArray]."','".$_FILES['pdf']['name'][$IdArray]."')";
				$INSERT2 = "INSERT INTO equipamento (fornecedor,numero_certificado,equipamento) values ('$fornecedor[0]','".$_POST['numero_certificado'][$IdArray]."','".$_POST['equipamento'][$IdArray]."')";
			}
			mysql_query($INSERT) or exit( mysql_error() );
			mysql_query($INSERT2) or exit( mysql_error() );
			echo mysql_affected_rows();
	}
        		if($INSERT && INSERT2)
				{	
					echo "<br>";
					echo "Dados corretos enviados com sucesso";
				}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu havia citado sobre a chave de abertura de bloco e sobre $INSERT e INSERT2 serem strings. Mas você nem prestou atenção a isto. Leia os posts inteiros.

 

Também falei que mysql_affected_rows pega apenas o total de linhas afetadas do último comando SQL executado. Inclusive postei que você deveria chamar a função duas vezes, uma para cada INSERT.

 

Teste assim:

foreach( $_POST['data'] as $IdArray => $ValueArray )
{
    if (($_POST['data'][$IdArray] == "" || $_POST['equipamento'][$IdArray] == "" || $_POST['numero_certificado'][$IdArray] =="" || $_FILES['pdf']['name'][$IdArray] == ""))
    {
        echo "Nao foi possivel inserir os dados do campo: "; 
        echo $IdArray + 1;
        echo "<br>";
    }
    else
    {
        $INSERT = "INSERT INTO certificado (fornecedor,data,numero_certificado,pdf) values ('$fornecedor[0]','".$_POST['data'][$IdArray]."','".$_POST['numero_certificado'][$IdArray]."','".$_FILES['pdf']['name'][$IdArray]."')";
        $INSERT2 = "INSERT INTO equipamento (fornecedor,numero_certificado,equipamento) values ('$fornecedor[0]','".$_POST['numero_certificado'][$IdArray]."','".$_POST['equipamento'][$IdArray]."')";
    }
    
    echo 'Executando consulta 1: ' . $INSERT;
    $exec = mysql_query($INSERT) or exit( mysql_error() );
    echo 'Consulta 1: ' . echo mysql_affected_rows();
    
    echo 'Executando consulta 1: ' . $INSERT1;
    $exec2 = mysql_query($INSERT2) or exit( mysql_error() );
    echo 'Conusulta 2: ' . mysql_affected_rows();
}

if( $exec && $exec2 )
{       
    echo "<br>";
    echo "Dados corretos enviados com sucesso";
}

 

E sou chato quanto a indentação também. Há linguagens, como Python, que não têm delimitadores de bloco; os blocos são distinguidos por meio de indentação. Se um dia precisar usar uma linguagem assim, vai sofrer com isso.

 

 

 

Execute esse código e poste o resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.