2014-11-28 8 views
0

Я работаю над проектом php. У меня есть ассоциативный массив, который я использую для создания словаря. У меня также есть строка с текстом, в которую включены некоторые ключи массива. То, что я хочу сделать, это генерировать другую String с тем же текстом первого, но где ключевые слова заменяются значениями массива.Передача переменной от AJAX до PHP

До сочитания я хочу, чтобы пользователь записывал в каждое пустое значение массива (который сравнивает с String) содержимое. Мне нужно сделать всплывающее окно. Мне нужно получить содержимое переменной Javascript-переменной и поместить ее в массив PHP. Я пытался использовать AJAX, но я большой, и я не знаю, хорошо ли я.

Вот мой код (который не работает):

<?php 
    $array["[[red]]"] = "Once upon a time"; 
    $array["[[blue]]"] = "fox"; 
    $array["[[black]]"] = "cat"; 
    $array["[[orange]]"] = ""; 

    $string = "<br /> It has been a long time since [[red]] " 
    . "[[blue]]. My name is [[blue]] " 
    . "and my surname is [[black]]. <br />" 
    . "My age is[[orange]]. <br /> <br />."; 

    echo "First string': ". $string; 
?> 
<br /> <br /> 

<?php 
    foreach ($array as $key => $value) 
    { 
    if ((strstr($string, $key) == true) && ($value == "")) 
    { 
?> 
     <script> 
     name = prompt("Insert a correct value: "); 
     while ((name== "") || !(isNaN(name)) || name== null) 
     { 
      window.alert("Wrong insert!"); 
      name= prompt("Insert a correct value: "); 
     } 

     var xmlhttp=new XMLHttpRequest(); 

     xmlhttp.open("GET","index.php?name="+name,true); 
     xmlhttp.send(); 
     </script> 

<?php 
     $q = $_REQUEST["name"]; 
     $value = $q; 
     echo "the value is ".$q; 
    } 
    //echo $key." => ".$value; 
    echo "<br/> <br/>"; 
    } 
?> 
+0

Пожалуйста, опишите более подробно, что проблема есть. Кроме того, укажите любые ошибки PHP и ошибки JavaScript, которые вы получаете. То есть: включить отчет об ошибках в PHP и просмотреть вкладку консоли инструментов разработчика в вашем браузере. – GolezTrol

ответ

1

Чтобы создать строку с ключевыми словами заменяются значениями в массиве, вы можете использовать функцию sprintf так:

$array["red"] = "Once upon a time"; 
$array["blue"] = "fox"; 
$array["black"] = "cat"; 
$array["orange"] = ""; 

$sentence = "<br />It has been a long time since %s %s. My name is %s and my surname is %s.<br /> My age is %s. <br /><br />."; 
echo "First string" . sprintf($sentence, $array["red"], $array["blue"], $array["blue"], $array["black"], $array["orange"]); 

Что касается второй части вашего вопроса, где вы хотите захватить входные данные пользователя, чтобы заполнить пустую запись в массиве ... ну, вы должны сначала скорректировать переменную js nome с помощью name.

Затем вам необходимо отправить оба ключа и предоставленное пользователем значение в свой вызов AJAX, чтобы вы знали, какая запись в вашем ассоциативном массиве обновляется. Будет легче зафиксировать параметры запроса до того, как будет создан экземпляр $array.

Кроме того, strstrне возвращение true даже если needle присутствует в haystack. Взгляните на doc.

Так что, может быть что-то вроде:

<?php 
    // you may want to modify the handling of the query parameters to suit your needs 
    if(isset($_REQUEST['key']) && isset($_REQUEST['name']) 
    $array[$_REQUEST['key']] = $_REQUEST['name']; 

    $array["red"] = "Once upon a time"; 
    $array["blue"] = "fox"; 
    $array["black"] = "cat"; 
    $array["orange"] = ""; 

    foreach ($array as $key => $value) { 
    if (strstr($string, $key) && $value.empty()) { 
?> 
    <script> 
     name = prompt("Insert a correct value: "); 
     while ((name== "") || !(isNaN(name)) || name== null) { 
     window.alert("Wrong insert!"); 
     name= prompt("Insert a correct value: "); 
     } 

     var xmlhttp=new XMLHttpRequest(); 
     xmlhttp.open("GET","index.php?name=" + name + "&key=" + <?php echo $key?>,true); 
     xmlhttp.send(); 
    </script> 

<?php 
    } 
    } 

    /* echo etc.. */ 
?> 
+0

Извините, я допустил ошибку. Переменная - это «имя», а не «имя». Я думаю, что я не изменю эту часть, так как она работает нормально (и мне нужно сделать так, потому что проект намного сложнее. Я только что опубликовал пример). Проблема заключается в второй части. Мне нужно получить переменную «имя» и передать ее на php (без обновления страницы). Затем он будет помещен в значение массива, которое раньше было пустым. – user3563844

+0

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

+0

Вы уверены, что '$ string ="
Прошло много времени с [[red]] .. "' фактически заменяет '[[red]]' значением '$ array [" [[red]] " ] '? –

Смежные вопросы