2012-05-05 2 views
-1

Я получаю данные из базы данных с помощью AJAX и PHP. В базе данных один из столбцов содержит путь к папке с изображением. Я сохраняю значение пути в переменной PHP с именем $ folder. Это можно увидеть в коде getuser.php.
Я хочу, чтобы эта переменная была видимой/доступной в one.php, чтобы мои изображения с использованием этой переменной могли быть заполнены. Как я это сделаю. Я попытался включить php, но не использовал.Переменная не работает в PHP



getuser.php

<?php 
$q=$_GET["q"]; 

$con = mysql_connect('localhost', 'san', '123'); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("holidayNet", $con); 

$sql="SELECT * FROM image WHERE id = '".$q."'"; 

$result = mysql_query($sql); 

echo "<table border='1'> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
<th>Age</th> 
<th>Hometown</th> 
<th>Picture</th> 
</tr>"; 

while($row = mysql_fetch_array($result)) 
    { 
    $folder = $row['FirstName']; 
    echo "<tr>"; 
echo "<td>" . $row['FirstName'] . "</td>"; 
    echo "<td>" . $row['LastName'] . "</td>"; 
    echo "<td>" . $row['Age'] . "</td>"; 
    echo "<td>" . $row['Hometown'] . "</td>"; 


    /*echo "<td>" . $row['Job'] . "</td>";*/ 
    echo "</tr>"; 
    } 
echo "</table>"; 

mysql_close($con); 


?> 



one.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<script type="text/javascript"> 
function showUser(str) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getuser.php?q="+str,true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<form> 
<select name="users" onchange="showUser(this.value)"> 
<option value="">Select a person:</option> 
<option value="1">Sn Qb</option> 
<option value="2">Lois Griffin</option> 
<option value="3">Glenn Quagmire</option> 
<option value="4">Joseph Swanson</option> 
</select> 
</form> 
<br /> 
<div id="txtHint"><b>Person info will be listed here.</b></div><br /> 

<img src="<?php echo $folder;?>/pic1.jpg" /> 
<img src="<?php echo $folder;?>/pic2.jpg" /> 
<img src="<?php echo $folder;?>/pic3.jpg" /> 
<img src="<?php echo $folder;?>/pic4.jpg" /> 


</body> 
</html> 
+3

jQuery упростит вашу жизнь, держу пари. – Blake

+0

@Blake В этот час я бы очень оценил, могу ли я получить приготовленный код JQuery .. :) –

+3

Где вы определить '$ folder'? И вы должны использовать '$ sql =" SELECT * FROM image WHERE id = '".mysql_real_escape_string ($ q)."' ";' Вместо вашего текущего кода, иначе злоумышленники могут легко изменить всю вашу базу данных. – Tyilo

ответ

2

Эй вы создаете имя переменной $ папку в PHP файл (getuser.php), который вызывался на AJAX. Но его недоступно в имени файла one.php.

только то, что вы эхо от getuser.php будет доступен в переменной JS xmlhttp.responseText

Таким образом, вы получите всю Person информации эха в getuser.php, но не получите переменный $ папки.

Поскольку у вас есть специально закодированные 4 изображения. Я предлагаю вам также эхо-теги img в getuser.php вместе с другой информацией из базы данных выбранного человека.

while($row = mysql_fetch_array($result)) 
{ 
    $folder = $row['FirstName']; 
    echo "<tr>"; 
    echo "<td>" . $row['FirstName'] . "</td>"; 
    echo "<td>" . $row['LastName'] . "</td>"; 
    echo "<td>" . $row['Age'] . "</td>"; 
    echo "<td>" . $row['Hometown'] . "</td>"; 


    /*echo "<td>" . $row['Job'] . "</td>";*/ 
    echo "</tr>"; 
} 
echo "</table>"; 

for($i = 0; $i < 4; $i++) 
{ 
    echo '<img src="'.$folder.'/pic'.($i+1).'.jpg" />'; 
} 

И удалить эти теги изображений из one.php страницы

Другой Решение: Предложение, которое я могу дать, чтобы добавить разделитель различать 2 вещи. Первая - это таблица, которую вы хотите распечатать, и значение переменной $ folder. Для например: рассмотреть Сепаратор ####

Шаг 1: Так что теперь ваш код от getuser.php будет

while($row = mysql_fetch_array($result)) 
{ 
    $folder = $row['FirstName']; 
    echo "<tr>"; 
    echo "<td>" . $row['FirstName'] . "</td>"; 
    echo "<td>" . $row['LastName'] . "</td>"; 
    echo "<td>" . $row['Age'] . "</td>"; 
    echo "<td>" . $row['Hometown'] . "</td>"; 


    /*echo "<td>" . $row['Job'] . "</td>";*/ 
    echo "</tr>"; 
} 
echo "</table>####".$folder; 

Шаг 2: Изменения в одном.PHP для разделения 2 значения

if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
// split is the function which breaks the string with the value provided and then creates an array of the parts. 
     var arrResponse = (xmlhttp.responseText).split("####"); 
     // added || below to validate the index 1 of arrResponse. if xmlhttp.responseText does not have #### it wont break the string and hence wont have the folderName part, in such cases javascript will give undefined value, by adding || we tell if value is present take the present value otherwise take it as an empty string '' 
    var folderName = arrResponse[1] || '' 
     document.getElementById("txtHint").innerHTML=arrResponse[0]; 

     // we will fetch all the image tags from your html page 
     var arrImgs = document.getElementsByTagName('img'); 
     var imgCount = arrImgs.length; 
     for(i = 0; i < imgCount; i++) 
     { 
      arrImgs[i].setAttribute('src', folderName+'/pic'+(i+1)+'.jpg'); 
     } 
    } 
+0

ok, как бы получить результат из xmlhttp.responseText в AJAX. Код будет оценен. –

+0

отредактировал решение, пожалуйста, проверьте другое решение. – swapnilsarwe

+0

Спасибо, сэр! возможно ли, что я получаю, чтобы печатать значения из таблицы на моей странице AJAX. (предполагая, что существует только одна строка). Меня интересует только выбор значения $ folder и размещение его в теге IMG, как это

0

То, что вы делаете неправильно, что вы смешиваете вещи вместе, спе cinary PHP и HTML, я могу лучше объяснить, если вы хотите, но на данный момент я только попытаюсь объяснить решение вашей проблемы, я надеюсь, что это будет хорошо для вас.

1/$ папка не будет достижимым из one.php

2/получить информацию от $ папки вы бы лучше получить его в Ajax запрос, а затем вы можете использовать функцию Javascript для изменить атрибут

3/другое решение, так как вы генерации HTML-код для таблицы в getuser.php, вы можете также произвести еще несколько строк с изображениями Tages включены

ли я хорошо объяснить ? пожалуйста, если нет, то я готов попробовать еще раз :)

удачи

+0

Можете ли вы вести меня с AJAX и кодом JavaScript. Более того, я не могу включить теги в getuser.php, поскольку я использую one.php для сопряжения. Поэтому я обязан привести результат переменной в one.php. Спасибо –

+0

Да, ** Ajax ** также ** JavaScript ** хорошо, я постараюсь написать вам возможное решение ниже –

0

По вашему желанию, я расскажу вам возможное решение, используя один и тот же, как вы делали это раньше

в первую очередь, вам нужно будет изменить оба файла

1/перейти к getuser.php и удалить все эхо, хранить строки в переменном вместо

2 /, чем, после цикла создания индексированного массива с вашими обеими переменными ($ папки и новые переменной, которая содержит строка html)

3/после этого вы можете кодировать массив в формате JSON, с помощью функции «json_encode» (выпускается с PHP5)

4/все, что вы все еще должны сделать, находится в one.php странице, когда получив результат, вам нужно декодировать строку, которую вы получаете с помощью функции eval (встроенная функция Javascript), эта функция вернет индексированный массив (с теми же индексами) и поместит строку html в div «txtHint», используя содержимое другой переменной в ваших тегах изображений (с использованием функций javascript)

было достаточно ясно, чтобы следовать? (извините, мой английский не так уж хорош :()

+0

Хорошо, я ценю усилия, но использование eval не предлагается и считается злым. Я рекомендую добавить имя папки с некоторым разделителем вместе с эхом. Затем отделите HTML и имя_папки в javascript. Например: – swapnilsarwe

+1

'var arrResponse = (xmlhttp.responseText) .split (" #### "); document.getElementById ("txtHint"). InnerHTML = arrResponse [0]; var folderName = arrResponse [1]; // мы получим все теги изображений со страницы html var arrImgs = document.getElementsByTagName ('img'); var imgCount = arrImgs.length; для (i = 0; i swapnilsarwe

+0

Да, это отпущение греховным способом, но я не понимаю, почему ** eval ** не предлагается или считается злым, потому что я использую его уже более 3 лет и это меня не подвело! –

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