Ir para conteúdo

POWERED BY:

Arquivado

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

biza

[Resolvido] Formulario de edição

Recommended Posts

ola pessoal, estou com essa duvida já alguns meses mas não estou conseguindo resolver, tenho um formulário de inserção que esta funcionando certinho , mas peguei na mesma base e tentei fazer o de edição para no caso de me enganar no insert poder fazer um update. no que que resultou o seguinte.

set_time_limit(0);
$data = date("Y-m-d");

if (isset($_REQUEST['submit'])) 
{ 
$strSQL = 'SELECT id FROM viaturas WHERE id = '.$_GET['id']; // ou o campo de ID que você tenha...
$rs = mysql_query($strSQL);
if (mysql_num_rows($rs) == 1) {

$imagens = $_FILES['arquivo'];
for($g=0; $g<=7; $g++)
//for($g=0; $g < sizeof($imagens); $g++)
// for ($g = 0; $g < count($imagens); $g++)
if($nome = $_FILES['arquivo']['name'][$g] != ""){ // para campos vazios
{
        $nome = $_FILES['arquivo']['name'][$g];
        $tipo = $_FILES['arquivo']['type'][$g];
        $tmpname = $_FILES['arquivo']['tmp_name'][$g];

        $renomear = md5(uniqid(rand(), true)); // nome aleatorio
        $nome_grande  = ($renomear . "-g.jpg"); // cria nome da imagem
      
        
        $matriz[] = $nome_grande;
        
        
        $pasta_imagens = "../cars/"; //diretorio pra onde vai a imagem
        $caminho = $pasta_imagens . $nome; // caminho com nome da imagem e local para guardar


if(move_uploaded_file($tmpname, $caminho)) // move a tmp_name pro caminho dado
        {
                list($pontoX, $pontoY, $tipo) = getimagesize($caminho);
                list($pontoX, $pontoY, $tipo) = getimagesize($caminho);
                $img = imagecreatefromjpeg($caminho);
                $largura_maxima = 640; //largura máxima
                $altura_maxima = 480; //altura máxima

                        if ($pontoX == $pontoY) { // se a altura e largura originais forem iguais
                        $largura = $largura_maxima;
                        $altura = $largura_maxima;
                        }
                        elseif ($pontoX >= $pontoY) { // se a largura for maior que a altura
                        $nova_largura = $largura_maxima;
                        $nova_altura = ($pontoY*$nova_largura)/$pontoX;
                                // mas se depois da redução a altura for maior que $altura_maxima então reduz novamente
                                if ($nova_altura >= $altura_maxima) {
                                $altura = $altura_maxima;
                                $largura = ($nova_largura*$altura)/$nova_altura;
                                }
                                else {
                                $largura = $largura_maxima;
                                $altura = ($pontoY*$largura)/$pontoX;
                                }
                        }
                        elseif ($pontoX <= $pontoY) { // se a largura for menor que a altura
                        $nova_altura = $altura_maxima; 
                        $nova_largura = ($pontoX*$nova_altura)/$pontoY;
                                // mas se depois da redução a largura for maior que a $largura_maxima então reduz novamente
                                if ($nova_largura >= $largura_maxima) {
                                $largura = $largura_maxima;
                                $altura = ($nova_altura*$largura)/$nova_largura;
                                }
                                else {
                                $altura = $altura_maxima; 
                                $largura = ($pontoX*$altura)/$pontoY;
                                }
                        }

                        $foto_grande = imagecreatetruecolor($largura, $altura); // aqui eu pego a imagem no caminho e jogo na memoria
                        imagecopyresampled($foto_grande, $img, 0, 0, 0, 0, $largura, $altura, $pontoX, $pontoY); // sample da imagem com o tamanho
                        imagejpeg($foto_grande, $pasta_imagens . $nome_grande, 100);
						
						unlink($caminho); // apaga a imagem original
		
	        } // if move_uploaded_file
}
 $sql_insere= mysql_query("UPDATE viaturas SET imagem1='$matriz[0]', imagem2='$matriz[1]', imagem3='$matriz[2]', imagem4='$matriz[3]', imagem5='$matriz[4]', imagem6='$matriz[5]', imagem7='$matriz[6]', imagem8='$matriz[7]' WHERE id=".$_GET['id']);

problema:

imagina que fiz inicialmente um insert de 4 imagens, e verifiquei apos enviar as imagens para o banco de dados que tinha mais três imagens para enviar. Vou ao formulário de edição e na posição 5, 6, 7 carrego novas imagens . eu queria que ele no banco de dados com o id pertencente a viatura , não me apagasse as imagens 1, 2 , 3, 4.

Mas imagina que uma das imagens que ja existe no banco de dados não é a correcta e eu queria fazer um update de uma certa imagem, gostaria que ela me fizesse um unlink da imagem no destino e me carrega-se a nova.

não estou conseguindo nada disto, é essa minha necessidade. Quem puder me ajude please

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi nada biza. Não entendi sua estrutura, não entendi o que está acontecendo de errado

e principalmente não tenho sua estrutura para testar e não compreendi exatamente o que você quer fazer. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Então tentemos da seguinte forma, passo a passo. Qual é o primeiro erro que deseja corrigir?

Qual é o trecho do código que está dando erro? Repare que eu disse trecho (não o código PHP inteiro).

 

Sem conhecer sua estrutura e saber direito o que você quer fazer esse código postado não ajuda nem a você

e nem a nós a lhe ajudar. Então explique melhor oque quer fazer e passo a passo. O primeiro problema, e o trecho

onde você está tentando obter a solução para analizarmos o que tem de errado.

 

Ta tudo muito confuso e só de ler o que você escreveu eu não consigo imaginar nada ^_^

 

Da uma melhorada ae para que fique mais claro.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo

 

Aquela estrutura de código que eu passei esta funcionando como insert eu gostaria de tornar esse código como update.

Para no caso de um formulario de edição, poder fazer o update dos dados que estiverem errados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendido biza mas aonde está dando o erro?

Qual é a sua dificuldade?

 

Ou você está aguardando alguém pegar este código

e entrega-lo pronto já atualizando a sua base? :huh:

 

Acredito que não seja isto né?

 

Poste os trechos onde estão ocorrendo os erros e quais

as suas dificuldades.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A dificuldade esta em fazer o seguinte, visto o codigo funcionar...

1º gostaria de fazer uma verificação na base de dados se aquele local da imagem que pretendo upar ja esta preenchido em caso de estar o que ele faz é unlink da existente no destino e apaga na base de dados aquela imagem após isso e corre o codigo mensionado acima para upar a imagem e de seguida redimencionar.

Parece simples falando mas essa é a parte da dificuldade, fazer a verificação , visto eu ter feito isto tipo como se fosse um array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal biza. Já sabemos o que você não está conseguindo fazer.

 

Qual parte específica do código você está tentando fazer que não está dando

certo? Qual erro exibi na tela pra você? Mostre o trecho que não funciona do

qual você desenvolveu.

 

Poste para nós os trechos e erros que aparecem na tela. ^_^

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não estou conseguindo escrever o trecho que faz a verificação ou me devolve os campos de imagem preenchida, que seria antes desta linha:

 

$imagens = $_FILES['arquivo'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

E quais foram os testes que você já tentou fazer acima desta linha:

 

$imagens = $_FILES['arquivo'];
?

 

Poste os códigos que você tentou fazer acima desta linha e explique o que deu de errado

se possível com as mensagens de erro.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom periscuelo vamos por partes :

-1º fiz um select para devolver os itens que naquele id , ou naquela linha eu tinha guardado , no insert.(finalidade= editar o conteudo);

$sql1 = "Select imagem1, imagem2, imagem3, imagem4, imagem5, imagem6, imagem7, imagem8 FROM viaturas where id=".$_GET['id'];
          $sql1 = mysql_query($sql) or die ("a pesquisa não foi bem sucedida");
      
          $imgs = mysql_fetch_array($sql1);
		  
		  $arquivo[0] = $imgs['Foto1'];
          $arquivo[1] = $imgs['Foto2'];
          $arquivo[2] = $imgs['Foto3'];
          $arquivo[3] = $imgs['Foto4'];
          $arquivo[4] = $imgs['Foto5'];
		  $arquivo[5] = $imgs['Foto6'];
          $arquivo[6] = $imgs['Foto7'];
          $arquivo[7] = $imgs['Foto8']; 
ou seja cada um destes arquivos simboliza um input file.

Após isso dei o nome da pasta destino:

$pasta_imagens = "../cars/";
de seguida inclui o for para dizer que qualquer campo input estava numerado de 1 a 8, com o arquivo a salvar no destino co campo input numero(etc);

 $pasta_imagens = "../cars/";
		  for ($i=0; $i<7;$i++)    {      
            $foto_mini = $pasta_imagens.$arquivo[$i];
}

Pronto periscuelo aqui começa o meu real problema:

tenho 8 input file , para me devolver o nome das imagens para eu fazer a edição, agora você imagina que nesses 8 campos eu so quero editar 2 deles (aleatório 4 e 7 por exemplo), que acontece com o restante ? sobe campos em branco e não elimina as imagens que eu troquei . a dificuldade esta ai criar uma igualdade, verificar se ouve substituição o que foi substituído foi eliminado e substituido o que não foi eliminado mantém as mesmas imagens ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então biza no trecho abaixo:

 

 $pasta_imagens = "../cars/";
		  for ($i=0; $i<7;$i++)    {      
            $foto_mini = $pasta_imagens.$arquivo[$i];
}
Dentro deste for você teria de estar trabalhando com $foto_mini.

Ou seja todo o resto do código deveria estar ai dentro tratando da foto visto que são varias.

 

Pelo que entendi o $foto_mini deveria ser um array com as novas imagens aonde você vai fazer o update depois certo?

Se for isso você tem que tornar $foto_mini um array para depois fazer o update fora do loop.

 

Eu entendi certo ou faltou algo?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem periscuelo não estou a entender mais nada.

 

 $pasta_imagens = "../cars/";
		  for ($i=0; $i<7;$i++)    {      
            $foto_mini = $pasta_imagens.$arquivo[$i];
}
eu com a variável "$pasta_imagens" estou a dar a direcção do destino da pasta onde a imagem esta alojada.

Agora o que queria fazer era uma verificação dos campos de input file se estão preenchidos e visto cada um deles assumir uma posição, ou seja ,1, 2, 3, 4, 5, 6, 7, 8.

Caso eu na posição 3 e 6 deseja-se modificar os ficheiros já existentes eu gostava que ele fosse a pasta destino ou seja "../cars/" e identifica-se as imagens e as remove-se (fizesse um unlink).

Após isso ele fazia somente o update dos campos em que ouvesse alteração .

Caro periscuelo, não é preguiça ou vontade que alguém me faça o meu trabalho, pois trata-se de um trabalho académico, e é a vontade de ter uma boa nota no trabalho, caso se trata-se de uma unica imagem eu sabia fazer a verificação , seria desta forma:

//1ª imagem
if($_FILES['imagem1']['name'])
{
	$target_path = "../cars/";
	$target_path = $target_path . basename( $_FILES['imagem1']['name']); 
	
	//verificar se ja existe uma foto na tabela
	$sqlf="SELECT imagem1 FROM viaturas WHERE id=".$_GET['id'];
	$resultadof = mysql_query($sqlf) or die ("Não foi possível realizar a consulta.");
	if (mysql_num_rows($resultadof)!=0) //se a foto ja existir, ou seja, se a query q vai buscar o nome da foto retornar algum resultado (dia o teste ser se o numero de resultados for diferente de zero) entao remover o ficheiro
	{
		$linhaf=mysql_fetch_array($resultadof);
		//remoçao
		$do = unlink($target_path . $linhaf['foto9']);
		if($do=="1")
	        echo "Imagem antiga removida.";
	    else 
			echo "Erro ao apagar imagem antiga.";
	}
	
	if(move_uploaded_file($_FILES['imagem1']['tmp_name'], $target_path)) {
		echo "O ficheiro ".  basename( $_FILES['imagem1']['name']). 
		" foi enviado com sucesso.";
	} else{
		echo "Erro ao enviar ficheiro. Tente novamente.";
	}
    //actualizar na bd a foto apenas se ela existir
    $sql = "UPDATE viaturas SET imagem1='".$_FILES['imagem1']['name']."' WHERE id = ".$_GET['id'];
    $resultado = mysql_query($sql) or die ("Erro ao actualizar a imagem1.");
}
Caso você me diga como posso num campo de imagem fazer echo das imagens carregadas na database já é uma grande ajuda.

 

<input type="file" name="arquivo[]"/>
como poderia ficar?

 

assim?

value="<input type="file" name="arquivo[]" value="<?php echo $linha['imagem3'] ?>" />
.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então biza, agora sim você me deu um trecho doque já fez.

Agora sim nós não temos que fazer tudo por você.

 

Se eu entendi bem agora você disse oque quer fazer e mostrou um trecho

de código que quase faz oque você precisa. Tudo que precisa agora é

de uma orientação de como pode fazer diferente.

 

Você já tem a faca e o queijo na mão, agora só precisa saber como utilizar.

(Bem diferente de escrever 3 paginas de texto apenas falando oque você precisa né?) ^_^

 

Ainda ficou meu estranho entender bem o que você quer fazer quando disse dar

echo nas imagens do banco de dados porque ainda não entendi oque exatamente

seria o resultado final.

 

Mas com o trecho postado eu entendo o seguinte.

 

Você tem varios caminhos de imagens armazenado no banco de dados e deseja

apagar as imagens selecionas dentro de uma lista certo?

 

Se for isto mesmo não há a necessidade de passar essa informação via input file.

Pode ser até mesmo via input hidden pois para utilizar o unlink você só precisa do

caminho do arquivo certo?

 

Poderia ser assim:

 

<input type="hidden" name="arquivo[]" value="<?php echo $linha['imagem3']" />
Isto dentro de um loop é claro porque imagem3 tem de vir dinamicamente. O Ideal é que no while do mysql_fetch_array

que você fez você armazene os dados em um array para fazer os inputs dentro de um foreach por exemplo.

 

$arr = array();
while($row = mysql_fetch_array($query)) {
    $arr[] = $row['caminho_imagem'];
}

foreach ($arr AS $caminho) {
    echo '<input type="hidden" name="arquivo[]" value="'.$caminho.'" />';
}
Entendeu mais ou menos a idéia?

 

Para trabalhar e fazer com que imagem1 seja dinamico (no caso no trecho postado está escrito estaticamente imagem1)

basta também trabalhar com um foreach

 

if (is_array($_POST['arquivo'])) {
    foreach ($_POST['arquivo'] AS $key=>$value) {
        $target_path = $value;
        unlink($target_path);
    }
}
bem mais simples não?

 

E para saber qual registro do bd atualizar basta fazer um select pelos caminhos

que foram passados por POST já que os mesmos estão gravados no banco não?

 

Não sei se entendi bem oque você precisa mas veja agora se isto te ajuda.

 

Abraços.

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.