Php 将结果拆分为两列并保留字母顺序

Php 将结果拆分为两列并保留字母顺序,php,sql,mysqli,Php,Sql,Mysqli,我一直在努力想如何描述我想做什么(也许这就是为什么我找不到任何东西告诉我怎么做…)。我也意识到我做事的方法有点混乱,并不总是最有效的,但我采取了macgyver的方法,它通常会奏效 基本上,我有一个表,我一直在作为一个列表进行响应,表中的ID按插入行的顺序自动递增,并按字母顺序排列。列表越来越长,我想把它分成两列,同时保持字母顺序 相关代码: // grab tags from database excluding already associated tags echo &qu

我一直在努力想如何描述我想做什么(也许这就是为什么我找不到任何东西告诉我怎么做…)。我也意识到我做事的方法有点混乱,并不总是最有效的,但我采取了macgyver的方法,它通常会奏效

基本上,我有一个表,我一直在作为一个列表进行响应,表中的ID按插入行的顺序自动递增,并按字母顺序排列。列表越来越长,我想把它分成两列,同时保持字母顺序

相关代码

    // grab tags from database excluding already associated tags
    echo "<ul id='taglist'>";

    $grabTags = "select * from alltags where t_id not in (select t_tid from tags where t_fid = '$fToDis') order by t_text";
    $runTags = mysqli_query($con, $grabTags);
    
    // echo tags
    while($hereTags = mysqli_fetch_assoc($runTags)){
        
        $tagIdRef = $hereTags['t_id'];
        $tagName = $hereTags['t_text'];
        
        echo "<li><div class='ellis'><div class='ell'><p>$tagName</p></div><div class='elr'><div class='bruhp'><form method='post'><input type='hidden' name='$tagIdRef'><input type='submit' class='howbout' value='Add to Film'></form></div></div></div></li>";
        
        // insert tag associations
        if(isset($_POST["$tagIdRef"])){
            
            $fTAddInit = "insert into tags (t_fid, t_tid) values ('$fToDis', '$tagIdRef')";
            $fTAddRun = mysqli_query($con, $fTAddInit);
            
            // refresh on success
            if($fTAddRun){
                
                echo "Tag added successfully, please hold while the page refreshes";
               
                echo "<meta http-equiv='refresh' content='1'>";
                
            }
            
        }
        
    }
"official" [Add to Film]
based on book [Add to Film]
boxing [Add to Film]
cold yeehaw [Add to Film]
dog [Add to Film]
emotional [Add to Film]
extreme sports [Add to Film]
gambling [Add to Film]
i disagree [Add to Film]
"official" [Add to Film] | based on book [Add to Film]
boxing [Add to Film] | cold yeehaw [Add to Film]
dog [Add to Film] | emotional [Add to Film]
extreme sports [Add to Film] | gambling [Add to Film]
i disagree [Add to Film]
等等

以下是我将其更改为输出的方式:

    // grab tags from database excluding already associated tags
    echo "<ul id='taglist'>";

    $grabTags = "select * from alltags where t_id not in (select t_tid from tags where t_fid = '$fToDis') order by t_text";
    $runTags = mysqli_query($con, $grabTags);
    
    // echo tags
    while($hereTags = mysqli_fetch_assoc($runTags)){
        
        $tagIdRef = $hereTags['t_id'];
        $tagName = $hereTags['t_text'];
        
        echo "<li><div class='ellis'><div class='ell'><p>$tagName</p></div><div class='elr'><div class='bruhp'><form method='post'><input type='hidden' name='$tagIdRef'><input type='submit' class='howbout' value='Add to Film'></form></div></div></div></li>";
        
        // insert tag associations
        if(isset($_POST["$tagIdRef"])){
            
            $fTAddInit = "insert into tags (t_fid, t_tid) values ('$fToDis', '$tagIdRef')";
            $fTAddRun = mysqli_query($con, $fTAddInit);
            
            // refresh on success
            if($fTAddRun){
                
                echo "Tag added successfully, please hold while the page refreshes";
               
                echo "<meta http-equiv='refresh' content='1'>";
                
            }
            
        }
        
    }
"official" [Add to Film]
based on book [Add to Film]
boxing [Add to Film]
cold yeehaw [Add to Film]
dog [Add to Film]
emotional [Add to Film]
extreme sports [Add to Film]
gambling [Add to Film]
i disagree [Add to Film]
"official" [Add to Film] | based on book [Add to Film]
boxing [Add to Film] | cold yeehaw [Add to Film]
dog [Add to Film] | emotional [Add to Film]
extreme sports [Add to Film] | gambling [Add to Film]
i disagree [Add to Film]
等等


我该怎么做呢?

您需要从
ul
li
HTML切换到
div
方法。然后在循环时,你需要跟踪每2个元素,你需要画一条新线

下面是一个使用
方法对代码进行的简单重构

第一行变成

echo”“;
然后循环变为

$count=0;
while($hereTags=mysqli\u fetch\u assoc($runTags)){
$tagIdRef=$hereTags['t_id'];
$tagName=$hereTags['t_text'];
//每两行,你就开始新的一行
如果($count%2==0&&$count>0){
回声“;
}
$count++;
//从李改为td
回显“$tagName

”;
最后在
while
循环的末尾

echo”“;

一个选项是,您可以为已经生成的代码创建css规则

函数jfunAddTag(){
var输入、滤波器、ul、li、a、i、TXT值;
输入=document.getElementById('addtagto');
filter=input.value.toUpperCase();
ul=document.getElementById(“标记列表”);
li=ul.getElementsByTagName('li');
对于(i=0;i-1){
李[i].style.display=“”;
}否则{
li[i].style.display=“无”;
}
}
}
#标记列表{
列表样式类型:无;
填充:0;
}
#口号列表李{
显示:内联块;
宽度:49%;
}
#李艾利斯{
保证金:2倍;
背景:#f0;
边界半径:6px;
填充物:5px;
文本对齐:居中;
}
布鲁赫先生{
裕度:0 10px 0;
}
输入[type=“submit”]{
背景:#222;
颜色:#fff;
边界半径:4px;
}

  • “官方”

  • 根据这本书

  • 拳击

  • 冷耶和


这正是我想要的,但它打破了我最初忘记包含的javascript(将原始帖子编辑为包含),我尝试将js中的ul和li改为table和td,但没有成功(无可否认,我在js方面很差劲)我承认我没有想过尝试css方法,我被我一直在做的所有php oops所吸引。我必须用数字让它看起来像样,但是使用设置宽度的内联块工作起来很有魅力!(“基于书本”来自sql数据库,它回显了所有标签和
  • 标签中的所有内容)您的查询不安全/容易受到注入攻击。请阅读有关预处理语句的内容。@mickmackusa谢谢!!我从来没有听说过预处理语句,但我一直在寻找类似的语句,直到现在都无法找到任何有效的方法!(是时候重新检查整个项目的代码了)