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:
[code=php]
/****************************************************************************
* 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() );
}
Here’s how I use it (Note: $edit[1] contains the value to preselect):
[code=php]<?php printComboBox( “SELECT id, name FROM departments”, “department”, 0, 1, $edit[1] ); ?>
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):
[code=html]
<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�.�
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.
All the searching I did, didn’t give me a solution, hope you can help me =)
thx in advance