如何将变量添加到while循环导致php

时间:2014-10-06 23:01:44

标签: php variables while-loop

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

我有3个div

<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 我有一个带有ADD和删除按钮的表单


流程:

用户转到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生成的按钮时,echo生成的输入中的值将传输到并更改隐藏的字段...然后,当单击添加按钮时,用户颜色表将更新...

继承了javascript和相应的php ...

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

<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循环数组之外的数据....所以我在echoed while循环中添加了代码。当我查看视图源代码时,我不仅看到了混乱,而且还有while循环重复了javascript。

另外为了使它能够工作,我必须将添加和删除表单添加到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编码本网站,然后使用这些技术升级网站..如果需要和mysql,请尝试限制对javascript的响应。

道歉:

我很抱歉因为我对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>

2 个答案:

答案 0 :(得分:0)

根本没有使用javascript ,我会考虑解决这个问题:

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

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

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

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

这缺少一些关键步骤,因为这不是“为你写的”网站。您应该在代码中添加var_dump($_POST),以便了解正在发生的事情。

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

答案 1 :(得分:0)

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

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

我看到你在这里尝试了类似的东西:

$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,那么您肯定会成为更好的开发人员。