maxdean10 Posted February 15, 2011 Share Posted February 15, 2011 I have whiled my way through any number of forums and help pages so far. However, since I am not quite comfortable yet with PHP, I am not sure which option I have been given would be the right one. What I am trying to do: Create the source for a set of drop-down menus. The dropdown menu has columns, and then a H2 and P that go in each column, in varied numbers, so you have column1, h2 p; h2 p; h2 p column2, h2 p; h2 p etc....make sense? I am using an MySQL table as source so I can have a little CMS dashboard where I can change these and other values on the fly. So I have a MySQL table where I have a field that identifies the column (page name), and then values to fill the h2 and p tags. I.E.: page_name, content_title, content_text The idea, therefore, is to use PHP to figure out what the column names (that are repeated) in the mysql table and then create the dropdown based on the value in the subsidiary fields. Output is as a string in a variable value that is output via return (); My best estimation of how to do this is to use php to create a multidimensional array from the query result, where the first column is the page_name, followed by an array, the array being the remainder of the information. Based on information scrounged from other sources, I have come up with this so far: $query = "SELECT * FROM tbl_mainmenu WHERE mainmenu_type = '$mmtype'"; // what the query is $result = mysql_query ($query, $dbc); // connect to database and run query, setting the the result to dummy array variable '$result' // establish the multidimensional array $mmcontent_array = array (); //create the array where the values are content page and associated values in an array per each content page while ($result = mysql_fetch_assoc ()) { $page_name = $result['content_page']; $mmcontent_array['content_page'] = $result; } foreach ($mmContent_array[] as $key=>$value) { foreach () { $tmpelements[] = '<div class="col_2"><h2>' . $element[content_title] . "</h2>\n<p>" . $element[content_text] . "</p>\n</div>"; $elements = implode("\n",$tmpelements) . "\n" } $tmp[] = '<li><a href="#" class="drop">Products</a><!-- Begin Products Item -->\n<div class="dropdown_2columns"><!-- Begin 2 columns container -->' . $elements . 'whatever tags will close this') } Am I even in the ballpark? I am not sure which way to nest the foreach ()'s. The example I was working from used echo ()'s, and I am not sure if using $variable = implode () makes the task different. As a start, I am just wondering if I am creating the multidimensional array correctly? Quote Link to comment https://forums.phpfreaks.com/topic/227791-creating-multidimension-array-from-mysql-source-and-outputting/ Share on other sites More sharing options...
jcbones Posted February 15, 2011 Share Posted February 15, 2011 This is a project I worked on a couple years ago. It takes a multi-dim array from the database, and puts it into drop down boxes. I didn't go through your code, but figured it would either help you, or confuse you more. //call the query $result = mysql_query($query); //if we have data to pull, populate it. if(mysql_affected_rows() > 0) { while($row = mysql_fetch_array($result)) { $join_id = $row[0]; //make sure form name's don't have whitespace $join_event_id = $row[1]; $join_position = str_replace(' ','_',$row[2]); $join_candidate = $row[3]; //create a storage array ->Multi-dim. $storage[$join_event_id][$join_position][$join_candidate] = $join_id; } //cycle through our array to build our forms. foreach($storage as $id => $array2) { //lets start off by making a form. There should only be one intitial key, so we will build it on the first loop. echo '<form action="" method="post">' .'<input type="hidden" name="election" value="'.$id.'"/>'; //make a hidden input, this will hold the name of our election. echo 'Vote in Election: '. $id .'<br/>'; foreach($array2 as $position => $array3) { echo '<div>'.$position.'<br/>' //this holds the name of our position. .'<input type="hidden" name="position[]" value="'.$position.'"/>' //this hidden input holds the NAME of our next select input. .'<select name="'.$position.'">'; //notice that the name of this input is the same as the value of the input above. if(is_array($array3)) { foreach($array3 as $candidate => $canID) { echo '<option value="'.$canID.'">'.$candidate.'</option>'; //This is our options. } } else { echo '<option value="NULL">Not Set</option>'; //only invoked if there are no candidates (query screwed teh pooch). } echo '</select>' //ending our select box. .'</div>'; } echo '<br/><input type="submit" name="submit" value=" SUBMIT "/>'//submit the and end the form. .'</form>'; } } This is how I went about retrieving the values: //Check to see if the submit button has been hit if($_POST['submit']) { //escape our strings to protect from sql injection attacks -- //You could add more checks here $election = mysql_real_escape_string($_POST['election']); $position = $_POST['position']; //check to see if the user has already voted $checkDb = "Query removed."; $resultDb = mysql_query($checkDb); if(mysql_affected_rows() < 1) { foreach($position as $key => $value) { $position = mysql_real_escape_string($value); $id = mysql_real_escape_string($_POST[$value]); $position = str_replace('_',' ',$position); //if user hasn't voted, insert the query, and echo him a thank you. mysql_query("query removed. I would suggest not to query here, but build multi-values, and insert with 1 query."); } echo 'Thanks for voting!<br/>'; } //if the user has voted, tell him that. else echo 'You have already voted!<br/>'; } Quote Link to comment https://forums.phpfreaks.com/topic/227791-creating-multidimension-array-from-mysql-source-and-outputting/#findComment-1174722 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.