希望你能帮助我....
我有一个下拉菜单,当从单个列请求时工作正常,如下所示:
error_reporting(E_ALL);
if (!isset($_POST['submit'])) {
echo "<form action='"$t'" method='"post'">";
$res=mysql_query("SELECT DISTINCT y FROM $z") or die("Db temp. not available");
echo "<select name=dropdown>";
while($row=mysql_fetch_assoc($res)) {
echo "<option value='"".$hy."'">".$hy."</option>";
}
echo "</select>";
echo "<input value='"SORT'" name='"submit'">";
echo "</form>";
}
else {
$dropdown = empty($_POST['dropdown'])? die ("ERROR: Select from dropdown") : mysql_real_escape_string($_POST['dropdown']);
$d = "DATE_FORMAT( date,'%d/%m/%Y' )as date";
$result = mysql_query("SELECT * , $d FROM $z WHERE y='$dropdown' ORDER BY date DESC");
当我尝试添加额外的列(如下所示)时,使用相同的输出方法,无法识别请求—显示零错误,并且可以在适当的位置回显所有变量。
error_reporting(E_ALL);
if (!isset($_POST['submit'])) {
echo "<form action='"$t'" method='"post'" >";
$query="SELECT DISTINCT x, y FROM $z ORDER BY x";
echo "<dd><select name=dropdown>";
if ($result = mysql_query($query))
{
$numofrows = mysql_num_rows($result);
for($i = 0; $i < $numofrows; $i++) {
$row = mysql_fetch_assoc($result);
if($row['y']=="HOTTEST"){
echo "<option value='"" . $i . "'">" .$hy. "------------" .$hx. "</option>"; }
elseif($row['y']=="GRADUAL"){
echo "<option value='"" . $i . "'">" .$hy. "-----------" .$hx. "</option>"; }
elseif($row['y']=="TOP-Seller"){
echo "<option value='"" . $i . "'">" .$hy. "-----------" .$hx. "</option>"; }
elseif($row['y']=="HOT-Seller"){
echo "<option value='"" . $i . "'">" .$hy. "-----------" .$hx. "</option>"; }
else {
echo "<option value='"" . $i . "'">" .$hy. "----------" .$hx. "</option>"; }
}
}
else {
print "Could not retrieve the data because: 1' . mysql_error() . '";
}
echo "</select>";
echo "<input type='"submit'" value='"SORT'" name='"submit'">";
echo "</form>";
}
else {
$dropdown = empty($_POST['dropdown'])? die ("ERROR: Select from dropdown") : mysql_real_escape_string($_POST['dropdown']);
$d = "DATE_FORMAT( date,'%d/%m/%Y' )as date";
$result = mysql_query("SELECT * , $d FROM $z WHERE y='$dropdown' ORDER BY date DESC");
我希望你能给我讲讲这件事。
谢谢萨米
也许这行得通
if ($result = mysql_query($query)) {
$numofrows = mysql_num_rows($result);
for($i = 0; $i < $numofrows; $i++) {
if (!mysql_data_seek($result, $i)) //add this line
continue; //add this line
$row = mysql_fetch_assoc($result);
........
}
}
我想我理解你的问题。试试这个:
if($row['y']=="HOTTEST"){
echo "<option value='"" . $row['y'] . "'">" .$hy. "------------" .$hx. "</option>"; }
elseif($row['y']=="GRADUAL"){
echo "<option value='"" . $row['y'] . "'">" .$hy. "-----------" .$hx. "</option>"; }
elseif($row['y']=="TOP-Seller"){
echo "<option value='"" . $row['y'] . "'">" .$hy. "-----------" .$hx. "</option>"; }
elseif($row['y']=="HOT-Seller"){
echo "<option value='"" . $row['y'] . "'">" .$hy. "-----------" .$hx. "</option>"; }
else {
echo "<option value='"" . $row['y'] . "'">" .$hy. "----------" .$hx. "</option>"; }
嗯,调试这个非常困难,因为我不能在您的服务器中创建相同的条件。然而,你的代码有很多语法问题。我帮你澄清了…要么它开始工作,要么至少有比我更聪明的人可以进一步调试它。
CSS:.dropdown option {
height: 22px;
width: 255px;
margin-bottom: 3px;
font-weight: bold;
border-bottom: 3px;
background-color: #00FF00; /* This also is the default color */
}
.dropdown .hottest {background-color: #FF020D;}
.dropdown .gradual {background-color: #FFFFFF;}
.dropdown .top-seller {background-color: #FFFF00;}
.dropdown .hot-seller {background-color: orange;}
PHP: // Lets get rid of the notices, as you dont need them for this script
// error_reporting(E_ALL);
// Understanding that this is a sorting dropdown, then we are going to display this all the time:
if ($results = mysql_query('SELECT * FROM EXAMPLE_TABLE ORDER BY COL_X')) {
echo '<form action="" method="post"><select name="dropdown" class="dropdown">';
while ($row = mysql_fetch_assoc($results)) {
$row_y = htmlspecialchars_decode($row['COL_Y']);
$row_x = htmlspecialchars_decode($row['COL_X']);
if ($row['COL_Y'] == "HOTTEST") {
echo '<option value="' . $row['COL_Y'] . '-|-' . $row['COL_X'] . '" class="hottest">' . $row_y . '------------' . $row_x . '</option>';
} elseif ($row['COL_Y'] == "GRADUAL") {
echo '<option value="' . $row['COL_Y'] . '-|-' . $row['COL_X'] . '" class="gradual">' . $row_y . '------------' . $row_x . '</option>';
} elseif ($row['COL_Y'] == "TOP-Seller") {
echo '<option value="' . $row['COL_Y'] . '-|-' . $row['COL_X'] . '" class="top-seller">' . $row_y . '------------' . $row_x . '</option>';
} elseif ($row['COL_Y'] == "HOT-Seller") {
echo '<option value="' . $row['COL_Y'] . '-|-' . $row['COL_X'] . '" class="hot-seller">' . $row_y . '------------' . $row_x . '</option>';
} else {
echo '<option value="' . $row['COL_Y'] . '-|-' . $row['COL_X'] . '">' . $row_y . '------------' . $row_x . '</option>';
}
}
mysql_free_result($results);
echo '</select><input type="submit" value="SORT" name="submit"></form>';
} else {
print 'Could not retrieve the data because: ' . mysql_error();
}
// And when the form has been submitted, then use this:
if ($_POST['submit']) {
list($post_col_y, $post_col_x) = explode('-|-', $_POST['dropdown']);
$results = mysql_query("SELECT *, DATE_FORMAT(date, '%d/%m/%Y' ) AS `date` FROM $w_table WHERE `COL_Y` = '$post_col_y' AND `COL_X` = '$post_col_x' ORDER BY `date` DESC");
} else {
// However, you also need to show some data without any sorting:
$results = mysql_query("SELECT *, DATE_FORMAT(date, '%d/%m/%Y' ) AS `date` FROM $w_table ORDER BY `date` DESC");
}
EDIT 6理解COL_Y是评级,COL_X是类别,并且您希望发布这两个标准,然后在查询中使用。这个脚本现在应该可以了。然而,可能会出现一个问题。因为你的COL_Y和COL_X值可以有特殊字符,所以使用htmlspecialchars()。但是,你不能在选项值中使用htmlspecialchars标记原始数据。否则在查询中无法匹配。
EDIT 5我之前就开始意识到,但我一直在等待你的反馈。现在我已经看到了您正在尝试做的示例,我更新了答案。我很有信心这能成功。您只需要用自己的参数(EXAMPLE_TABLE、COL_Y、COL_X)替换术语。另外,如果你清楚地知道DISTINCT在mysql中的作用,那么你可能应该把它添加回去。
EDIT 4好吧,因为我检查了你的第一次修订…您对代码进行了太多的删减,以至于失去了最初的要点,没有任何意义。我用了你第一次修改的版本。我还添加了CSS部分,这样代码就又有意义了。同时,你也可以看到CSS是如何工作的。我再次添加了htmlspecialchars()
部分,否则你的代码就没有意义了。更改了mysql错误打印位置与<select>
开始和结束的关系。我还改变了条款,因为它们之前没有多大意义。条款为:
- EXAMPLE_TABLE -这段代码中唯一的表,从其中提取所有数据。
- COL_Y -列内的EXAMPLE_TABLE,它似乎是某种评级
- COL_X -该孔代码的第二列。
EDIT 3我去掉DISTINCT x, y
,代之以*
。根据注释和调试进度,这可能会让人感到困惑。
EDIT 2我删除了$hy
和$hx
,因为如果你基于它们的脚本功能。那么它就不可能工作了,因为这些变量在这个脚本的任何地方都没有被设置。
EDIT我稍微编辑了一下代码,因为我开始意识到发生了什么(我很累了)。基本上,为什么你使用for()
mysql结果循环?除了您想使用$i
计数外,它没有任何意义。我把那部分改了,理论上应该行得通。
你基本上应该给我们错误消息,其他变量,mysql表方案和任何其他信息。为什么不解释一下,你为什么要创建这个脚本等等。
指出- 为什么要引用这个字符串?
echo "<input type='"submit'" value='"SORT'" name='"submit'">";
实际上可以使用'
:echo '<input type="submit" ..
- 最后一个
else
没有关闭!isset($_POST['submit']
也没有 -
!isset($_POST['submit'])
?!?你是说empty($_POST['submit'])
吗? - 另外,
!isset($_POST['submit'])
部分没有多大意义。通常,张贴脚本在表单之前。不管怎样,我改变了很多…对不起,但这在我的脑海中更有意义。 - 你不需要像这样结束引号,如果你使用双引号:
echo "<div class='"" . $class . "'" />";
你可以这样做:echo "<div class='"$class'" />";
-
print "Could ... 1' . mysql_error() . '";
无法工作。双引号不能以单引号结束…?! - 为什么变量名这么短?
$z
、$hy
、$hx
等。你总是要写代码,脑子里要有想法……有一天,其他开发人员必须准备好您的代码。即使你!是的,现在你还记得,什么是什么…但5个月后,随着许多新项目的完成,你将不记得$hx
是什么意思。而且,正如你所看到的,现在很难帮助你。