Получение данных поля mysql при нажатии на ссылку? - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь получить данные из базы данных, если щелкнуть ссылку.

В основном у меня есть 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 /> ";
}

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

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

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

в main.php, используйте

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

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

   $projectname= $_GET['projectname'];
1 голос
/ 29 февраля 2012

В этом коде много ошибок.

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

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

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

Причина, по которой ваш код дает сбой, состоит в том, что вы можете хранить только одно значение в $ _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']);
0 голосов
/ 29 февраля 2012
echo"<a href='fullproject.php?project_id='".$row2['project_id'].
"> $row2['projectName']</a>";

в fullproject.php

$project_id=$_GET['project_id'];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...