Intereting Posts
Несколько проигрывателей Jplayer из Laravel DB Вызов события Magento Наблюдатель ПОСЛЕ удержания платежа одиночная цитата внутри двойной цитаты в php Использование PHP и RegEx для извлечения всех значений параметров из исходного кода сайта Как преобразовать этот JSON в php-массив, а также как получить только определенные значения Получить измененную дату через FTP с помощью PHP / CURL PHP-вопрос: как исправить эти инструкции if / elseif Проверьте, включен ли Javascript Facebook друзья электронной почты FQL MySQL INSERT … ON DUPLICATE UPDATE – добавляет один к автоинкременту Простой способ проверить, не является ли переменная не равной нескольким строковым значениям? ajax в php loop выполняет действие при нажатии кнопки Нельзя подписывать что-либо с PHP openssl_sign? Ajax: запрос CROS-DOMAIN не устанавливает файлы cookie с помощью Safari IOS с использованием PHP В PHP получает сообщение «Class» PDO «не найден» при попытке подключения к Oracle DB

Не удается отбросить одно значение (id) из db в массиве после нажатия кнопки отправки

Этот вопрос следует этой другой одной ссылке , но код и проблема разные, поэтому я хотел бы задать другой вопрос. Надежда не дублируется.

У меня есть форма редактирования. Это код для извлечения данных из БД:

$stmt = $conn->prepare(" SELECT phonetype.phonetypeID, phonetype.phonetype, phone.phoneID, phone.countrycode, phone.areacode, phone.phonenumber, phone.extension FROM phonetype LEFT JOIN phone ON phonetype.phonetypeID=phone.phonetypeID and phone.peopleID = ? "); if (!$stmt) { die(printf("Error: %s.\n", mysqli_stmt_error($stmt))); } else if (!$stmt->bind_param('i', $peopleID)) { die(printf("Error: %s.\n", mysqli_stmt_error($stmt))); } else if (!$stmt->execute()) { die(printf("Error: %s.\n", mysqli_stmt_error($stmt))); } else { $resultaddress = $stmt->get_result(); while ($row = $resultaddress->fetch_assoc()) { $phonetypeID_array[] = (isset($row['phonetypeID']) ? $row['phonetypeID'] : ""); $phonetype_array[] = (isset($row['phonetype']) ? $row['phonetype'] : ""); $phoneID_array[] = (isset($row['phoneID']) ? $row['phoneID'] : ""); $countrycode_array[] = (isset($row['countrycode']) ? $row['countrycode'] : ""); $areacode_array[] = (isset($row['areacode']) ? $row['areacode'] : ""); $phonenumber_array[] = (isset($row['phonenumber']) ? $row['phonenumber'] : ""); $extension_array[] = (isset($row['extension']) ? $row['extension'] : ""); echo $row['phonetypeID']; echo $row['phonetype']; echo $row['phoneID']; echo $row['countrycode']; echo $row['areacode']; echo $row['phonenumber']; echo $row['extension'] . '<br>'; } } /* end else */ 

И это код для формы

 for ($i = 0; $i < 4; $i++) { echo '<input type="text" name="phoneID[]" id="" value="' . (isset($phoneID_array[$i]) ? $phoneID_array[$i] : "") . '"/>'; echo '<input type="text" name="countrycode[]" id="" size="3" maxlength="3" value="' . (isset($countrycode_array[$i]) ? $countrycode_array[$i] : "") . '"/>'; echo '<input type="text" name="areacode[]" id="" value="' . (isset($areacode_array[$i]) ? $areacode_array[$i] : "") . '"/>'; echo '<input type="text" name="phonenumber[]" id="" value="' . (isset($phonenumber_array[$i]) ? $phonenumber_array[$i] : "") . '"/>'; } 

ПРОБЛЕМА :

Когда я редактирую форму, т. Е. Я ввожу новый номер телефона, и нажмите кнопку отправки, перезагрузите форму всеми новыми данными (areacode, phonenumber), но новый идентификатор телефона не будет отображаться в форме.

НО это эхо в цикле while, который я использую в качестве теста при разработке. И Если я перепечатаю адрес страницы в адресной строке, новый идентификатор телефона отобьет его в форме.

Что я делаю не так?

EDIT: в соответствии с предложением cal_b, если я тестирую:

 var_dump($phoneID_array); 

вывод при загрузке страницы:

 array(1) { [0]=> int(28) } array(2) { [0]=> int(28) [1]=> string(0) "" } array(3) { [0]=> int(28) [1]=> string(0) "" [2]=> string(0) "" } array(4) { [0]=> int(28) [1]=> string(0) "" [2]=> string(0) "" [3]=> int(29) } 

вывода при добавлении нового телефона:

 array(5) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) } array(6) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) [5]=> int(58) } array(7) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) [5]=> int(58) [6]=> int(59) } array(8) { [0]=> string(2) "28" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(2) "29" [4]=> int(28) [5]=> int(58) [6]=> int(59) [7]=> int(29) } 

РЕШЕНИЕ:

Посмотрев на var_dump и прочитав руководство по php.net о массивах, я понял, что я делаю неправильно.

В разделе кода SUBMIT я загружаю все $ _post в массивы

  /*put all the entries into an arrays */ $phoneID_array = $_POST['phoneID']; $phonetypeID_array = $_POST['phonetypeID']; $countrycode_array = $_POST['countrycode']; $areacode_array = $_POST['areacode']; $phonenumber_array = $_POST['phonenumber']; $extension_array = $_POST['phoneextension']; 

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

  for ($i = 0; $i < count($phonetypeID_array); $i++) { $phoneID = mysqli_real_escape_string($conn, $phoneID_array[$i]); $countrycode = mysqli_real_escape_string($conn, $countrycode_array[$i]); ........................ 

Я думал, что, когда вы используете одно и то же имя для массива, как и вы можете сделать для переменной, просто назначьте новое значение, но, видимо, я ошибся. если вы используете одно и то же имя переменной, оно добавляет новые значения к предыдущим. (Я до сих пор не понимаю, почему, и я был бы признателен, если бы кто-нибудь написал 2 строки, чтобы объяснить это).

Таким образом, решения заключаются в следующем: a) отменить массивы, прежде чем назначать одно и то же имя другому массиву или b) просто использовать разные имена

PS Извините, проблема была в единственном фрагменте кода, который я не включил в мой (уже давно) вопрос :(!