我有点难过这个。我正在把我自己的CMS作为一个学习练习。我创建了一个编辑表单,其中一个字段是项目类别的下拉菜单。我正在努力做的是为项目设置正确的默认类别。
逻辑是,我正在尝试将项的id与表中的相应行匹配,然后选择链接到另一个表中包含其中类别的外键。如果外键与类别ID匹配,则必须是默认值。
$ id变量在页面上进一步定义,我测试了它以确认它是否正常工作。
任何帮助都会受到大力赞赏!
(另外我知道使用mysql是不好的做法,但这只是为了学习目的,我打算下次攻击mysqli和PDO)
<div class="cell"><select name="categoryid"><option value=""></option>
<?php
$result = "SELECT categoryid, classescatid
FROM classes
LEFT JOIN classescat ON classes.categoryid=classescat.classescatid
WHERE classesid=$id";
$defcat = mysql_fetch_array($result);
echo $defcat['categoryid'];
echo $defcat['classescatid'];
$catfetch = "SELECT * FROM classescat";
$outcome = mysql_query($catfetch);
while ($row = mysql_fetch_array($outcome)) {
echo '<option value="';
echo $row['classescatid'] . '" ';
if ($defcat['categoryid'] == $defcat['classescatid']) { echo selected; };
echo '>' ;
echo $row['name'];
echo '</option>';
}
?>
</select>
答案 0 :(得分:0)
您不是在比较循环中的当前值,而是总是在循环之外的值。试试这个:
if ($row['classescatid'] == $defcat['classescatid']) { echo ' selected="selected"'; };
答案 1 :(得分:0)
两个问题:
首先,您应该将默认类别ID与当前行中的类别ID进行比较,而不是与$defcat
中的行进行比较。
其次,当你回应它时,你需要引用selected
。
但是,您可以在一个查询中执行所有操作:
SELECT classescatid, name, (classesid IS NOT NULL) isdefault
FROM classescat
LEFT JOIN classes ON classes.categoryid=classescat.classescatid AND classesid = $id
然后你的PHP将是:
while ($row = mysql_fetch_assoc($outcome)) {
echo '<option value="';
echo $row['classescatid'] . '" ';
if ($row['isdefault']) { echo "selected"; };
echo '>' ;
echo $row['name'];
echo '</option>';
}
答案 2 :(得分:0)
你需要在你的回声中引用“选中”...
if ($defcat['categoryid'] == $defcat['classescatid']) { echo 'selected'; };
答案 3 :(得分:0)
从一个学习者到另一个学习者,我将提供一种我最近学到的不同方法,并添加到我的“奶酪数据库”中。
php查询实际上只是一个可以分解并拼接在一起的字符串。
所以我选择一个国家和奶酪分类并将其传递给服务器。 服务器执行查找并在此处创建一些变量:
$countryname = $_POST['country'];
$classification = $_POST['classification'];
if( in_array( $countryname, array( "Holland", "Italy", "France", "Spain", "Basque",
"Switzerland", "Austria", "Australia", "England", "Belgium", "Sardegna", "US" ) ) )
{ $countryname = $countryname; }
else
{ $countryname = 'All'; }
if( in_array( $classification, array( "Fresh", "Soft", "Semi-Soft", "Hard", "Very Hard" ) ) )
{ $classification = $classification; }
else
{ $classification = 'All'; }
然后选择查询的相关部分:
if ( $countryname == 'All' && $classification == 'All' )
{ $myselector1 = " uniqueid > 0 " ; }
else if ( $countryname == 'All' && $classification <> 'All' )
{ $myselector1 = " classification = '$classification' "; }
else if ( $countryname <> 'All' && $classification == 'All' )
{ $myselector1 = " country = '$countryname' " ; }
else if ( $countryname <> 'All' && $classification <> 'All' )
{ $myselector1 = " country = '$countryname' AND classification = '$classification' "; }
然后,查询由一系列基于国家名称和分类(或“全部”)的字符串构成。
$query = " SELECT * " .
" FROM xcheese " .
" WHERE " .
" $myselector1 ".
" ORDER BY country ASC, score DESC";
$result = mysqli_query($cxn, $query) or die ("could not connect");
显然这不是你问题的确切答案,但也许它会给你一些思考。