Update data file

-1

I have a question about changing FILE data.

<?php

include("conectar.php");
$id = $_GET['id'];
$sql = mysql_query("Select* From tb_trabalhador WHERE id = $id");
while($exibe = mysql_fetch_array($sql)){

$id = $exibe["id"];

$Nome = $exibe["Nome"];

$Morada = $exibe["Morada"];

$Tipo = $exibe["Tipo"];

$Email = $exibe["Email"];

$AlvaraNumero = $exibe["AlvaraNumero"];

$AlvaraValidade = $exibe["AlvaraValidade"];

$AlvaraAnexo = $exibe["AlvaraAnexo"];
?>
<form action="salvaralteracao.php" method="POST">
    <input type="hidden" name="id" value="<?php echo $id; ?>">
    Nome<input type="Varchar" name="Nome" value="<?php echo $Nome; ?>"><p>
    Morada<input type="Text" name="Morada" value="<?php echo $Morada; ?>"><p>
    Email<input type="text" name="Email" value="<?php echo $Email; ?>"><p>
    AlvaraNumero<input type="integer" name="AlvaraNumero" value="<?php echo   $AlvaraNumero; ?>"><p>
    AlvaraValidade<input type="date" name="AlvaraValidade" value="<?php echo   $AlvaraValidade; ?>"><p>
    <input type="hidden" name="AlvaraAnexo" value="<?php echo $AlvaraAnexo; ?>"><p>

When I show this I get lots of symbols due to the Attachments (PDF I put)

How can I change this by showing the data names of the attachments only?

SaveAlteration.php

   <?php

  include("conectar.php");

  $id = $_POST['id'];

$Nome = $_POST['Nome'];

$Morada = $_POST['Morada'];

$Email = $_POST['Email'];

$AlvaraNumero = $_POST["AlvaraNumero"];

$AlvaraValidade = $_POST["AlvaraValidade"];

if (isset($_FILES[AlvaraAnexo]) && $_FILES[AlvaraAnexo]["name"]!=''){
$nomeTemporario = $_FILES["AlvaraAnexo"]["tmp_name"]; 

$fp = fopen($nomeTemporario, 'r'); 
$AlvaraAnexo = fread($fp, filesize($nomeTemporario)); 
$AlvaraAnexo = addslashes($AlvaraAnexo);

fclose($fp); }

$AcidenteNumero = $_POST["AcidenteNumero"];

$AcidenteValidade = $_POST["AcidenteValidade"];

if (isset($_FILES[AcidenteAnexo]) && $_FILES[AcidenteAnexo]["name"]!=''){

$nomeTemporario = $_FILES["AcidenteAnexo"]["tmp_name"]; 

$fp = fopen($nomeTemporario, 'r'); 
$AcidenteAnexo = fread($fp, filesize($nomeTemporario)); 
$AcidenteAnexo = addslashes($AcidenteAnexo);

fclose($fp)
    (...)
$sqlupdate = "Update tb_trabalhador SET Nome='$Nome',Morada='$Morada',Email='$Email',   AlvaraNumero='$AlvaraNumero',AlvaraValidade='$AlvaraValidade',AlvaraAnexo='$AlvaraAnexo',Aci    denteNumero='$AcidenteNumero',AcidenteValidade='$AcidenteValidade',
AcidenteAnexo='$AcidenteAnexo',SeguroNumero='$SeguroNumero',
 SeguroValidade='$SeguroValidade',SeguroAnexo='$SeguroAnexo',FinancasValidade='$FinancasValidade',
FinancasAnexo='$FinancasAnexo',SocialValidade='$SocialValidade',
SocialAnexo='$SocialAnexo',RemuneracaoValidade='$RemuneracaoValidade',
RemuneracaoAnexo='$RemuneracaoAnexo',InstaladorNumero='$InstaladorNumero',
InstaladorValidade='$InstaladorValidade',InstaladorAnexo='$InstaladorAnexo',
MontadorNumero='$MontadorNumero',MontadorValidade='$MontadorValidade',
MontadorAnexo='$MontadorAnexo' where id=$id ";

 mysql_query($sqlupdate) or die(mysql_error());header('Location: administrador.php');

? >

    
asked by anonymous 04.03.2014 / 17:10

2 answers

1

In order for you to submit a form in order to change all the fields of a certain record in a table containing columns of type BLOB with PDF documents present in it, you should avoid the input fields of type hidden com the contents of the document.

You can circumvent the situation by linking to the existing document so that the user can refer to it. You also apply a input field of type file to upload a new document.

My suggestion then goes through creating a PHP file for the sole purpose of displaying the PDF document in the browser which can be referenced as follows:

<?php

/** Construir link para apresentação de anexo
 *
 * @param integer $id      O id do registo na base de dados
 * @param string $campo    O nome do campo que contém o BLOB a ser apresentado
 *
 * @return string $html    O HTML necessário para apresentar um link
 */
function apresentarLinkParaDocumento ($id, $campo) {

  $href = 'verdocumentos.php?id='.$id.'&amp;documento='.$campo;
  $title = 'Clique para abrir documento';

  $html = '
  <p>
    Visualizar documento existente: <a href="'.$href.'" target="_blank" title="'.$title.'">Clique aqui</a>
  </p>';

  return $html;
}
?>

To be used:

if ($AlvaraAnexo!='')
  $preview = apresentarLinkParaDocumento ($id, $AlvaraAnexo);
else 
  $preview = '';

So you have in the variable $preview the HTML required to display a link to the document if there is data in your $AlvaraAnexo variable. If there is no data it is empty, so it can always be used.

In your form, where you want the link, you apply the variable $preview :

<form action="salvaralteracao.php" method="POST">
  <p>
    <input type="hidden" name="id" value="<?php echo $id; ?>">
    Nome<input type="Varchar" name="Nome" value="<?php echo $Nome; ?>">
  </p>
  <p>
    Morada<input type="Text" name="Morada" value="<?php echo $Morada; ?>">
  </p>
  <p>
    Email<input type="text" name="Email" value="<?php echo $Email; ?>">
  </p>
  <p>
    AlvaraNumero<input type="integer" name="AlvaraNumero" value="<?php echo   $AlvaraNumero; ?>">
  </p>
  <p>
    AlvaraValidade<input type="date" name="AlvaraValidade" value="<?php echo   $AlvaraValidade; ?>">
  </p>
  <p>
    <?php echo $preview; ?>
  </p>
  <!-- Continuação do formulário... -->

Then you have input of type file to load a new document and only you need to check if a new document actually exists to replace the contents of the field in the database:

<input type="file" name="AlvaraAnexo">

When the form is submitted by the user:

// se foi enviado um novo ficheiro
if (isset($_FILES[AlvaraAnexo]) && $_FILES[AlvaraAnexo]["name"]!='') {

  // operações de ler ficheiro para variável

  // consulta à base de dados para actualizar a coluna para este ficheiro
  $consulta = "UPDATE tb_trabalhador SET AlvaraAnexo='$AlvaraAnexoBLOB' WHERE id=$id";

  mysql_query($consulta) or die(mysql_error());
}

// nesta altura o ficheiro novo já foi aplicado na base de dados em vez do antigo, e continuas agora com o resto da operação de actualização.

There are two things mentioned in this answer that I did not elaborate on because they were already discussed in two previous questions:

Update

The query to update the data should be manipulated so as not to tamper with columns of type BLOB that are serving to save files in the database.

For this purpose, and as shown above, you should perform a query for each column of type BLOB when it has received a new file to be stored in the database.

Below is your final query for the remaining columns without reference to the AlvaraAnexo column of type BLOB that has already been manipulated as shown in the illustration above:

/* Removi a linha: "AlvaraAnexo = '$AlvaraAnexo',"
 * Pois essa coluna é actualizada quando verificamos se existe um novo ficheiro
 *
 * Deverás proceder da mesma forma para as restantes
 * colunas do tipo BLOB que guardam um ficheiro
 */
$sqlupdate = "
UPDATE tb_trabalhador 
SET
    Nome = '$Nome',
    Morada = '$Morada',
    Email = '$Email',
    AlvaraNumero = '$AlvaraNumero',
    AlvaraValidade = '$AlvaraValidade',
    AcidenteNumero = '$AcidenteNumero',
    AcidenteValidade = '$AcidenteValidade',
    AcidenteAnexo = '$AcidenteAnexo',
    SeguroNumero = '$SeguroNumero',
    SeguroValidade = '$SeguroValidade',
    SeguroAnexo = '$SeguroAnexo',
    FinancasValidade = '$FinancasValidade',
    FinancasAnexo = '$FinancasAnexo',
    SocialValidade = '$SocialValidade',
    SocialAnexo = '$SocialAnexo',
    RemuneracaoValidade = '$RemuneracaoValidade',
    RemuneracaoAnexo = '$RemuneracaoAnexo',
    InstaladorNumero = '$InstaladorNumero',
    InstaladorValidade = '$InstaladorValidade',
    InstaladorAnexo = '$InstaladorAnexo',
    MontadorNumero = '$MontadorNumero',
    MontadorValidade = '$MontadorValidade',
    MontadorAnexo = '$MontadorAnexo'
WHERE id=$id";

mysql_query($sqlupdate) or die(mysql_error());
header('Location: administrador.php');
    
05.03.2014 / 13:12
0

Try using PDF Parser to convert PDF to text.

    
05.03.2014 / 12:27