Использование переменной в массиве, когда переменная извлекается из таблицы SQL - PullRequest
1 голос
/ 02 сентября 2010

В основном я пытаюсь сделать простую форму, которая позволяет пользователю редактировать данные в таблице. Он извлекает данные из базы данных и использует эти переменные для предварительного заполнения формы. Затем пользователь может просто отредактировать информацию в форме и повторно отправить данные. Проблема в том, что ... выбор состояния - это функция, которая автоматически создает раскрывающийся список в форме, заполняя его всеми состояниями. Я подумал, что если я просто добавлю переменную в начало этого массива состояний, то первой опцией в массиве будет состояние, которое уже было в базе данных, но оно не работает - оно просто появляется пустым. (первая опция, показанная в раскрывающемся списке, пуста, остальные списки состояний отображаются так, как должны)

 while ($row = mysql_fetch_array($result)) {
      $id = $row['id'];
      $first = $row['first'];
      $last = $row['last'];
      $city = $row['city'];
      $state = $row['state'];
      $email = $row['email'];
      $bday = $row['bday'];

        function state_selection()
        {
            $str = '<select name="state2">';
            $states = array(
                    "$state","Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii",                                                                                                   "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri",                                                                            "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma",                                                                            "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia",                                                                            "Wisconsin", "Wyoming"
                );
            foreach ($states as $state_name)
            {
                $str .= '<option value="'.$state_name.'">'.$state_name.'</option>';
            }
            $str .= '</select>';

            return $str;
        }

      $editBlock = '<form method="post" action="./sadd.php">
      <p>First Name: <input name="first2" value="' . $first . '" type="text"  size=13 maxlength=25 /></p>
      <p>Last name: <input name="last2" value="' . $last . '" type="text" size=13 maxlength=25 /></p>
      <p>City:<input name="city2" value="' . $city . '" type="text" size=25 maxlength=50 /></p>
      <p>State: '.state_selection().' </p>
      <p>Email:<input name="email2" value="' . $email . '" type="text" size=50 maxlength=75 /></p>
      <p>Birthday:<input name="bday2" value="' . $bday . '" type="text" size=10 maxlength=10 />(ex 1982-06-26)</p>
      <p><input type="hidden" name="eb" value="ebf" /></p>
      <p><input type="submit" name="submit" value="Update Contact" /></p>
      </form>';

      echo "$editBlock"; }

Ответы [ 3 ]

3 голосов
/ 02 сентября 2010

$ состояние не находится в области видимости, измените его на

 function state_selection($state){

и вызовите как

 state_selection($state);

Более надежный метод вместо предварительного указания будет

'<option value="'.$state_name.'" '.($state_name==$state)?'selected':'').'>'
1 голос
/ 02 сентября 2010

Вы не можете получить доступ к переменной $ state в функции, не объявив ее как глобальную.Добавьте эту строку в начало state_selection()

global $state;

Другой вариант - передать $state в качестве параметра state_selection()

0 голосов
/ 02 сентября 2010

Вот обновленный код.Несколько ключевых замечаний:

  • Вам не нужно зацикливаться, если вы тянете только 1 запись.
  • Массив внутри функции не нужен.Я не люблю глобальные переменные, поэтому я установил его для передачи в качестве параметра.
  • Добавлен параметр по умолчанию, это установит выбранное состояние в это.переменная сама по себе.Это не обязательно и неэффективно.Лучше получить к ним доступ через массив.

Любые вопросы, дайте мне знать.

function state_selection($states, $default) {
    $str = '<select name="state2">';

    foreach ($states as $state_name) {
        $str .= '<option value="'.$state_name.'" ' . (($default == $state_name)?"selected":"") . '>'.$state_name.'</option>';
    }

    $str .= '</select>';

    return $str;
}

$states = array("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", 
                    "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", 
                    "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", 
                    "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", 
                    "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", 
                    "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", 
                    "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

$row = mysql_fetch_assoc($result);

$editBlock = '<form method="post" action="./sadd.php"> 
      <p>First Name: <input name="first2" value="' . $row['first'] . '" type="text"  size=13 maxlength=25 /></p>
      <p>Last name: <input name="last2" value="' . $row['last'] . '" type="text" size=13 maxlength=25 /></p>
      <p>City:<input name="city2" value="' . $row['city'] . '" type="text" size=25 maxlength=50 /></p>
      <p>State: ' . state_select($states, $row['state']) . ' </p>
      <p>Email:<input name="email2" value="' . $row['email'] . '" type="text" size=50 maxlength=75 /></p>
      <p>Birthday:<input name="bday2" value="' . $row['bday'] . '" type="text" size=10 maxlength=10 />(ex 1982-06-26)</p>
      <p><input type="hidden" name="eb" value="ebf" /></p>
      <p><input type="submit" name="submit" value="Update Contact" /></p>
      </form>';

echo $editBlock; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...