你好,我知道我是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,你肯定会成为一名更好的开发人员。