Hey there,
I'm relatively new to PHP and I got a problem I just cannot seem to solve. I have to display a <select>-box filled with values from a MySQL-database. Since I have to do this very often and for a lot of different tables, I wrote this function:
Here's how I use it (Note: $edit[1] contains the value to preselect):PHP Code:/****************************************************************************
* Prints a <select>-Combobox
* $sql(String): An SQL-Statement, used to gather the data vor the box
* $name(String): The name vor the <select>
* $keyCol(int): The column in the result from $sql, which contains the value for the value-property of the different <option>-tags
* $valueCol(int): THe column in the result from $sql, which contains the text for the different <option>-tags
* $selected(String): A value, that should be preselected
* $includeNoVal(Boolean): if true, the printed <select> will contain a "Not specified"-option
* *************************************************************************/
function printComboBox( $sql, $name, $keyCol, $valueCol, $selected, $includeNoVal=true )
{
$db = db_connect();
$tmp = mysql_query( $sql, $db );
var_dump( $tmp ); //for testing purposes
if( $tmp )
{
echo "<select size=\"1\" name=\"" . htmlspecialchars($name) . "\">\n"; //Start the <select>
if( $includeNoVal ) //There shall be a "Not specified"-option
{
echo "\t<option value=\"NULL\"";
if( !isset( $selected ) ) //If there is no preselection specified
echo " selected"; //Preselect the "Not specified" option
echo ">Not specified</option>\n";
}
while( $tmpRow = mysql_fetch_row( $tmp ) )
{
var_dump( $tmpRow ); //For testing purposes
echo "\t<option value=\"" . htmlspecialchars($tmpRow[$keyCol]) . "\""; //Print the start of the <option>-tag
if( $selected == $tmpRow[$keyCol] ) //Check wether this <option> needs to be preselected
echo " selected";
echo ">" . htmlspecialchars( $tmpRow[$valueCol] ) . "</option>\n"; //Close the option-tag
}
echo "</select>\n"; //End of the <select>
}else
throw new DBException( "Unable to retrieve data for \'" . $name . "\'", mysql_errno() );
}
The Problem is, that PHP behaves really strange when I run this code. Sometimes, it works just fine (~50% of the time). However, sometimes PHP just seems to randomly stop the output. Sometimes it even stops WITHIN one of the test-vardumps (Very special in this case: it even puts out some text that looks like the text "domain." displayed with the wrong encoding):PHP Code:<?php printComboBox( "SELECT id, name FROM departments", "department", 0, 1, $edit[1] ); ?>
I have absolutely no idea what is going wrong there. As I said, WHERE it stops seems completely random. Sometimes it's in the middle of an echo, sometimes it's like above, within a call of var_dump. And sometimes it works just fine.HTML Code:<select size="1" name="department"> [...] <option value="114">Some test department here </option> array(2) { [0]=> string(3) "115" [1]=> string(13) "Some test department here " } <option value="115">Another test department </option> array(2) { [0]=> string(3) "116" [1]=> string(9) "d�o�m�a�i�n�.�
All the searching I did, didn't give me a solution, hope you can help me =)
thx in advance


Reply With Quote

Bookmarks