Q:

Update com foreach na base de dados

eu mostro estes dados com o select e depois de o utilizador consultar pode editar três campos: Imagem, Tratamento e Estado. O campo Estado está a fazer o update correto na tabela, mas os campos input type="file" e input type="text" só fica correto se editar uma linha de cada vez. Este é o código:
  $result_cursos = "SELECT centrodb.RegistoManutencao.Id,
       DataRegisto,
       Pedido,
       Outro,
       Descricao,
       Funcionario,
       Imagem,
       Tratamento,
       Estado

FROM centrodb.RegistoManutencao LEFT OUTER JOIN centrodb.InfoLuvas

ON centrodb.InfoLuvas.Id = centrodb.RegistoManutencao.Colaborador

WHERE Estado IS NULL OR Estado <> 'Concluído';";
    $resultado_cursos = mysqli_query($conn, $result_cursos);

$tabela1 .= '<div style="float: center" table align="center">';

$tabela1 .= '<table border="5">';

$tabela1 .= '<tr>';

$tabela1 .='<thead>';

$tabela1 .= '<tr>';

$tabela1 .= '<th>Nº Registo</th>';

$tabela1 .= '<th>Data</th>';

$tabela1 .= '<th>Pedido</th>';

$tabela1 .= '<th>Outro Local</th>';

$tabela1 .= '<th>Descrição</th>';

$tabela1 .= '<th>Colaborador</th>';

$tabela1 .= '<th>Imagem</th>';

$tabela1 .= '<th>Tratamento</th>';

$tabela1 .= '<th>Estado</th>';

$tabela1 .= '</tr>';

$tabela1 .='</thead>'; 

$tabela1 .='<tbody>';

    while($rows_cursos = mysqli_fetch_array($resultado_cursos)) {

$tabela1 .= '<tr>';

$tabela1 .= '<td>'.$rows_cursos['Id'].'</td>';

$tabela1 .= '<td>'.$rows_cursos['DataRegisto'].'</td>';

$tabela1 .= '<td>'.$rows_cursos['Pedido'].'</td>';

$tabela1 .= '<td>'.$rows_cursos['Outro'].'</td>';

$tabela1 .= '<td>'.$rows_cursos['Descricao'].'</td>';

$tabela1 .= '<td>'.$rows_cursos['Funcionario'].'</td>';

$tabela1 .= '<td> <input type="file" name= "Imagem" id= "Imagem" value="'.$rows_cursos['Imagem'].'"></td>';

$tabela1 .= '<td> <input type="text" name= "Tratamento" id= "Tratamento" value="'.$rows_cursos['Tratamento'].'"></td>';

$tabela1 .= '<td> <input type="radio" name= "Id['.$rows_cursos['Id'].']" value="Pendente"> Pendente  <input type="radio" name= "Id['.$rows_cursos['Id'].']" value="Concluido">Concluido</td>';

$tabela1 .= '</tr>'; 
}
$tabela1 .= '</tr>';

$tabela1 .='</tbody>'; 

$tabela1 .= '</table>';

$tabela1 .= '</div>';

echo "<form method='POST' action=''>";

echo $tabela1;

echo "<input type='submit' name='registar' value='Registo'>";
echo "</form>";

?>

Onde depois no update crio as variáveis desta forma e faço update:
<?php  
if(isset($_POST['registar']))
{
$registro = $_POST['Id'];
$tratamento = $_POST['Tratamento'];
$imagem = $_POST['Imagem'];

foreach($registro as $Id => $estado) { 

    $conn->query("UPDATE RegistoManutencao SET Estado='".$estado."', Imagem = '$imagem', Tratamento = '$tratamento' WHERE Id='".$Id."'"); 
} 

}
?>

Eu quero que ao editar mais que uma linha, ele faça o update correto nas linhas que estou a editar e só faz correto no campo estado. No campo imagem e tratamento só fica correto se fizer o update a uma linha de cada vez.

A:

No código altere os names dos inputs Imageme Tratamento
Na tag form você precisa definir o enctype como "multipart/form-data" que indica que o formulário que estamos usando
  vai trabalhar com o envio de arquivos.

..................
..................

$tabela1 .= '<td> <input type="file" name= "Imagem['.$rows_cursos['Id'].']" id= "Imagem"></td>';

$tabela1 .= '<td> <input type="text" name= "Tratamento['.$rows_cursos['Id'].']" id= "Tratamento" value="'.$rows_cursos['Tratamento'].'"></td>';

$tabela1 .= '<td> <input type="radio" name= "Id['.$rows_cursos['Id'].']" value="Pendente"> Pendente  <input type="radio" name= "Id['.$rows_cursos['Id'].']" value="Concluido"> Concluido</td>';

..................
..................

echo "<form method='POST' action='' enctype='multipart/form-data'>";

No update
<?php  
if(isset($_POST['registar']))
{

$registro = $_POST['Id'];

$tratamento = $_POST['Tratamento'];

    foreach ($registro as $Id => $estado) {

      $imagem = $_FILES['Imagem']['tmp_name'][$Id];
      $tamanho = $_FILES['Imagem']['size'][$Id];
      $fp = fopen($imagem, "rb");
      $conteudo = fread($fp, $tamanho);
      $conteudo = addslashes($conteudo);
      fclose($fp);

        $conn->query("UPDATE RegistoManutencao SET Estado='$registro[$Id]', Imagem = '$conteudo', Tratamento = '$tratamento[$Id]' WHERE Id='".$Id."'");

    }

}
?>

Dessa forma, sendo a coluna do tipo BLOB, salvamos as imagens direto na base de dados. Alguns dos problemas mais citados com relação ao armazenamento de imagens numa base de dados é referente a criação de muita sobrecarga numa busca na base de dados. Sugiro salvá-las externamente em diretórios e apenas manter o endereço (caminho) da imagem na base de dados.

variável $_FILES utilizada para a leitura de dados dos arquivos que serão enviados para o servidor

$_FILES é um array, desta forma, quando o formulário for submetido, ele terá seus índices que são conforme o  site do php
    $_FILES[name];
    $_FILES[type];
    $_FILES[tmp_name];
    $_FILES[error];
    $_FILES[size];

De acordo com o comentário

No banco de dados quero guardar a url da imagem, porque ocupa menos espaço.

O input não deve ser do tipo file, e sim do tipo text para digitar o URL
$tabela1 .= '<td> <input type="text" name= "Imagem['.$rows_cursos['Id'].']" id= "Imagem"></td>';

A coluna no banco deve ser tipo varchar
E o PHP é
$registro = $_POST['Id'];

$tratamento = $_POST['Tratamento'];

$imagem = $_POST['Imagem'];

    foreach ($registro as $Id => $estado) {

        $conn->query("UPDATE RegistoDiario SET Estado='$registro[$Id]', Imagem = '$imagem[$Id]', Tratamento = '$tratamento[$Id]' WHERE Id='".$Id."'");

    }

