2015-03-19 4 views
0

Я использую datalist для хранения всех имен и фамилий, которые я получаю из таблицы базы данных MySQL.Разделение между именем и фамилией с использованием datalists

Когда кто-то вводит имя и фамилия репетитора и нажимает "show tutor", вызывается showTutor().

Мой информатор заполнен и работает отлично. Сейчас: Когда showTutor называется, поэтому, когда была нажата кнопка:

function showTutor(){ 
    var tut = document.getElementById("tutorToShow").value; 
} 

Это дает мне что-то вроде Джона Смита или Мэри Джейн Теста.

В чем проблема:, когда я перезагружаю представленный репетитор div с помощью ajax, мне нужно получить идентификатор репетитора из базы данных.

Так что я определенно нужно это SQL:

Теперь мне просто нужно отделить имя.

Другими словами, как получить идентификатор из таблицы с идентификаторами колонок, именем, фамилией, не зная разделения между именем или фамилией?

John Smith: легкий, первое слово это имя, второе слово фамилия

Мэри Джейн Тесто: что теперь?

Я думал о добавлении запятой, которая разделяет оба имени, но это не очень стильно.

Другой вариант - добавить столбец в мою базу данных, в котором есть оба имени в одной записи, но это проблема, когда нужно добавить новых преподавателей.

+0

Добавьте идентификатор записи в качестве свойства 'data-id = "xx"' в

+0

Тогда что происходит, когда пользователь набирает, а не выбирает его из выпадающего списка? Что делать, если полное имя копируется откуда-то? –

+0

Если я правильно понимаю, типизированное или скопированное имя может соответствовать только записям, определенным в вашем datalist.Таким образом, вы должны найти идентификатор, который был добавлен в соответствующую запись datalist. Я протестировал элемент datalist на https://developer.mozilla.org/en/docs/Web/HTML/Element/datalist – Oli

ответ

0

Прошу прощения за задержку, @ Оли помог мне в чате несколько недель назад.

<input list="tutorData" name="tutors" id="tutorToShow"> 
<datalist id="tutorData"> 
    <?php 
    $sql = "SELECT name, surname, id FROM tutors ORDER BY surname ASC"; 
    if (!$res = $link->query($sql)) { 
     trigger_error('error in query ' . $link->error); 
    } else { 
     while ($row = $res->fetch_assoc()) { 
      $name = $row['surname']; 
      $sName = $row['name']; 
      $id = $row['id']; 
      ?> 

      <option value="<?php echo "$sName $name" ?>" data-id="<?php echo $id; ?>"> 
       <?php 
      } 
     } 
     ?> 
</datalist> 
<input type="button" value="Show" onclick="showTutor();"> 

Поэтому в основном я только добавил данные идентификатора, то я написал JavaScript:

<script> 
    function showTutor() { 
     var tut = document.getElementById("tutorToShow").value; 
     var list = document.getElementById("tutorData"); 
     var length = list.options.length; 
     var id; 
     for (var i = 0; i < length; i++) { 
      var eachTutor = list.options[i].value.toLowerCase(); 
      if (tut === eachTutor) { 
       id = list.options[i].getAttribute('data-id'); 
      } 
     } 
    } 
</script> 

теперь у меня есть идентификатор воспитателя, без разделения любого имени. Я также отправляю его на php-страницу с помощью ajax, но это не относится к вопросу.

Еще раз спасибо тем, которые помогли.

0

Сделайте это, прежде чем присвоить данные в ваши элементы

if (strpos($sName, ' ') != false) { 
    // if above string position of space isn't false, 
    // explode the string at the space into an array of 
    // individual names. 
    $sName = explode(' ', $sName); 
    echo $sNames[0]; 
    echo $sNames[1]; 
    // you will need to look at foreach loop and counting the array length 
} 

Попробуйте это.

<datalist id="tutorData"> 
<?php 
$sql = "SELECT name, surname FROM tutors ORDER BY surname ASC"; 
if (!$res = $link->query($sql)) { 
    trigger_error('error in query ' . $link->error); 
} else { 
    while ($row = $res->fetch_assoc()) { 
     $surname = $row['surname']; 
     $first_names = $row['name']; 
     if (strpos($first_names, ' ') != false) { 
      /* 
       if above string position of space isn't false, 
       explode the string at the space into an array of 
       individual names. 
      */ 
      $first_name = explode(' ', $first_names); // EG: Paul John 
      $name1 = $first_name[0]; // Paul 
      $name2 = $first_name[1]; // John 
      /* 
       you will need to look at foreach loop and counting 
       the array length 
      */ 
    } 

    ?> 
    <option value="<?php echo $name1 . ' ' . $name2 . ' ' . $surname" ?>" > 
    <?php 
    } 
} 
?> 
</datalist> 
+0

Я не уверен, как я должен использовать это на практике, вы разделяете фамилию на массив, и что? Мне нужно сделать то же самое для другого имени? –

+0

проверяет вашу переменную $ sName для пробела, которое является именем из базы данных. Я предполагаю, что первые имена EG: robert paul или alison diane и отдельное поле для фамилий. Взрыв разбивает строку на и массивы в пространствах (пробелы не добавляются в массив). – Chris

+0

Так что, если мои фамилии состоят также из нескольких пространств? –