2009-11-06 3 views
0

J'essaie d'obtenir la valeur de $ url à afficher à partir de la base de données MySQL mais je peux seulement obtenir la valeur $ cat pour afficher correctement quelqu'un peut m'aider s'il vous plaît à apprendre comment afficher la valeur $ url.PHP Foreach Problème?

Maintenant, je fais quelque chose de mal.

Voici le code partiel.

// Loop through each subarray: 
foreach ($parent as $id => $cat) { 

    // Display the item: 
    echo '<li><a href="http:' . $url . '" title="">' . $cat . '</a>'; 

Voici le code complet.

<?php 
require_once ('./mysqli_connect.php'); // Connect to the db. 

// Receives one argument: an array. 
function make_list ($parent) { 

    // Need the main $link array: 
    global $link; 

    // Start an ordered list: 
    echo '<ol>'; 

    // Loop through each subarray: 
    foreach ($parent as $id => $cat) { 

     // Display the item: 
     echo '<li><a href="http://' . $url . '" title="">' . $cat . '</a>'; 

     // Check for sublink: 
     if (isset($link[$id])) { 

      // Call this function: 
      make_list($link[$id]); 

     } 

     // Complete the list item: 
     echo '</li>'; 

    } // End of FOREACH loop. 

    // Close the ordered list: 
    echo '</ol>'; 

} // End of make_list() function. 


// Connect to the database: 
    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC"); 
if (!$dbc) { 
    // There was an error...do something about it here... 
    print mysqli_error(); 
} 


// Initialize the storage array: 
$link = array(); 

while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) { 

    // Add to the array: 
    $link[$parent_id][$id] = $category; 

} 

make_list($link[0]); 


mysqli_close($mysqli); // close the connection 

?> 
+0

Votre code est syntaxiquement correct. Quelques questions: Qu'est-ce que le tableau $ parent? Où définissez-vous $ url? – jonthornton

+0

vous devrez peut-être poster plus de code .. de ce que vous nous avez donné jusqu'à présent, $ url n'est même pas défini pour avoir une valeur .. – saleemshafi

+0

Code complet affiché. – aBc

Répondre

3

$ url est pas dans l'image même ... On dirait que vous êtes itérer sur un tableau séparé du résultat MySQL. Vous auriez besoin de quelque chose de plus comme:

foreach ($res as $row) { 
    echo '<li><a href="http:' . $row['url'] . '" title="">' . $row['cat'] . '</a>'; 
} 

Espérons que cela aide.

Edit:

Tout d'abord, $ url doit être attribué en même temps que les autres vars dans votre liste() - depuis que vous faites SELECT * dans votre requête, vous devrez peut-être spécifier des colonnes si l'ordre est correct dans votre mission.

Ensuite, il n'y a aucun moyen d'inclure une autre variable avec la structure du tableau que vous utilisez ...

$link[$parent_id][$id] = $category; 

devrait être quelque chose comme:

$link[$parent_id][$id] = array('category' => $category, 'url' => $url); 

Ensuite, itérer sur la tableau devrait être changé en quelque chose comme:

foreach ($parent as $id => $ary) { 

    // Display the item: 
    echo '<li><a href="http:' . $ary['url'] . '" title="">' . $ary['category'] . '</a>'; 

} 
1

À partir du code que vous avez fourni vous n'êtes pas déclarez $ url du parent $. Avez-vous une chance de fournir ce qui est stocké dans $ parent?


Donc d'abord les choses!

Vous devrez obtenir l'URL de votre appel mysqli_fetch_array quelque chose de semblable à ce (je suppose url est le nom de la colonne dans la table)

while ($row = mysqli_fetch_array($dbc, MYSQLI_NUM)) { 
    $id = $row['id']; 
    $parent_id = $row['parent_id']; 
    $cat = $row['category']; 
    $url = $row['url']; 

    // Add to the array: 
    $link[$parent_id][$id] = array('cat' => $cat, 'url' => $url); 
} 

ensuite modifier votre boucle foreach pour extraire la catégorie appropriée et url

foreach ($parent as $id => $category_array) { 

// Display the item: 
echo '<li><a href="http://' . $category_array['url'] . '" title="">' . $category_array['cat'] . '</a>';