String Manipulation - Textbox searching question

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • pazazuzu
    New Member
    • Apr 2010
    • 2

    #1

    String Manipulation - Textbox searching question

    Hello,

    I have been having problems with some code I am writing and have not been able to figure out what I am doing wrong, even after some debugging.

    I have a textbox that users can input any letters into, that should should search the item field boxes and highlight any matching strings. If a matching search is made, then the item box should remain yellow, and the other item boxes should be white.

    It does not have to be a perfect match. Any letter that matches, such as the letter '"j" in the word "juice" should be enough to make the item field box, highlight yellow.

    I am including my code but have not been able to figure out how to use this code:

    str_ireplace($t argetstring, '<span style="backgrou nd-color:#ff0000;" >' . $targetstring . '</span>', $item_value);

    (I must be doing something wrong) Any help with this would be greatly appreciated.

    Thanks.





    Code:
    <html>
    
    
    <head>
    
    <title>testcode</title>
    
    </head>
    
    
    <body>
    
    <body style="font-family: Arial, Helvetica, sans-serif; color: black;">
       
    <h1>Test</h1>
    
    
    <form method=post>
    
       
    <br><b>Sort order for items:</b>
    <br>
    <br> 
       
    
    <?php
    
    	$sort_order = trim($_POST['sort_order']); 
    	
    	$targetstring = trim($_POST['targetstring']);
    	
    	
    	if (isset($_POST['Submit'])) //The following code is intended to retain the choice of the radio button chosen by the user
    	
    	
    $sort_order = $_POST['sort_order'];
    
    	switch($sort_order)
    	{
    		case 'desc' :
    			print "Ascending <input type=radio name=sort_order value=asc>&nbsp;&nbsp;&nbsp;";
    			print "Descending <input type=radio name=sort_order value=desc checked>&nbsp;&nbsp;&nbsp;";
    			break;
    
    		default :
    
    			print "Ascending <input type=radio name=sort_order value=asc checked>&nbsp;&nbsp;&nbsp;";
    			print "Descending <input type=radio name=sort_order value=desc>&nbsp;&nbsp;&nbsp;";
    			break;
    
    	}
    	
    	$sort_line = array();  //Declare an empty array 
    	
    for ($row = 1; $row <5 ; $row++) // creates rows that are less than 5
    {
    	
    	$item_name='item'.$row; // assign values
    	$item_value=$_POST[$item_name]; // assign values
    	
    	$amount_name='amount'.$row;  // assign values
    	$amount_value=$_POST[$amount_name]; // assign values
    	
    	
    	$myelement = "$item_value*$amount_value*";
    	
    	
    	array_push($sort_line, $myelement); //Adds $myelement to the end of the $sort_line array
    	
    
    }	
    	
    	if ($sort_order == 'desc')
    	{
    	rsort($sort_line);  //Sorts array in place
    	} else {
    	sort($sort_line);  //Sorts array in place
    		   }
    
    
    ?>
    
    
    <br />
    <br />
    
    
    <br><b>Find Items that Contain:</b>
    <input type=text name=targetstring size=20>
    <br>
    <br>
    
    
    <table>
    
    <tr>
    <th>Item</th><th>Amount</th>
    </tr>
    
    
    <?php
    
    
    $err_cnt = 0;
    $total_amt = 0;
    $read_ctr = 1;	
    
    
    
    for ($row = 1; $row <5 ; $row++) // creates rows that are less than 5
    
    {		
    	$item_name='item'.$row; // assign values
    
    	$array_counter = $row - 1;  //To make sure to get element 0 in the array 
    
    	
    
    	$amount_name='amount'.$row;  // assign values
    
    	$array_counter = $row - 1;  //To make sure to get element 0 in the array 
    
    	
    	list($item_value_from_array, $amount_value_from_array) = explode('*',$sort_line[$array_counter]);
    	
    	
    	
    	
    	str_ireplace($targetstring, '<span style="background-color:#ff0000;">' . $targetstring . '</span>', $item_value);  // can not figure out the string manipulation for the search text box
    	
    	
    	
    	if ($targetstring == $item_value_from_array) 
    	{
    		print "<td><input type=text name=$item_name value='".$item_value_from_array."' style=\"background-color: Yellow;\"></td>\n";
    		//print "<td><input type=text name=$item_name value='".$item_value_from_array."'></td>\n";
    		print "<td><input type=text name=".$amount_name." value='$amount_value_from_array'></td>\n";
    	} else {
    		print "<td><input type=text name=$item_name value='".$item_value_from_array."'></td>\n";
    		//print "<td><input type=text name=$item_name value='".$item_value_from_array."' style=\"background-color: Yellow;\"></td>\n";
    		print "<td><input type=text name=".$amount_name." value='$amount_value_from_array'></td>\n";
    	}
    
    	
    	list($item_read, $amount_read) = explode("*", $sort_line[$array_counter]); // attempting to break up the Array elements into variables using explode function
    	
    
    	
    if (!empty($amount_read)) //if amount value is not empty
    	{
    		if (is_numeric($amount_read)) // checks to see if amount value is a numeric number
    		{
    			$total = $total + $amount_read; //adds the total of the amount column and created the $total variable
    		} else {
    			print"<td><font color=red>Amount: $amount_read is not a number</font></td>"; // if amount value is not numberic then prints error in red
    			$error_count++; // counts number of invalid amounts
    		}
    	}
    	
    	print"</tr>\n";
    }
    	
    	
    ?>
    
    
    </table>
    
     
    <?php
    	if ($error_count >0) // if statement checking to see if errors; if there are, then prints them. If not then prints total amount only
    	{
    		print"<br>Errors: $error_count"; // prints total of invalid amount errors
    	} else {
    		print"<br>Total: $total"; // prints total of amounts
    	}
    	
    	
    ?>
    
     
    <br><br><input type=submit value=Submit>
    
    <br>
    
    <br>
     
     
    </form>
    </body>
    </html>
  • Atli
    Recognized Expert Expert
    • Nov 2006
    • 5062

    #2
    Hey.

    There are two things that you need to fix to get this working.

    First off, the line you posted first, line #129 in the code, it does absolutely nothing. The function, str_ireplace, replaces a string and returns the result. Calling it without actually capturing the return value is pointless. - Also, in this case it is the wrong function to use anyways, so you may as well remove it entirely.

    What you can do to make this work is modify the boolean expression on line #133. You got the right idea: to compare the test string with the value of the current text box, but you need to do more than see if they are equal. You need to search within the value to see if it contains the test string. - To do that, you can use the stripos function. If there is a match, it will return the index where the match occurred, if not it returns FALSE. So we can use that to search one string with another like so:
    [code=php]if(stripos($str ing_to_search, $search_phrase) !== false) {
    echo "They match!!";
    }
    else {
    echo "Sorry, no match!";
    }[/code]

    Also, make sure you use the right value. That is: the $item_value_fro m_array variable, not the $item_value variable.

    Comment

    Working...