PHP中根据字段值为MySQL查询结果元素添加对应CSS类的问题
Got it, let's work through this problem step by step. The core issue here is likely how you're checking the Automotive and Gaming field values and building your class list—let's implement a clean, dynamic approach that ensures only the correct classes get added to your <p> tags.
First: Fetch Your MySQL Results Properly
First, let's assume you're using a secure database extension like PDO (I'll include a mysqli alternative too, if that's what you're using). Here's how to grab your results:
// PDO example (recommended for security and flexibility) $pdo = new PDO('mysql:host=your_host;dbname=your_db', 'user', 'pass'); $stmt = $pdo->query("SELECT Automotive, Gaming, your_other_fields FROM your_table"); $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
The Fix: Build Classes Dynamically
Instead of hardcoding conditional checks that might overwrite or incorrectly add classes, we'll build a list of valid classes first, then apply them to the <p> tag. This way, we only add classes when the corresponding field is explicitly 1:
foreach ($results as $row) { // Start with an empty array to hold our valid classes $classes = []; // Add 'automotive' class only if Automotive is exactly 1 (strict comparison) if ($row['Automotive'] === 1) { $classes[] = 'automotive'; } // Add 'gaming' class only if Gaming is exactly 1 if ($row['Gaming'] === 1) { $classes[] = 'gaming'; } // Convert the array to a space-separated string (empty if no classes) $classString = implode(' ', $classes); // Output your <p> tag—if no classes exist, the class attribute will be empty (you can omit it if needed) echo "<p class=\"$classString\">Your content here (e.g., {$row['your_other_fields']})</p>"; }
Why This Fixes Your Incorrect Class Issue
If you were seeing wrong classes before, here are the most common mistakes this approach avoids:
- Loose comparison errors: Using
==instead of===can accidentally match values like the string'1'or eventrue—strict comparison ensures we only target the integer1. - Overwriting classes: If you previously set
$class = 'automotive'then$class = 'gaming', you'd overwrite the first class instead of adding both. Using an array lets us append classes safely. - Truthy value misfires: Checking for "truthy" values (like
if ($row['Automotive'])) would add the class for non-1 values like2or non-null strings—we explicitly check for1here.
mysqli Alternative (If You're Using That)
If you're sticking with mysqli instead of PDO, the logic is identical—just adjust how you fetch results:
// mysqli example $mysqli = new mysqli('your_host', 'user', 'pass', 'your_db'); $result = $mysqli->query("SELECT Automotive, Gaming, your_other_fields FROM your_table"); while ($row = $result->fetch_assoc()) { $classes = []; if ($row['Automotive'] === 1) { $classes[] = 'automotive'; } if ($row['Gaming'] === 1) { $classes[] = 'gaming'; } $classString = implode(' ', $classes); echo "<p class=\"$classString\">Your content here</p>"; }
This method guarantees:
- Rows with
Automotive = 1get theautomotiveclass - Rows with
Gaming = 1get thegamingclass - Rows with both fields as 1 get both classes
- No unwanted classes are added—only what's explicitly valid
内容的提问来源于stack exchange,提问作者user8953355

