foreach循环内的表单始终动态分配第一个元素

时间:2015-09-25 22:53:23

标签: javascript php arrays forms foreach

我正在编写一个页面,通过表单允许您编写短语或任何您想要的内容,然后使用foreach循环在页面上显示它们。

我主要以面向对象的方式完成所有事情,创建对象phrasephrase_photo。创建每个phrase后,它会与默认照片一起显示。每张照片旁边都有一个按钮,可以触发上传表单,更改您想要的另一张照片的默认照片。

我在数据库中有两个表,phrasesphrase_photos。两者之间的关系是通过属性

$phrase_photo->phrase_id

因此,如果您更改默认照片,请phrase_photo 将动态创建对象,动态提取$phrase->id值并将其分配给$phrase_photo->phrase_id属性。

foreach循环中的迭代没有给我带来任何问题,但是当我尝试更改让我们说短语#3照片时,$phrase_photo->phrase_id属性总是分配有短语#1 phrase->id属性。

看起来foreach循环中的上传表单更改默认照片从第一个元素开始,不管你是否在迭代中点击另一个元素短语的按钮。这导致我只能更改迭代中第一个短语的照片。

这是代码:

<?php
$id = $session->user_id;
$user = User::find_by_id($id);
$phrases = Phrase::find_all_userid($id);
?>

<?php
    //CODE TO CREATE THE PHRASE OBJECT AND SAVE IT ON DB.
    if(isset($_POST['submit'])){

    global $database;
    $phrase = new Phrase();
    $phrase->user_id=$id;
    $phrase->content=trim($_POST['phrase']);
    $phrase->created=strftime("%Y-%m-%d %H:%M:%S", time());
    $phrase->create(); 
    }
?>
<!--FORM TO WRITE THE PHRASE -->
<section class="write_phrase">
<form action="profile.php" method="post">
<p>Write a phrase:<input type="text" name="phrase" value="" /></p>
<input type="submit" id="submit" name="submit"  style="display: none" onchange="javascript:this.form.submit();"/>
<label for="submit" class="button">Create it!</label>
</form>
</section>

<!--CODE TO DISPLAY ALL THE PHRASES CREATED-->
<section class="display_phrases" > 
<?php foreach($phrases as $phrase){ ?>
<article>
<p><?php echo $phrase->content; ?></a></p> <!--DISPLAY THE ACTUAL PHRASE -->

<?php $phrase_photo = PhraseFoto::find_by_phraseid($phrase->id);?> <!--SEE IF THERE IS CUSTOMIZED PHOTO FOR THE PHRASE -->
<article class="image">
<img src= "<?php if(isset($phrase_photo)){echo "photos_gls/". $phrase_photo->filename;}
            else {echo "images/default.jpg";}?>"/> <!--DISPLAY DEFAULT PHOTO OR CUSTOMIZED PHOTO -->
</article>

<!--FORM TO CHANGE THE DEFAULT PHOTO TO THE PHRASE-->
<form class="photo_up" id="form" action="profile.php" enctype="multipart/form-data" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
<input type="file" id="photo" name="photo" style="display:none" value="upload" onchange="javascript:this.form.submit();"/>
<label for="photo" class="button">Select another photo</label>
<input type="text" name="upload" hidden />


<?php
if(isset($_POST['upload'])){
    $phrase_photo= new PhraseFoto();
    $phrase_photo->phrase_id=$phrase->id; //HERE IS PROBLEM, it always assigns to this attribute the $phrase_id of the first phrase regardless if you are changing the photo of another phrase.
    $phrase_photo->attach_file($_FILES['photo']);
    if($phrase_photo->save()){
        redirect_to("profile.php");
    } else{

    } 
}
?>
</form>
</article>
<?php } ?>
</section>

我希望我足够清楚。如果是这样,你能看到问题并发现我需要更改的内容,以便在循环内部分配表单上传值可以正常工作吗?

0 个答案:

没有答案