PHP - Simple Loop/sql/array Question
Ok guys and gals I'm gettin' old! I know this is simple but I've spent way too much time on this now and am crying 'uncle'!
I'm trying load a multi-dementional array with mysql_fetch_array results but I'm not getting it. Here's the rough basis for what I'm trying to do: $result = mysql_query("SELECT * FROM phpbb_profile_fields_data"); $row = mysql_fetch_array($result) or die(mysql_error()); $some_array = array( array( 'member_name' => $row['pf_firstname'] . " " . $row['pf_lastname'], 'member_title' => $row['pf_title'], 'member_employer' => $row['pf_employer'], ), array( 'member_name' => 'Janet', 'member_title' => '47', 'member_employer' => 'Husband', ), ); Okay, so that loads two $some_array elements with data. The first element has the first row of the database in question. Works fine but useless. So, with a "while ($row = mysql_fetch_array($result) )" what do I need to do to fill the $some_array with the query results? Thanks! Similar TutorialsDue to my home brewed templating system I must use 'return' instead of 'echo' or 'print'. I have a simple database query and running a while loop where all rows are to "printed" to the browser. But when I use return only the first row is shown. Using echo will print out all of the rows as it should but of course it prints the rows outside of where they should in the template. This may be very simple but I am just starting out. I tried to use the forum's search to see if this has been answered but the daemon could not 'be reached' and searching on google brings up a ton of non-helpful links. The solution will be very helpful as I will be doing this A LOT in my scripts for my current project. Thank you! I have a script that displays a certain result set, the row I am concerned about is called 'endonum'. Some rows will have the same number in this field. Is there a way to only show 1 result with the same number in this field. The array will be like '1, 2, 3, 3, 4, 4, 4, 4, 5, 5, 5' and so on, but I just want to display 1 of them, not all. Kinda confusing but maybe someone gets it. Here is the code. <?php $selectendo = mysql_query("SELECT * FROM endorse WHERE agency = '$agency' AND finalized = 'No'")or die(mysql_error()); while($showendo = mysql_fetch_array($selectendo)) { $endonumber = $showendo['endonum']; ?> <li><a href="viewendo.php?endonum=<?php echo $endonumber;?>">Endorsement Number:<?php echo $endonumber . " Date: " . $showendo['date'];?></a></li> <?php } ?> Hello. I have a newbie question regarding arrays: How can I echo an element's subsequent arrays and elements? For example Code: [Select] $pers = array("Steve" => array("eyes" => "green", "age" => "43", "race" => "caucasian")); and if I echo $pers["Steve"] to make it display: green 43 caucasian. Thanks. my php array knowledge is still basic and i can't seem to get this code to yield an answer in the form i want. i would like to be able to get at $m and $b separately so I can manipulate them. how, for example do i just print $m? Code: [Select] <?php var_dump( linear_regression(array(1, 2, 3, 4), array(1.5, 1.6, 2.1, 3.0)) ); /** * linear regression function * @param $x array x-coords * @param $y array y-coords * @returns array() m=>slope, b=>intercept */ function linear_regression($x, $y) { // calculate number points $n = count($x); // ensure both arrays of points are the same size if ($n != count($y)) { trigger_error("linear_regression(): Number of elements in coordinate arrays do not match.", E_USER_ERROR); } // calculate sums $x_sum = array_sum($x); $y_sum = array_sum($y); $xx_sum = 0; $xy_sum = 0; for($i = 0; $i < $n; $i++) { $xy_sum+=($x[$i]*$y[$i]); $xx_sum+=($x[$i]*$x[$i]); } // calculate slope $m = (($n * $xy_sum) - ($x_sum * $y_sum)) / (($n * $xx_sum) - ($x_sum * $x_sum)); // calculate intercept $b = ($y_sum - ($m * $x_sum)) / $n; return array("m"=>$m, "b"=>$b); } ?> Hey, Can someone please fix my code below? I simply want to add all values for $row[score1] in first if statement and add all values for $row[score2] in second if statement and then add them together to return final value . Code: [Select] while( $row = mysql_fetch_assoc($query)) { if($clanID==$row[clan1] && $row[score1] > $row[score2]) { $points[] = $row[score1]; } if($clanID==$row[clan2] && $row[score1] < $row[score2]) { $points[] = $row[score2]; } } return $points;. So lets say I echo the variables that I want added... Code: [Select] if($clanID==$row[clan1] && $row[score1] > $row[score2]) { $points[] = $row[score1]; echo $row['score1']."<br>"; } if($clanID==$row[clan2] && $row[score1] < $row[score2]) { $points[] = $row[score2]; echo $row['score2']."<br>"; } On page it returns as: 11 16 14 Add it together is 41 and this is what I want the output to be. Hope you understand I appreciate any help! P.S. I must be able to return final value OUTSIDE loop. Thanks. I will state right here that I've never really delved into PHP before, but I'm prying apart the code on my site (a programmer made it for me). I've figured out how to add more checkboxes onto the page, but I've run into a problem. Code: [Select] 'Artist' => array ( 'Cassiadawn', 'Cryptic', 'Diction', 'Glorfindel', 'Kyrislian', 'Russa', 'Ntkufreak', 'Taliba', 'Thunderbun', 'Velg', 'Lostdollie', 'Pookawitch') What I'm trying to do is replace 'Lostdollie', 'Pookawitch' with 'Lostdollie [R]', 'Pookawitch[R]'. How can I do this? I'd really appreciate any help anyone can give me! Hey guys I have an array and want to make it into a sting and separate each array segment by a comma...is there a function for this or should I just do it in a loop myself?...thanks Hi there, I have the following PHP code: <?php $books = array( array("title"=>"Book Title 1", "author"=>"Author 1", "publisher"=>"Publisher 1"), array("title"=>"Book Title 2", "author"=>"Author 2", "publisher"=>"Publisher 2"), array("title"=>"Book Title 3", "author"=>"Author 3", "publisher"=>"Publisher 3"), ); foreach ($books as $key => $value) { echo "$key : $value<br>"; } ?> I'm trying to loop through this code, but all it outputs is: 0: ARRAY 1: ARRAY 2: ARRAY -- It's not even pulling the proper $keys and $values. It works when there's just ONE array -- but not with this multidimensional array. Any ideas? Thanks! J if(in_array("b", $array)) { } The above checks to see if a value is present in an array, but how do I then retrieve the array key value from the matching value? $array[0] = "a"; $array[1] = "b"; $array[2] = "c"; So in the example, the answer is 1 (array key 1). Trying to do something that I think should be very simple. Let's assume that I have an array populated with the numbers 1 to 24 for this example. I need to output these items in 4 columns to accomodate my CSS layout but still have them read from left to right, top to bottom. I also want this to be somewhat dynamic - I'm okay hardcoding it to split into 4 columns, but need it to handle any number of items in the array. I'm not sure if the best way to do this would be to split the original array into an array for each of the 4 columns, or to loop through the original array 4 times and output items 1+4, 2+4, and so on. Or maybe I should be using array_filter with some custom callback functions. I'm fine with any solution. The end result is echoing the array in the following groupings so I can surround each column with the appropriate column HTML for layout (in this case the array actually contains IMG urls): Column 1: 1, 5, 9, 13, 17, 21 Column 2: 2, 6, 10, 14, 18, 22 Column 3: 3, 7, 11, 15, 19, 23 Column 4: 4, 8, 12, 16, 20, 24 Any help would be appreciated! This one is driving me nuts and I know it should be relatively easier. Guess I should stick to HTML + CSS. Hi all, I have the following very simple for loop: $i=1; for ($i<26) { if (preg_match("~.~",$profile3["exp$i"])==1){echo $profile3["exp$i"],"<br />";} $i++; } However, it's not working and gives me the following error message: Parse error: parse error, expecting `';'' in ......... on line X where X is the line with " for ($i<26) ". Can somebody pls see where I've gone wrong? (prob a very stupid mistake, but I can't spot it) Thanks! I am trying to recursively pull records from a database to write to a csv. There are three test rows of data in my table (and no not including the table headers). The only issue is i can’t seem to get my for loop to display all the records – it only displays the last 2 rows so i’m very confused. Anyone suggest why this isn’t working? Code: [Select] $num_rows = mysql_num_rows($export); for ($i=0; $i <= $num_rows; $i++ ) { $row = mysql_fetch_row($export); echo $row[1] . $row[2] . $row[3] . $row[4] . $row[5] . $row[6] ."<br/>"; echo $i; } Incidentally the query is just a fetch all from datasbase. Anyone see where i'm going wrong? Thanks, drongo Hey all. I am a php newbie. Just starting to get my feet wet. So my issue is this. I have a MySQL database table called "blog" Within that table are "ID, photo_id, post_head, post_body" I have connected to the database via php and have been successfully echoing the fields onto my page. But the problem is that I don't know how to create a loop. I need it to show the latest post (biggest ID #) first then display descending down. Here is my code. As you can see I'm echoing the same variables and logically its displaying the SAME post 2 times. Any help would be just great! <table width="925" border="0" cellspacing="0" cellpadding="0"> <tr> <? $data = mysql_query("SELECT * FROM blog ORDER BY id DESC") or die(mysql_error()); while($info = mysql_fetch_array( $data )) { $id = $info['ID']; $photo_id = $info['photo_id']; $post_head = $info['post_head']; $post_body = $info['post_body']; } ?> <!-- POST 1 START --> <td width="180"> <img src="<? echo $photo_id ?>" /> </td> <td id="box_bg2" class="padding_state" width="275" valign="top"> <br /> <font id="post_head"> <? echo $post_head ?> </font> <br /> <font id="post_body"> <? echo $post_body ?> </font> </td> <td width="15"> </td> <!-- POST 2 START --> <td width="180"> <img src="<? echo $photo_id ?>" /> </td> <td id="box_bg2" class="padding_state" width="275" valign="top"> <br /> <font id="post_head"> <? echo $post_head ?> </font> <br /> <font id="post_body"> <? echo $post_body ?> </font> </td> </tr> </table> How would I add a loop to this PHP coding? I want to make it so that after 'I AM THOMAS' it will loopback to 'HELLO WORLD' and repeat the same cycle infinitely. Quote How do I make a loop for PHP? Is this right? <?PHP require ("config.php"); exec("mode com3: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off"); $fp =fopen("com3", "w"); while (true){ fwrite($fp,"HELLO WORLD"); fwrite($fp,"I AM THOMAS"); sleep(5); } fclose($fp); ?> Hi All, I'm jumping back into PHP and I have a basic loop question that I'm struggling with. I'm using a "date picker" code to select times during the day and then using a javascript to calculate the total hours for the day. However, I'm struggling with the loop to print out the fields. I need a loop that will print the following: first iteration: value = 1 value = 2 value = 0 second iteration: value = 2 value = 3 value = 1 The code I'm using is the following: Code: [Select] for ($id = 1; $id <=45 ; $id++) { ?> <?php if($id % 2) { ?> <div id="labor_template_day_100"> <input type="text" name="time1000<?php echo $id; ?>""/> <input type="text" name="time1000<?php echo $id+1; ?>" /> <?php } ?> <input type="hidden" id="emp<?php echo $id-1; ?>hours" value="0"/> <?php if($id % 2) { ?> </div> <?php } } This prints: first iteration: value = 1 value = 2 value = 0 Inserts just a hidden form field, then: value = 1 value = 2 value = 2 See below: Code: [Select] <div id="labor_template_day_100"> <input type="text" name="time10001" id="time10001" size="7" value="06:00 AM" onChange="CalcHrs('time10001', 'time10002', '0');"/> <input type="text" name="time10002" id="time10002" size="7" value="06:00 AM" onChange="CalcHrs('time10001', 'time10002', '0');" /> <input type="hidden" id="emp0hours" value="0"/> </div> <input type="hidden" id="emp1hours" value="0"/> <div id="labor_template_day_100"> <input type="text" name="time10003" id="time10003" size="7" value="06:00 AM" onChange="CalcHrs('time10003', 'time10004', '2');"/> <input type="text" name="time10004" id="time10004" size="7" value="06:00 AM" onChange="CalcHrs('time10003', 'time10004', '2');" /> <input type="hidden" id="emp2hours" value="0"/> </div> <input type="hidden" id="emp3hours" value="0"/> I have a feeling this is something basic I need to change. hello im having a little trouble getting what i want back from my loop. on my page i have 2 placeholders. each placeholder needs to pull the element id from the db that belong in that placeholder so in the db i have these columns: id = (the placeholder id) number = (the placeholder number) element. = (the element id) for example: place holder 1 has element_id 1 & 2 place holder 2 has element_id 1 & 3 id - number - element_id 1 - 1 - 1 2 - 1 - 2 3 - 2 - 1 4 - 2 - 3 in the places holder if have: Code: [Select] //place holder 1 $phNo = "1"; $holder = Placeholders::find_by_phID($phNo); //place holder 2 $phNo = "2"; $holder = Placeholders::find_by_phID($phNo); this is the class code: - I MIGHT BE DOING THIS WRONG Code: [Select] public function find_by_phID($phNo=0){ $sql = "SELECT * FROM ".self::$table_name." WHERE number=".$phNo.""; $result_array = self::find_by_sql($sql); return !empty($result_array) ? array_shift($result_array) : false; } THIS IS WHAT I TRIED: inside the placeholder i put a loop: Code: [Select] <?php $phNo = "1"; $holder = Placeholders::find_by_phID($phNo); foreach ($holder as $holders){ echo "Elements id = ".$holder->contElements_id."<br />"; } echo "<br/>"; ?> but the retults are all wrong. it comes back with: Quote Elements id = 5 Elements id = 5 Elements id = 5 Elements id = 5 Elements id = 5 Elements id = 5 Elements id = 5 what placeholder 1 should come back with is just element id 1 & 2 Quote Elements id = 1 Elements id = 2 any thoughts thanks rick Hey everyone, I have a database list of staff members that work at my office. I want to list each staff member with a while loop. In the database there is a field named "admin" where the value is either "y" or "n." I want to list administration first, then everyone else alphabetically by their last name. I wrote the code below that should work (haven't tested it yet) but I'm wondering if there is an easier, more efficient way to accomplish this. Thanks for any input that you may provide. Code: [Select] <?php $result1 = mysql_query("SELECT `prefix`,`lname`,`pos` FROM staff WHERE staffid > '0' AND admin == 'y' ORDER BY `lname` DESC"); $result2 = mysql_query("SELECT `prefix`,`lname`,`pos` FROM staff WHERE staffid > '0' AND admin == 'n' ORDER BY `lname` DESC"); while ($row1 = mysql_fetch_row($result1)) { $prefix = $row1[0]; $lname = $row1[1]; $pos = $row1[2]; $fullname1 = "$prefix $lname ($pos)"; echo "$fullname<br>"; } while ($row2 = mysql_fetch_row($result2)) { $prefix = $row2[0]; $lname = $row2[1]; $pos = $row2[2]; $fullname2 = "$prefix $lname ($pos)"; echo "$fullname2<br>"; } ?> Hey guess I have a question about For Loops. I'm very new to php so please forgive anything stupid I am doing The follow code shows what I am trying to do with my for loop. It works great except that the $sizu value is spread out over all the fields. So instead of saying 150 in the first record set it prints 1 and then in the second record it prints 2 etc. Any idea what is causing this? If you need to see the rest of the code let me know I'm just trying to save bandwidth at first. for ($i=0; $i < count($var); $i++) { $quer = ("SELECT sbbx0, sbsizu FROM dwoshp WHERE sbfile = '$_POST[order]' and sbbrnu = '$_POST[location]' AND sbvaru = '$varu[$i]'"); $res = mysql_query($quer); while($r = mysql_fetch_array($res)) { $quant = $r['sbbx0']; $sizu = $r['sbsizu']; } $query_AddDots = "INSERT INTO tempresult(variety,grade,cont, quantity, size) VALUES ('$var[$i]', '$invgrade[$i]','TP','$quant', $sizu[$i])"; $AddDots = mysql_query($query_AddDots) or die(mysql_error()); } hello. i have a foreach loop thats pulling out information that i dont want. how do i stop it. this is the loop Code: [Select] //GET THE TEXT $PCa = PageContent::find_by_pageContID($PCidA); foreach ($PCa as $PCas){ $title = $PCas->title; $link = $PCas->link; echo $title; echo "<br/>"; } the loop sits inside this function which has more loops Code: [Select] function listNavText($PHGlidA, $PHLobA, $PHLodA){ //GET THE LANGUAGE $langBS = basicSettings::find_by_id(1); $langID = $langBS->language_id; //GET THE LIST ORDER $PHLoa = PhLists::find_by_order($PHGlidA, $PHLobA, $PHLodA); foreach ($PHLoa as $PHLoas){ $PHLidA = $PHLoas->id; //GET THE LIST TEXT IDS $PCba = PCbridge::find_by_list($PHLidA, $langID); foreach ($PCba as $PCbas){ echo $PCidA = $PCbas->pageContent_id; //GET THE TEXT $PCa = PageContent::find_by_pageContID($PCidA); foreach ($PCa as $PCas){ $title = $PCas->title; $link = $PCas->link; echo $title; echo "<br/>"; } } } } this is what it echoes out 105L1-Title1 118 116 114 112 110 108L2-Title4 111 109L2-Title5 113 115 117 106L1-Title2 119 107L1-Title3 the number at the start is the text id L1-Title1 to L1-Title5 are tiles ($title) the spaces are links ($links) the problem is that i don't want the link spaces showing. just the 5 titles thanks I was wondering if you loop through an array and in the foreach() you specify an if statement that unsets certain items from the array, if those get unset from the original loop. Probably doesn't make much sense so heres an example Code: [Select] <?php //say there are 3 items in the $parent array //say there are 10 items in the $items array //say only the second item in the $items array value_one equals "abcd" foreach($parent as $id => $value) { foreach($items as $key => $value) { if($items[$key]['value_one'] == "abcd") { unset($items[$key]); } } } ?> So on the first item in the parent array, all 10 items would be cycled through. On the second second item of the parent array, all 10 items would be cycled through and the one item that has value_one == "abcd" would be unset. So on the third item of the parent array, am i correct in assuming only 9 items would be cycled through because there would be only 9 items in the $items array? |