输出一个2列的PHP/MySQL下拉菜单请求


outputing a 2-column PHP/MySQL Dropdown menu request

希望你能帮助我....

我有一个下拉菜单,当从单个列请求时工作正常,如下所示:

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是什么意思。而且,正如你所看到的,现在很难帮助你。