Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
public function update($idsimages, $dir_images)
{
try {
$stmt = $this->db->prepare("UPDATE images SET
dir_images = :dir_images
WHERE id_images = :id_images");
foreach ($idsimages as $idsimage) {
foreach ($dir_images as $item){
$stmt->bindParam(":id_images", $idsimage);
$stmt->bindParam(":dir_images", $item);
} //end foreach dir_images
$stmt->execute();
} // end foreach idsimages
return true;
}
catch(PDOException $e) {
echo $e->getMessage();
return false;
}
}
As variveis $idsimages (contem os ids que serão atualizados) e $dir_images (contem as urls) são arrays, os dois arrays possuem a mesma quantidade de chaves
Acontece que não esta fazendo o updade, coloquei echo nas duas variaveis e depois do submit imprime repetidamente, varias vezes, as imagens e os ids fora de sequencia
tentei mudar varias vezes os foreachs e tambem inserir if isset para não repetir, mas não consegui
vc fala a função updade php?
Digo para fazer a chamada da sua função de update dentro de um foreach.
Ex:
foreach( $images as $i ){
ImageDAO::Update($i);
}Se for dessa forma:
foreach ($idsimages as $idsimage) {
$stmt = $this->db->prepare("UPDATE images SET
dir_images = :dir_images
WHERE id_images = :id_images");
foreach ($dir_images as $item){
$stmt->bindParam(":id_images", $idsimage);
$stmt->bindParam(":dir_images", $item);
} //end foreach dir_images
$stmt->execute();
} // end foreach idsimages
tentei também, não deu certo,
se fosse só um foreach do array com as urls das imagens ok, mas o problema é que são dois arrays os ids e as imagens
da pra usar do while nesse caso?
Para o codigo da minha pergunta
print_r ($idsimages);
Array ( [0] => 5 [1] => 6 [2] => 7 [3] => 8 )
print_r ($dir_images);
Array ( [0] => uploads/images/image5.jpg [1] => uploads/images/image6.jpg [2] => uploads/images/image7.jpg [3] => uploads/images/image8.jpg)
Se inserir echo na função:
Se inserir echo na função:
$stmt->bindParam(":id_images", $idsimage);
echo $idsimage;
$stmt->bindParam(":dir_images", $item);
echo $item;
apos o submit retorna:
5 image5.PNG 5 image6.jpg 5 image6.jpg 5 image6.jpg
6 image5.PNG 6 image6.jpg 6 image6.jpg 6 image6.jpg
7 image5.PNG 7 image6.jpg 7 image6.jpg 7 image6.jpg
8 image5.PNG 8 image6.jpg 8 image6.jpg 8 image6.jpg
Seu problema é uma questão lógica e uma dificuldade na compreensão dos laços de repetição. E sim, é o problema mais recorrente entre os iniciantes em programação.
O seu primeiro foreach está correto, o segundo que está errado.
Ambos os arrays são paralelos, o que significa que eles "correm em conjunto". Quando você adiciona um foreach dentro do outro, faz com que o array mais interno (segundo foreach) seja percorrido a cada item do foreach externo (primeiro foreach). Isso que está fazendo seu código não funcionar. Você deve possuir apenas um laço de repetição, e recuperar do segundo array, o ítem que faz "par" com o do primeiro, ou seja:
foreach ($idsimages as $key => $idsimage) {
$stmt->bindParam(":id_images", $idsimage);
$stmt->bindParam(":dir_images", $dir_images[$key]);
$stmt->execute();
}>
Seu problema é uma questão lógica e uma dificuldade na compreensão dos laços de repetição. E sim, é o problema mais recorrente entre os iniciantes em programação.
O seu primeiro foreach está correto, o segundo que está errado.
Ambos os arrays são paralelos, o que significa que eles "correm em conjunto". Quando você adiciona um foreach dentro do outro, faz com que o array mais interno (segundo foreach) seja percorrido a cada item do foreach externo (primeiro foreach). Isso que está fazendo seu código não funcionar. Você deve possuir apenas um laço de repetição, e recuperar do segundo array, o ítem que faz "par" com o do primeiro, ou seja:
foreach ($idsimages as $key => $idsimage) {
$stmt->bindParam(":id_images", $idsimage);
$stmt->bindParam(":dir_images", $dir_images[$key]);
$stmt->execute();
}
Funcionou!! @GabrielHeming muito obrigada tão simples a solução. Realmente eu estava com muita dificuldade para entender os laços repetição, e ainda tenho duvidas, sua explicação foi super clara. Muito obrigada :D
Faça diferente.
Chame a função de update dentro de um foreach das imagens, e não o contrário.