PHP / MySQL:只显示循环中的特定列?

时间:2017-10-04 05:49:37

标签: php mysql loops

我正在编制一个投票系统,用户每个项目最多可以上传20张图像(参见附图)。目前我在每行显示项目ID,图像和文本(文本在同一个项目中是相同的)。当用户向项目添加20个图像时,文本将显示20次。现在我正在尝试重建显示部分(参见附图) - 而不是20行,每个用户和项目应该只有一行,enter image description here但我不知道如何实现这一点。谢谢你的帮助。

这是我的SQL语法:

SELECT * from wp_awa_upload WHERE wp_awa_upload.uid = '$_SESSION[id]' and stat < 3 order by parent_cat, id asc

这是我打印表格结果的部分:

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]; ?>" enctype="multipart/form-data">
 <? $i = 0; ?>
 <? while ($show = mysql_fetch_array($abfrage)) {   ?>
<form action="" method="POST">
<td><? echo $show['parent_cat'];?><br><input name="uid" type="#hidden" class="style13" value="<?php echo $show['uid']; ?>" id="uid" style="width: 40px" readonly /></td>
<td align="center"><a href="<? echo $show['url']; ?>" data-lightbox="<? echo $show['file_name']; ?>" data-title="<? echo $show['file_name']; ?>"><? echo $show['file_name']; ?><br><div class="center-cropped"><img src="<? echo $show['url'] ?>" border="0"><br></a></div><br>©: <input name="copyright" type="text" class="style13" value="<?php if ($rolle <> '1') {echo $show['copyright'];} ?>" id="copyright" style="width: 140px" /><br><? if ( $show['youtube'] <> '') { echo '<a href="'. $show['youtube'] .'" style="color: #CC0000">Youtube</a>'; }?></td>
<td><textarea name ='project' rows='16' cols='30' style="resize: none;"><?php if ($i == 0) { echo $show['project']; } ?></textarea></td>
<td><textarea name ='testimonial' rows='16' cols='30' style="resize: none;"><?php echo $show['testimonial']; ?></textarea><br>
<? if ($show['parent_cat'] == "Bester Styled Shoot") { ?>Styled Shoot Teilnehmer<br>
<textarea name ='styled' rows='8' cols='30' style="resize: none;"><?php echo $show['styled']; } ?></textarea></td> 
<td><textarea name ='beschreibung' rows='16' cols='30' style="resize: none;"><?php echo $show['beschreibung']; ?></textarea></td>
<td><? if ($rolle <> 1 && $show['stat'] == 0 ) { echo '<button type="submit" value="' . $show['id']. '" name="change">Speichern?</button>'; ?><br><? echo '<button type="submit" value="' . $show['id']. '" name="delete">Löschen?</button>'; } ?></td>
<td><? if ($rolle == '1') { ?>
<select name="rating" class="style28" style="width: 120px" id="rating">
    <option value="0">0</option>
    <option value="5">5</option>
    <option value="15">15</option>
    <option value="20">20</option>
    <option value="25">25</option>
    <option value="30">30</option>   
    <option value="35">35</option>
    <option value="40">40</option>
    <option value="45">45</option>
    <option value="50">50</option>
    <option value="55">55</option>
    <option value="60">60</option>
    <option value="65">65</option>
    <option value="70">70</option>
    <option value="75">75</option>
    <option value="80">80</option>
    <option value="85">85</option>
    <option value="90">90</option>
    <option value="95">95</option>
    <option value="100">100</option>
    </select> <? echo '<button type="submit" value="' . $show['id']. '" name="submit">Bewerten?</button>'; }

    elseif ($rolle == 9) {

        echo '<button type="freigeben" value="' . $show['id']. '" name="freigeben">Freigeben?</button>';
        echo '<button type="verwerfen" value="' . $show['id']. '" name="verwerfen">Verwerfen?</button><br><br>';
        echo '<hr><br>'; ?>
        E-Mail an Kunden schreiben:<br><textarea name ='informed' rows='8' cols='30' style="resize: none;"></textarea><br> 
        <? echo '<button type="informieren" value="' . $show['id']. '" name="informieren">Informieren?</button>'; 



    }?></td>

  </form>

  

我试过$ i = 0;然后使用“if $ i == 0 {}但是,如果用户有多个项目(另一个项目将不会显示),则无效

感谢您的帮助!

亲切的问候,Stefan

4 个答案:

答案 0 :(得分:0)

我想你想要显示所有类似项目图像的常用文本,并使用与其相关的id&amp;图像。

您可以通过创建用于管理图像和图像的子阵列来实现此目的。 id&amp;用于文本描述的主数组。每当收到同样的描述时,它就会打破循环和放大。后续数据将作为主数组的子数组添加。试试这个。希望它有所帮助

$mainArry = array();
        foreach($arrData as $item){     
            $idx = 0;
            foreach($mainArry as $cat){
                if($cat['text_description'] == $item['text_description']){
                    break;
                }
                $idx++;
            }

            $itemArry = array('id'=> ,'images' => );    
            if($idx >= 0){
                $mainArry[$idx]['text_description'] = $item['text_description'];                
                $mainArry[$idx]['items'][] = $itemArry;         
            }   
        }

答案 1 :(得分:0)

在将数据用于模板之前,您应该对数据进行预处理(数据按摩)。

您可以先将具有类似项目的行分组

示例:

$processed_data = array();
foreach($rows as $row){
   $processed_data[$row["project_id"][] = $row;
}

通过这种方式,你可以拥有这样的东西;

[
  1 => [
    [project 1, image1...]
    [project 1, image2...]
    [project 1, image3...]
  ],
  2 => [
    [project 2, image1...]
    [project 2, image2...]  
    .....
  ]
]

然后在您的模板中,您将更容易显示具有类似组

的数据

答案 2 :(得分:0)

我在下面提到了两种方法。

请注意,这些解决方案基于以下假设给出 1.您正在使用PHP 2.数据库字段名称是userid,prjoject,text,image 3.您已将imge src存储在数据库中。

方法1:

  h.innerHTML = text;
  document.body.appendChild(h);

以上查询按预期返回数据。现在您只需要将这些数据填充到html表中。

方法2:

使用关联数组按用户和项目在php代码中对数据进行分组。

$ sql =“SELECT * FROM your_table”;

获取PHP关联数组的查询结果。我假设变量名是$ data

SELECT userid, project, 
GROUP_CONCAT(image separator ',') as images_list, 
GROUP_CONCAT(image separator ',') as text_list 
FROM  your_table
GROUP BY userid,project

<强> HTML:

$result = array();

foreach($data as $row) {
    $userid = $row['userid'];
    $project = $row['project'];
    $result[$userid][$project]['text'][] = array('text' => $row['text'], 'image' => $row['image']);
}

以下链接可能有助于您更好地理解。

  1. MySql GROUP_CONCAT
  2. PHP Associative array.

答案 3 :(得分:0)

嗨,谢谢你到目前为止的答案。我几乎可以说“已经解决”: - )

$sql = "SELECT * from wp_awa_upload where stat = '0' order by parent_cat asc";
if (!$result = $mysqli->query($sql)) {
// Oh no! The query failed. 
echo "Sorry, the website is experiencing problems.";

// Again, do not do this on a public site, but we'll show you how
// to get the error information
echo "Error: Our query failed to execute and here is why: \n";
echo "Query: " . $sql . "\n";
echo "Errno: " . $mysqli->errno . "\n";
echo "Error: " . $mysqli->error . "\n";
exit;
}

 $last_entry = null;


echo "<table width='100%' border='1' align='center'><tr>";

echo "<tr>";

    echo "<td align='center'>Projektnamen</td>";
    echo "<td align='center'>UID</td>";
    echo "<td align='center'>Kategorie</td>";
    echo "<td align='center'>Projektbeschreibung</td>";
    echo "<td align='center'>Beschreibung</td>";
    echo "<td align='center'>Copyright</td>";
    echo "<td align='center'>Tools</td>";


echo "</tr>";


while ($row = $result->fetch_object()) {

echo "<tr>";

if ($last_entry != $row->project) {

echo "<td align='center'><textarea name ='project' rows='16' cols='30'     style='resize: none'>".$row->project."</textarea></td>";
    echo "<td align='center'>".$row->uid."</td>";
    echo "<td align='center'>".$row->parent_cat."</td>";
    echo "<td align='center'><textarea name ='project_desc' rows='16' cols='30' style='resize: none'>".$row->project_desc."</textarea></td>";
    echo "<td align='center'><textarea name ='beschreibung' rows='16' cols='30' style='resize: none'>".$row->beschreibung."</textarea></td>";
    echo "<td align='center'>".$row->copyright."</td>";
    echo "<td align='center'>Buttons</td>";
echo "</tr>";
echo "<tr>"; 
    $last_entry = $row->project;


}

    //echo "<td align='center' colspan='6'><img src=".$row->url."<border='0'>   </td>"; 
    echo "<td align='center' colspan='7'>";
    echo "<a href='".$row->url."' data-lightbox='".$row->file_name."' data-title='".$row->file_name."'><br><div class='center-cropped'><img src='".$row->url."' border='0'></a></div>";

}
echo "</tr>";
echo "</table>";      

描述,类别......将仅显示一次,图像将显示,但不会并排显示 - 它们将以换行符显示。

我的问题:如何并排显示图像(连续4张?)因为在一个项目中我最多可以有20张图像,所以最好以4包和最大包装显示它们。 5行。

感谢您的帮助和帮助。

亲切的问候,

的Stefan