2012-02-29 2 views
0

Я пытаюсь получить данные из базы данных, если нажата ссылка.Получение данных поля mysql при нажатии ссылки?

В принципе у меня есть main.php, содержащий это:

$sql2="SELECT projectsid, projectname, description, 
    SUBSTRING(description,0,80) FROM projects"; 
$result2=mysql_query($sql2);  

while($row2 = mysql_fetch_assoc($result2)) { 
    echo "<div id=\"links\">"; 
    echo "<ul>"; 
    echo "<li> <a href=\"fullproject.php\">" . $row2['projectname']; 
    $_SESSION['projectname']= $row2['projectname']; 
    echo "<em>" . $row2['description'] . "</em></a></li>"; 
    echo "</ul>"; 
    echo "</div>"; 
} 

Это отображает список имен и краткое описание.

  • proj1
    • описание
  • proj2
    • описание

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

fullproject.php

<?php 
session_start(); 
$projectname= $_SESSION['projectname']; 

// Connect to server. 
require ("connect.php"); 

$sql1="SELECT projectsid, projectname, programme, difficult, requirements, 
    resources, description, contact, gsize, size 
    FROM projects WHERE projectname = '$projectname'"; 
$result1=mysql_query($sql1);  

while($row1 = mysql_fetch_assoc($result1)) { 
echo "Project Name: " . $row1['projectname']. "<br />"; 
echo "Programme : " . $row1['programme'] . "<br />"; 
echo "Difficult : " . $row1['difficult'] . "<br />"; 
echo "Requirements : " . $row1['requirements'] . "<br />"; 
echo "Resources : " . $row1['resources'] . "<br />"; 
echo "Description : " . $row1['description'] . "<br />"; 
echo "Contact : " . $row1['contact'] . "<br />"; 
echo "Group size : " . $row1['gsize'] . " " . $row1['size'] . "<br />"; 
echo "<br /> "; 
} 

Всякий раз, когда я нажимаю любого из элементов списка проекта, он отображает только последний itemin списка. Я считаю, что это происходит потому, что, когда цикл while заканчивается, переменная сеанса установлена ​​на последнюю. Может ли кто-нибудь сказать мне, как это исправить? Благодаря

ответ

1

Попробуйте использовать переменную GET вместо сеанса

в main.php

echo "<li> <a href='fullproject.php?projectname=$row2[projectname]'>"; 

в fullproject.php объявить переменную и инициализировать его в переменной получить

$projectname= $_GET['projectname']; 
+0

сейчас работает. Большое вам спасибо за вашу помощь. – user1240187

0
echo"<a href='fullproject.php?project_id='".$row2['project_id']. 
"> $row2['projectName']</a>"; 

в fullproject.php

$project_id=$_GET['project_id']; 

, то вы можете использовать этот идентификатор, чтобы отобразить содержимое этого проекта идентификатор из базы данных

+0

Спасибо за ответ, и я сделал то, что вы предложили, но он не работает, когда я нажимаю на ссылка ничего не приходит. – user1240187

+0

Что показывает URL-адрес после нажатия ссылки. 'http: //path/fullproject.php? project_id = 5' –

+0

http: //path/fullproject.php? project_id = – user1240187

1

Существует много неправильно с этим кодом.

1) Вы пытаетесь отправить первичный ключ таблицы через 2 разных метода в main.php: в сеансе и по пути URL. Это просто плохая практика - причина, по которой у вас есть доступ к различным каналам для передачи данных, заключается в том, что у всех они разные семантики, но даже тогда, отправляя одну и ту же вещь дважды, всегда есть риск, что принимающая сторона может увидеть разные значения и поэтому должны иметь способ согласования несоответствия.

2) Вы используете сеанс для передачи данных транзакционных данных. Это плохая идея - элемент данных относится к конкретному переходу - не к сеансу. $ _SESSION следует использовать только для хранения данных, относящихся к сеансу, а не для навигации или транзакций.

3) Другой канал, который вы предоставили для передачи элемента данных, добавляет его к пути в URL.Хотя в некоторых случаях этот подход имеет преимущества, он также имеет сложности, характерные для веб-сервера, на котором реализован код: вы не указали, почему вы используете этот apporach вместо обычного $ _GET или $ _POST var.

Причина, по которой ваш код не работает, заключается в том, что вы можете сохранить только одно значение в $ _SESSION ['projectname']. Даже если вы сохранили массив значений в сеансе, для веб-сервера не существует механизма для определения того, какое из этих значений было выбрано, когда код был доставлен в браузер.

Ваш HTML плохо структурирован и плохо отформатирован.

Код, который вы указали, не соответствует приведенному описанию (он не отображает название проекта).

Ваш код также широко открыт для SQL-инъекций.

Изменить его так, что в main.php:

echo "<div id=\"links\">\n"; 
echo "<ul>\n"; 
while($row2 = mysql_fetch_assoc($result2)){ 
    echo "<li> <a href=\"fullproject.php?project=\"" 
     . urlencode($row2['projectname']) . "\">" 
     . htmlentities($row2['projectname']) . "</a>\n"; 
    echo "<br /><em>" . $row2['description'] . "</em></li>"; 
} 
echo "</ul>"; 
echo "</div>"; 

И fullproject.php

<?php 
session_start(); 
require ("connect.php"); 
$projectname= mysql_real_escape_string($_GET['projectname']); 
Смежные вопросы