vbcoach Posted March 3, 2017 Share Posted March 3, 2017 Hello all. I am having an issue displaying data in a form that IF EXISTS (not blank) will cause that option to be selected. The looping itself works. The variable called into the form works. Just can't seem to get the form to SELECT the correct variable. <select name="size" id="size"> <?php while ($lrow = mssqlfetchassoc($tres)) { ?> <option value="<?php echo $lrow['ts_id'];?>"> <?php if($lrow['tsdescription'] == $info['size']) echo 'selected';?> <?php echo "$lrow[tsdescription]";?> </option> <?php } ?> </select> So this is displaying the team captain's TShirt size from a database (mssql). In the database the field is called tsdescription. For sake of argument, let's say the tshirt description is "Blue 2XLarge". This variable exists and is passed into the form for updating by the team captain, if necessary. The loop works, as it loops through all the tshirt options (107 in total) and works as a pull-down menu. Somehow my IF statement doesn't work. What I am looking for is for PHP to "find" the existing tshirt description 'tsdescription' in the loop statement, and if found, cause it to be "Selected". The $info are the variables for the form when the captain's information page is loaded. So far, by itself, the $info['size'] returns the correct tshirt. "by itself" the dropdown works. Thus, something must be amiss in my IF statement. Can anyone help direct me to what I am missing to make this work? Thanks in advance. -J Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/ Share on other sites More sharing options...
Jacques1 Posted March 3, 2017 Share Posted March 3, 2017 You're putting the selected attribute outside of the tag. You should actually see the text "selected ..." right in the menu where it doesn't belong. Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543688 Share on other sites More sharing options...
Psycho Posted March 3, 2017 Share Posted March 3, 2017 I would suggest separating your logic (PHP) from the presentation (HTML) as much as possible. The code you have makes it difficult to debug because it switches back and forth so much. Looking at what you have, it appears the the "selected" options would end up having 'selected' put into the LABEL between the opening and closing tags as opposed to putting the selected parameter into the opening tag. So, if you are not seeing 'selected' in the drop-down list, it is because none of the DESCRIPTIONS match $info['size']. I would assume you would be saving the option VALUE and not the DESCRIPTION. So, you may also be comparing $info['size'] to the wrong value. I prefer to create a function for creation my option tags that I can use for all the select fields. Here is a quick and dirty solution. This assumes you are storing the tshirt size ID for selected values and not the description (as you should be). <?php //Put all of this code at the top of your script - before you output any HTML function createOptions($optionsAry, $selectedValue) { $options = ''; foreach($optionsAry as $optionValue => $optionLabel) { $selected = ($optionValue==$selectedValue) ? ' selected="selected"' : ''; $options .= "<option value='{$optionValue}'{$selected}>{$optionLabel}</option>\n"; } return $options; } //Convert db results into array and creation otpions HTML content $tshirtOptionsAry = array(); while ($row = mssqlfetchassoc($tres)) { $tshirtOptionsAry[$row['ts_id']] = $row['tsdescription']; } $tshirtOptionsHtml = createOptions($tshirtOptionsAry, $info['size']); ?> <!-- HTML content AFTER the logic is processed --> <select name="size" id="size"> <?php echo ; ?> </select> Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543689 Share on other sites More sharing options...
vbcoach Posted March 3, 2017 Author Share Posted March 3, 2017 Hello Psycho, thanks for your very quick response. I know my code is older, but I inherited it. As I try to wrap my head around what you wrote, one thing that was apparent as I entered the code was the HTML portion seems to be mission some type of variable statement. The <select name="size" id="size"> <?php echo ; ?></select> is not actually echoing anything. What's missing here? Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543690 Share on other sites More sharing options...
vbcoach Posted March 3, 2017 Author Share Posted March 3, 2017 Oh, I might add that what I am looking for overall here is that if the team captain select a tshirt at the time of registration, I would like it to be "SELECTED" and displayed here. If the field is blank, then I would like for all the tshirt options be be available to be chosen. Hope that helps? Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543691 Share on other sites More sharing options...
Jacques1 Posted March 3, 2017 Share Posted March 3, 2017 <?php echo ; ?> is not actually echoing anything. What's missing here? How about: That what should be echoed (hint: there's a variable containing HTML markup). Hope that helps? We know what you want. I'm not sure if you're reading the replies, though. Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543693 Share on other sites More sharing options...
vbcoach Posted March 3, 2017 Author Share Posted March 3, 2017 I am reading the replies. You are writing to me code that I am unfamiliar with. When you ask me to place this information in my code to see if it works, that's what I do. If something is missing from your example, it doesn't help me fix the issue, or learn the how and why you did it this way. So very humbly, what is missing here? Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543694 Share on other sites More sharing options...
Jacques1 Posted March 3, 2017 Share Posted March 3, 2017 I haven't written any code. I've told you what's wrong with your code, but you've appearently decided to rewrite it anyway. That's fine, but then you should have a basic understanding of what that code you've copypasted does. If you don't even know what to echo, maybe you should go back to the code you do understand. Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543696 Share on other sites More sharing options...
vbcoach Posted March 3, 2017 Author Share Posted March 3, 2017 Anyone else able to help? Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543700 Share on other sites More sharing options...
Solution ginerjm Posted March 3, 2017 Solution Share Posted March 3, 2017 (edited) Have you attempted to do any reading/learning of php so that you might glean some knowledge of your own? This is how it s/b written. $select_var = "<select name='size' id='size'>"; while ($lrow = mssqlfetchassoc($tres)) { if ($row['tsdescription'] == $info['size']) $selected = 'selected'; else $selected = ''; $select_var .= "<option value='" . $lrow['ts_id'] . "' $selected>" . $row['description'] ."</option>"; } $select_var .= "</select>"; Always try and stay in php mode until you finally output your entire html doc. Here you build the necessary dropdown into a var. Down lower in your script where you assemble the bulk of you static and dynamic html, insert this var where it needs to be and your page will display it properly. Don't keep spitting out pieces of html and then doing some php and then spit out some html. It's confusing and hard to follow and even harder to maintain later on. Edited March 3, 2017 by ginerjm Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543703 Share on other sites More sharing options...
Jacques1 Posted March 3, 2017 Share Posted March 3, 2017 (edited) Anyone else able to help? You've been told exactly how to fix your code. On top of that, you've been given alternative code. If that's still not enough, I'm starting to doubt your willingness to work on the problem. This is no We-write-your-code service. After 7 years, you should know that. Edited March 3, 2017 by Jacques1 Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543706 Share on other sites More sharing options...
vbcoach Posted March 4, 2017 Author Share Posted March 4, 2017 I've dealt with you before. You're very good at accusing - not very good at helping. Why are you still here? Found someone at another site who was very helpful. Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543717 Share on other sites More sharing options...
vbcoach Posted March 4, 2017 Author Share Posted March 4, 2017 Thank you ginerjm, I will give that a try. Much appreciated. I inherited this mess. Thanks for your help. Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543718 Share on other sites More sharing options...
Jacques1 Posted March 4, 2017 Share Posted March 4, 2017 (edited) The problem is that you aren't looking for help. You want others to do your job, for free. While you're pretty good at begging for code and getting people to spoonfeed you, that's also the reason why you don't make any progress whatsoever. I hear you complain a lot about shitty jobs, bad code you've inherited, all kinds of limitations etc. Have you ever wondered why nobody lets you do more interesting tasks? I'll give you a hint: When somebody can't echo a variable after 7 years of programming and needs Internet forums to do that for him, then people are going to question not just his competence but also his attitude. So maybe it's time to grow up and take responsibility instead of blaming everybody else and acting like a spoiled child. Edited March 4, 2017 by Jacques1 1 Quote Link to comment https://forums.phpfreaks.com/topic/303343-php-looping-issue/#findComment-1543721 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.