PDA

View Full Version : multidimensional array from database table


wpeloquin
02-10-2011, 09:42 PM
I am having trouble getting multiple rows from a table to display.

This is where i am currently at...
In my plugin php code i have the following:

// This will be in the form of page.php?do=action&user=1
$rkc_getuserid = $vbulletin->input->clean_gpc('r', 'user', TYPE_UINT);

$rkc_allchar = $vbulletin->db->query_first("
SELECT char_id, char_name, char_race, char_class
FROM " . TABLE_PREFIX . "rkc_plugintable AS rkc_plugintable
WHERE user_id = '" . $vbulletin->db->escape_string($rkc_getuserid) . "'
");

$rkc_char['char_id'] = htmlspecialchars($rkc_char['char_id']);
$rkc_char['char_name'] = htmlspecialchars($rkc_char['char_name']);
$rkc_char['char_race'] = htmlspecialchars($rkc_char['char_race']);
$rkc_char['char_class'] = htmlspecialchars($rkc_char['char_class']);

...

$templater->register('rkc_allchar', $rkc_allchar);
$templater->register('rkc_char', $rkc_char);


then in my template, i have the following:

<tr>
<vb:each from="rkc_allchar" value="char">
<td>{vb:raw char}</td>
</vb:each>
</tr>

The above code will successfully pull 1 row of data from the table. but if the user has multiple rows to pull, the other rows will not display. if i change from="rkc_allchar" to from="rkc_char" i get no data displayed at all.

I am pretty sure this has something to do with making a multidimensional array, but i am not sure how exactly to do this. I have trolled multiple php and vb sites but none of them give me enough to know how to do this when pulling multiple rows with multiple fields from a database.

What I am looking to do is something like:

<vb:each from="?" value="?"> // This will create a new row for each row of data collected
<tr>
<vb:each from="rkc_allchar" value="char"> // This will break down each field from the row into its own <td>
<td>{vb:raw char}</td>
</vb:each>
</tr>
</vb:each>


I assume the array will have to look something like:

char_array(
char1(
char_id => $variable,
char_name => $variable,
char_race => $variable
char_class => $variable
),
char2(
char_id => $variable,
char_name => $variable,
char_race => $variable
char_class => $variable
),
char3(
char_id => $variable,
char_name => $variable,
char_race => $variable
char_class => $variable
)
);

Lynne
02-10-2011, 10:06 PM
You are using query_first which will only get you one row of data. You need to do a query_read in order to get all the rows.

wpeloquin
02-13-2011, 09:34 PM
ah, ty for that. i changed that, but it is still not working properly.

Like i said, I am unsure how to structure the php code and the template code properly. i have tried multiple ways, and will keep trying to find an example/tutorial/etc on what im trying to do, but any help on the structure or what i'm doing wrong is appreciated.

----------------------------
EDIT: User Solved
----------------------------
PHP Code:

$rkc_allchar = $vbulletin->db->query_first("
SELECT char_id, char_name, char_race, char_class
FROM " . TABLE_PREFIX . "rkc_plugintable AS rkc_plugintable
WHERE user_id = '" . $vbulletin->db->escape_string($rkc_getuserid) . "'
");

$count = 0;
while ($rkc_char = $vbulletin->db->fetch_array($rkc_allchar))
{
$rkc_charlist[$count] = array(
'char_id' => htmlspecialchars($rkc_char['char_id']),
'char_name' => htmlspecialchars($rkc_char['char_name']),
'char_race' => htmlspecialchars($rkc_char['char_race']),
'char_class' => htmlspecialchars($rkc_char['char_class']),
);
$count++;
...

$templater->register('rkc_charlist', $rkc_charlist);

}
Template Code:

<vb:each from="rkc_charlist" value="char">
<tr>
<td class="blocksubhead" style="width:15%;">{vb:raw char['char_id']}</td>
<td class="blocksubhead" style="width:15%;">{vb:raw char['char_name']}</td>
<td class="blocksubhead" style="width:15%;">{vb:raw char['char_race']}</td>
<td class="blocksubhead" style="width:15%;">{vb:raw char['char_class']}</td>
</tr>
</vb:each>


Thank you for the help!

Lynne
02-13-2011, 11:40 PM
Have you tried doing a search in the default vbulletin files for some code that is an example of what you want?

wpeloquin
02-13-2011, 11:50 PM
i posted my solution as an edit to my last post. Thanks for the help!

Lynne
02-14-2011, 12:45 AM
Thanks for posting the solution and I'm glad you got it figured out. :)