如何在php中向while循环结果添加变量


How to add variables to while loop results in php

你好,我知道我是php和编码的新手,但我在论坛和视频中找了好几天,仍然没有找到明确的答案。在我试图打扰你们这些善良的人之前,我已经彻底搜查过了

我有3个分区

<div id="left_div"></div>
<div id="middle_div"></div>
<div id="right_div"></div>

我有一个while循环,它将一些颜色数据输出到left_div

$query = mysql_query("SELECT * FROM colorstyle");
while($data = mysql_fetch_array($query)){
echo "$data[1]";
 }

当我回显数据时,我的结果是

蓝色

红色

绿色

紫色

等等,如果用户看不到他们的颜色,他们可以更新数据库的颜色表。。。。没有什么新东西——所有这些代码都很好用。

注*所有用户都可以访问颜色数据库

middle_div中我有一个带有添加和删除按钮的表格


流程:

用户转到color_update_page.php

left_div显示全局数据库中的可用颜色。

right_div显示用户从全局数据库中选择并添加到数据库中的颜色表中的颜色

当用户在left_div中看到他们想要添加的颜色时,他们单击该颜色,然后单击middle_div中的添加按钮,它会将其添加到right_div 中颜色数据库中的表中


我是如何做到这一点的

为了使while循环结果可点击,我使用了html并在输出中添加了一个按钮

$query = mysql_query("SELECT * FROM colorstyle");
while($data = mysql_fetch_array($query)){
echo "<button value='"$data[1]'" > </button><br>";
 }

为了将按钮的值添加到表单中,我在带有按钮值的按钮旁边添加了一个输入字段,这样我就不必担心用户必须在输入字段中填写值。。。所以现在看起来像这个

$query = mysql_query("SELECT * FROM colorstyle");
while($data = mysql_fetch_array($query)){
echo "<input type='text' value='"$data[1]'"><button value='"$data[1]'" > </button><br>";
 }

下一步,我将有一个隐藏的输入来捕捉回声输入字段的值。。。。。所以现在代码看起来像这个

$query = mysql_query("SELECT * FROM colorstyle");
while($data = mysql_fetch_array($query)){
echo "<input type='text' value='"$data[1]'"><button value='"$data[1]'" > </button>
<br>";
 }
   <input type="text" value="" style="display:none">......  lets call this this_will_change

然后我将使用javascript和onclick函数来更改userInput…的值。。。。因此,当用户单击echo-generated按钮时,echo-generate输入的值将被转移到并更改隐藏的字段。。。然后,当单击添加按钮时,用户颜色表将更新。。。

以下是javascript和相应的php。。。

请注意:id='userInput'已添加到生成的输入标记中。。。。并且CCD_ 9被添加到隐藏输入字段。

<script type='"text/javascript'">
   function changeText2(){
   var userInput = document.getElementById('$data[1]').value;
   document.getElementById('this_will_change').innerHTML = $data[1];
   }
</script>
<?php
       $query = mysql_query("SELECT * FROM colorstyle");
while($data = mysql_fetch_array($query)){
echo "<input id='userInput' type='text' value='"$data[1]'"><button value='"$data[1]'" onclick='changeText2()'  > </button>
<br>";
 }
   <input type="text" value="" style="display:none" id="this_will_change">......  
?>

我面临的问题:

我不知道我不能访问while循环数组之外的数据。。。。所以我在回显while循环中添加了代码。当我查看视图源代码时,这不仅很混乱,我还可以看到javascript随着while循环而重复。

此外,为了使其工作,我必须将add和Delete表单添加到while循环中,while循环也循环并复制表单。

我试着用这个做一个变通,把while循环结果放入一个变量中

$query = mysql_query("SELECT * FROM colors");
while($data = mysql_fetch_array($query)){
echo "$data[0]";
$results[] = $data['0']
}
$results = implode("<br> ",$results);
echo "<button>$results</button>";

这很神奇,但它将整个阵列回声成一个大按钮。。。不像以前那样,数组的所有结果都被分离。。


我在问什么

如何在while循环的每个结果中动态添加一个变量。。由于我不知道用户想要添加什么颜色,所以我不可能添加一个带值的普通变量,除非我手动添加颜色,否则我必须手动创建变量

意味着while循环的结果是否为

蓝色

红色

橙色等

我如何将其更改为

$blue = 'blue';
$red = 'red';
$orange = 'orange';

我知道必须有办法做到这一点,因为我在其他网站上看到了类似的版本。就像在iOffer.com上一样。如果有一个国家你不想卖给它,你可以在left_div中点击该国家(然后突出显示该国家)。。。然后单击middle_div中的"添加"。。。。。。。。。。您的受限制国家/地区列表将更新。


我所调查的内容:

我研究过变量,但每个人都说不应该这样做,我不太理解

我读过很多关于使用AJAX的方法,但我还没有做到。

是的,我知道MySQLi、OOP和jQuery更适合编码,但在开始之前,我想先了解一下如何使用mysql和javascript。我想用mysql对这个网站进行编码,然后用这些技术升级网站。。如果需要,请尝试将响应限制为javascript和mysql。

抱歉:

很抱歉,我对php的无知让我长篇大论。但我读了很多遍,海报从来没有明确描述过他们面临的问题以及他们试图实现的目标。希望我说得清楚,不要惹人生气。提前感谢您的帮助。

以下是它的外观:

<head>
  <style>
 div{
 text-align:center;
 }
 li{
 list-style:none;
 }
 #color_select{
 overflow:auto;
 width:706px;
 #color_select li{
 float:left;
 #left_div{
 border:1px solid black;
 width:300px;
 #middle_div{
 border:1px solid black;
 width:100px;
 #right_div{
 border:1px solid black;
 width:300px;
}
 </style>
</head>
        <body>
<nav id="color_select">
    <ul>
       <li>
          <div id="left_div">
          <label>Available Colors</label>
          </div>
      </li>
      <li>
          <div id="middle_div">
          <label>Available Colors</label>
          </div>
      </li>
      <li>
          <div id="right_div">
          <label>Available Colors</label>
          </div>
      </li>
    </ul>
</nav>
</body>

</html>

如果根本不使用javascript,我会考虑这样解决这个问题:

  • 将您的颜色从数据库中提取到单个变量$colours
  • 通过访问POST变量($coloursSelected = $_POST['colours'])获取已选择的颜色
  • 开始你的表格(<form method="post">
  • 创建一个隐藏的div(style="display: none;"
  • 循环浏览您的颜色,并将它们作为复选框元素添加到隐藏的div(<input type="checkbox" name="colours[]" value="{$colour}" />)中-您需要确保selected="selected"属性已被选中(在$coloursSelected中)
  • 为你的三列做HTML
  • 在第一列中,您将循环显示所有颜色与所选颜色的差异($unselectedColours = array_diff($colours, $coloursSelected);
  • 将这些颜色作为按钮回声到页面上,如下所示:

    <input type="submit" name="added" value="{$color}" />

  • 在右侧栏中,只需循环已经选择的颜色,并以类似的方式回声按钮:

    <input type="submit" name="removed" value="{$color}" />

这缺少了几个关键步骤,因为这不是一个"为你写"的网站。你应该在你的代码中添加一个var_dump($_POST),这样你就可以理解发生了什么

我希望这能把你推向正确的方向。

每当你看到你在重复某件事,通常意味着你做错了什么。

您的方法是错误的——不需要查询数据库那么多次。您获取一次数据,将其放入一个数组中,然后一直使用该数组。

我看到你在这里尝试过这样的东西:

$query = mysql_query("SELECT * FROM colors");
while($data = mysql_fetch_array($query)){
echo "$data[0]";
$results[] = $data['0']
}
$results = implode("<br> ",$results);
echo "<button>$results</button>";

一个回声会打印出一个东西——这里是一个带有内爆阵列的按钮。不好。您希望循环查看所有结果,并为每个结果创建一个按钮。因此:

$query = mysql_query("SELECT * FROM colors");
while($data = mysql_fetch_array($query)){
    echo "$data[0]";
    $results[] = $data['0']
}
for($i = 0; $i < count($results); $i++) {
    echo '<button>', $results[$i], '</button><br/>';
}

现在,这将输出类似于:

<button>Blue</button><br/>
<button>Red</button><br/>
<button>Orange</button><br/>

这里的一个好主意是在这些按钮上添加一些JavaScript控件。让我们添加一个onclick处理程序,它将调用一些函数并将颜色索引作为参数传递。修改后的循环现在看起来是这样的:

for($i = 0; $i < count($results); $i++) {
    echo "<button onclick='buttonClicked($i)'>", $results[$i], '</button><br/>';
}

顺便说一句,jQuery比普通JavaScript更适合编码,是的,更容易学习。。。但也更慢、更重(库的大小),最终,它仍然使用普通的JavaScript。如果你对JavaScript有扎实的了解,而不仅仅是jQuery,你肯定会成为一名更好的开发人员。