2015-08-27 5 views
0

Я создаю сайт фэнтезийного футбола, и у меня возникают проблемы с кавычками и javascript.Js, php, функция onclick и котировки

У меня есть одна таблица имен игроков и набор из 18 <div> (11 стартовых игроков и 7 скамейки) на изображении футбольного поля. Я хочу, чтобы пользователь мог нажимать на имя в таблице, и имя одновременно появляется в поле и исчезает из таблицы. Имя игрока должно появиться в первой «пустой» позиции (либо в начале, либо в скамье). С другой стороны, если пользователь нажмет на <div>, имя должно исчезнуть из поля/скамьи и появится в таблице в исходной позиции.

Это проще понять, чем объяснить! :)

я был в состоянии сделать это, но я получаю с ума, когда я узнал, были игроки с ' в их именах ...

У меня есть следующий фрагмент кода с массивом для ухода от 18 позиции (вар команды) и две функций

<script> 
    team = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0); 

    function insertPlayer(name) 
    { 
     var j = 0; 
     for (j=0; j<18; j++) { 
      if(team[j] == 0){ 
       break; 
      } 
     }; 
     if(j<18){ 
      team[j] = 1; 
      var num = j.toString(); 
      var id_string = 'player_'.concat(num); 
      document.getElementById(j).textContent = name; 
      document.getElementById(id_string).value = name; 
      document.getElementById(name).style.display = 'none'; 
     } 
    } 

    function removePlayer(id) 
    { 
     team[id] = 0; 
     var num = id.toString(); 
     var id_string = 'player_'.concat(num); 
     document.getElementById(document.getElementById(id).textContent).style.display = ""; 
     document.getElementById(id).textContent = ""; 
     document.getElementById(id_string).value = ""; 
    } 
</script> 

The <div> подобно этому один

<?php 
    for ($i=0; $i < 18; $i++) { 
     echo '<div onclick="removePlayer(\''.$i.'\')" id="'.$i.'">'; 
     if(isset($array[$i])){echo $array[$i];} 
     echo '<input type="hidden" id="player_'.$i.'" name="player_'.$i.'" value='; 
     if(isset($array[$i])){echo '"'.$array[$i].'"';} 
     echo '></div>'; 
    } 
?> 

, где, конечно, $array[$i] - это сохраненная линейка, если пользователь уже сделал это, и он хочет изменить свой первый выбор. Стол как этот:

<tr id="'.mysqli_real_escape_string($link,$name).'"> 
... 
<td>...</td> 
<td onclick=\"insertPlayer('".mysqli_real_escape_string($link,$name)."')\">".$name."</td> 
<td>...</td> 
... 

Как я уже сказал, это прекрасно работает с нормальными именами. Это дает мне неприятности с именем типа «О'Нил», например ...

Спасибо за помощь!

+1

'mysqli_real_escape_string' следует использовать только при помещении переменной в запрос SQL. – Barmar

+0

Поместите игроков в массив и поместите индекс массива в вызовы функций. – Barmar

+0

Посмотрите на специальные символы HTML-кодирования. – Tro

ответ

0

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

<script> 
    team = new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0); 
    var players = <?php echo json_encode($array); ?>; 

    function insertPlayer(playernum) 
    { 
     var name = players[playernum]; 
     var j = 0; 
     for (j=0; j<18; j++) { 
      if(team[j] == 0){ 
       break; 
      } 
     }; 
     if(j<18){ 
      team[j] = 1; 
      var num = j.toString(); 
      var id_string = 'player_'.concat(num); 
      document.getElementById(j).textContent = name; 
      document.getElementById(id_string).value = name; 
      document.getElementById(name).style.display = 'none'; 
     } 
    } 

    function removePlayer(id) 
    { 
     team[id] = 0; 
     var num = id.toString(); 
     var id_string = 'player_'.concat(num); 
     document.getElementById(document.getElementById(id).textContent).style.display = ""; 
     document.getElementById(id).textContent = ""; 
     document.getElementById(id_string).value = ""; 
    } 
</script> 

... 

<tr id="player_insert_'.$i.'"> 
... 
<td>...</td> 
<td onclick=\"insertPlayer('.$i.')\">".$name."</td> 
<td>...</td> 
...