Я уже искал час, чтобы решить следующую проблему, но я не смог найти ответ по моей конкретной проблеме. У меня есть некоторые идеи, которые я предлагаю после введения в проблему.
Проблема:
У меня есть html-форма в php-файле. Вы можете ввести имя (сначала, mi, last) номер телефона и номер учетной записи в эту форму. Если добавлен номер телефона, функция onblur (с использованием файла javascript file.js) в поле ввода номера телефона используется для автоматического заполнения других 4 полей с использованием хэша, которые являются номерами телефонов, а значения являются json-object, который содержит все 4 других значения.
Если введенные данные клиента не существуют в хэше, то его следует добавить, нажав кнопку отправки с помощью ajax-запроса еще раз.
ниже показан файл с формой ввода: index.php :
<?php session_start(); // set the hash to session // add the new item to the array/hash // reset the array/hash back to session variable // ?> <html> <head> <script src="./jquery-2.1.1.min.js"></script> <script src="./request.js"></script> </head> <body> <div style="margin-left: 300px"> <form id="dataForm" method="POST"> Name: <input type="text" id="fname" name="fname" value="First Name" onfocus="this.value=''"/> <input type="text" id="mi" name="mi" value="Middle Initial" onfocus="this.value=''"/> <input type="text" id="lname" name="lname" value="Last Name" onfocus="this.value=''"/><br /> Phone: <input type="text" id="phone" name="phone" value="Phone number" onfocus="this.value=''"/> <span style="margin-left:113px;">Account:</span> <input type="text" id="account" name="account" value="Account number" onfocus="this.value=''"/> <br /> <input style="margin-left:230px" type="submit" name="submit"/> <input type="reset" name="clear"/> </form> </div> </body> </html>
следующий файл – это файл javascript, который обрабатывает все действия в форме. GetCustomerInformation.php должен включать все переменные сеанса, которые могут быть загружены с использованием вызовов ajax.
file: request.js
$(document).ready(function(){ $('#phone').blur(function(){ console.log('on blur was called'); $.ajax({ url: './getCustomerInformation.php?code=0&phone=' + this.value, success: function(response, status, jqXhr) { var info = JSON.parse(response); $('#fname').val(info.fname); $('#mi').val(info.mi); $('#lname').val(info.lname); $('#account').val(info.account); console.log("successful response"); }, error: function(xhr, status, error){ alert("Error!" + xhr.status); } }) }); $('#dataForm').submit(function(){ console.log('form submitted'); var phone = $('#phone').value; var fname = $('#fname').value; var mi = $('#mi').value; var lname = $('#lname').value; var account = $('#account').value; $.ajax({ url: './getCustomerInformation.php?code=1&phone=' + phone +'&fname='+fname+'&mi='+mi + '&lname='+ lname +'&account='+account, success: function(response, status, jqXhr) { console.log("successful SUBMIT response"); }, error: function(xhr, status, error){ alert("Error!" + xhr.status); }, }) }); })
файл: getCustomerInformation.php :
<?php session_start(); $_SESSION['1234567'] = '{"lname": "Berg", "mi": "M", "fname": "Thomas", "account": "1234"}'; $_SESSION['1122334'] = '{"lname": "Jordan", "mi": "C", "fname": "Jacky", "account": "4321"}'; $phone = $_GET['phone']; $fname = $_GET['fname']; $lname = $_GET['lname']; $mi = $_GET['mi']; $acc = $_GET['account']; if($_GET['code'] == 0){ if(array_key_exists('phone', $_GET) && array_key_exists($phone, $_SESSION)){ print $_SESSION[$phone]; } } else { if (array_key_exists('fname', $_GET) && array_key_exists('lname', $_GET) && array_key_exists('account', $_GET)){ $_SESSION[$phone] = '{"lname": "' + $lname+ '", "mi": "'+ $mi + '", "fname": "'+$fname+'", "account": "'+$acc+'"}'; } else { // Data are not complete - not possible to add them to the Session. } } ?>
Мои идеи:
Я пытался использовать переменные POST вместо GET, но тогда я даже не смог получить к ним доступ в getCustomerInformation.php . Я включил тип: «POST» в методах ajax, но это не помогло.
Я думал, что может быть что-то не так с вызовом session_start () , но я добавил его в оба php-файла, но никаких изменений.
Сначала я хотел использовать массив как переменную сеанса, и я использовал его как хэш, чтобы использовать только одну переменную $ _SESSION ['hash'], которая содержит все сохраненные значения, например:
$cust = array("1234567" => '{"lname": "Berg", "mi": "M", "fname": "Thomas", "account": "1234"}', "1122334" => '{"lname": "Jordan", "mi": "C", "fname": "Jacky", "account": "4321"}' ); $_SESSION['hash'] = $cust;
Каждый раз пользователи вводят новые данные. Я загрузил массив из $ _SESSION ['hash'] и сохранил его после записи ==> тоже не работал.
Кто-нибудь есть идея, как я могу изменить код, чтобы иметь возможность сохранять данные в бэкэнд ( getCustomerInformation.php ) с помощью переменной $ _SESSION / s (лучше с массивом-хэшем)?
Извините за большой объем кода, я надеюсь, что он доступен для чтения. Но я подумал, что лучше всего включить весь код
для лучшего понимания.