根据查询结果

时间:2017-08-04 17:04:02

标签: javascript session canvas

我无法将用户数据与button操作相关联,以打开格式为canvas的报告。

下面的代码用作缩进,以生成我想从中获取信息的可能用户的表。

<?php

$search = $_POST['search'].'%';

//echo($search);

    $stmt = $link->prepare("SELECT lname, fname, username FROM planner WHERE lname LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $result = $stmt->get_result();


if ($result->num_rows > 0) {
    echo "<table><tr><th>Last Name</th><th>First Name</th><th></th></tr>";
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row['lname']."</td><td>".$row['fname']."</td><td>".$row['username']."</tr>";
    }
    echo "</table>";

} else {
    echo "0 results";

}
?>

我接下来要做的是在每个结果旁边添加button,以打开他们的特定报告。要访问这些报告,需要根据用户名启动session。这是我到目前为止根据用户名创建session的内容。这使用javascript打开窗口并在单击按钮后显示报告

<?php

$search = $_POST['search'].'%';

//echo($search);

    $stmt = $link->prepare("SELECT lname, fname, username FROM planner WHERE lname LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $result = $stmt->get_result();


if ($result->num_rows > 0) {
    echo "<table><tr><th>Last Name</th><th>First Name</th><th></th></tr>";
    while($row = $result->fetch_assoc()) {
    $username = $row['username'];
    $_SESSION['username'] = $username;
        echo "<tr><td>".$row['lname']."</td><td>".$row['fname']."</td><td><button onClick=getPlanner();>Get Planner</button></td></tr>";
    }
    echo "</table>";

} else {
    echo "0 results";

}
?>
<script>
function getPlanner() {
var plan = window.open("../php/planner.php","height=700,width=1200,menubar=no,toolbar=no");
}

这个好消息是会话得到正确建立,报告显示在新窗口中。

坏消息是只打开表中最后一个结果的报告。所有其他按钮也只打开上一个报告。

我需要帮助的地方(我认为)是如何将从查询中提取的每个用户名与每个按钮对齐,点击时启动该用户名唯一的会话,这样我就可以只提取他们的报告,而不是页面的最后结果。

我认为我需要隐藏表格中的用户名,然后以某种方式在每个按钮上使用隐藏的信息......但那就是我被卡住的地方。

非常感谢任何帮助

编辑:这是我的最新代码......我仍然无法开始工作。

的search.php:

<?php

$search = $_POST['search'].'%';

//echo($search);

    $stmt = $link->prepare("SELECT lname, fname, username FROM planner WHERE lname LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $result = $stmt->get_result();


if ($result->num_rows > 0) {
    echo "<table><tr><th>Last Name</th><th>First Name</th><th></th></tr>";
    while($row = $result->fetch_assoc()) {
        $username = $row['username'];
        echo "<tr><td>".$row['lname']."</td><td>".$row['fname']."</td><td><button onClick=getPlanner('".$username."')>Get Planner</button></td></tr>";
    }
    echo "</table>";

} else {
    echo "0 results";

}
?>
<script>
function getPlanner() {
var plan = window.open("../php/planner.php?pln="+ username,"height=700,width=1200,menubar=no,toolbar=no");
}
</script>

Planner.php

<?php 
session_start();
$username = $_GET["pln"];
$_SESSION['username'] = $username;
echo($_SESSION['username']);
if($_SESSION['username'] != true) {
header("Location: ../access_denied.html");
}
require_once('../php/connect.php');
?>

编辑2:我已经开始尝试将每个$行[&#39;用户名&#39;]分配给离散值。我已经提出以下内容为每行指定一个唯一的名称,但我仍然在寻找一种方法,将每个唯一名称与表格中每行末尾生成的每个按钮相关联。

<?php

$search = $_POST['search'].'%';

//echo($search);

    $stmt = $link->prepare("SELECT lname, fname, username FROM planner WHERE lname LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $result = $stmt->get_result();
    $i=0;
    $array = array();

if ($result->num_rows > 0) {
    echo "<table><tr><th>Last Name</th><th>First Name</th><th></th></tr>";
   while($row = $result->fetch_assoc()) {
      $i++;
      $array["username$i"] = $row['username'];
    echo "<tr><td>".$row['lname']."</td><td>".$row['fname']."</td><td><button onClick=getPlanner();>Get Planner</button></td></tr>";
    }
    $username = $array['username1'];
    $_SESSION['username'] = $username;
    echo "</table>";

} else {
    echo "0 results";
}
?>
<script>
function getPlanner() {
var plan = window.open("../php/planner.php");
}
</script>

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以将用户名传递给getPlanner函数,然后将用户名添加为查询字符串参数。获得用户名后,您可以在planner.php上设置用户名会话,而不是显示用户特定的报告。

传递用户名

echo "<tr><td>".$row['lname']."</td><td>".$row['fname']."</td><td><button onClick=getPlanner('".$username."');>Get Planner</button></td></tr>";

接受用户名

function getPlanner(username) {
     var plan = window.open("../php/planner.php?u="+ username,"height=700,width=1200,menubar=no,toolbar=no");
}

<强> planner.php

使用$_GET["u"]从查询字符串中获取用户名,并使用检索到的值设置会话。

从planner.php文件中的查询字符串设置会话的示例。

$username = $_GET["u"];
$_SESSION['username'] = $username;

希望有所帮助。

答案 1 :(得分:1)

我要感谢Jako带领我走正确的道路。我在回复中遗漏的关键是在json_encode中包含javascript,因为我将变量从PHP转换为javascript

以下是 search.php 文件中的代码:

<?php

$search = $_POST['search'].'%';

//echo($search);

    $stmt = $link->prepare("SELECT lname, fname, username FROM planner WHERE lname LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $result = $stmt->get_result();


if ($result->num_rows > 0) {
    echo "<table><tr><th>Last Name</th><th>First Name</th><th></th></tr>";
    while($row = $result->fetch_assoc()) {
    $username = $row['username'];
        echo "<tr><td>".$row['lname']."</td><td>".$row['fname']."</td><td><button onClick=getPlanner('".$username."');>Get Planner</button></td></tr>";
    }
    echo "</table>";

} else {
    echo "0 results";

}
?>
<script>
var username = <?php echo json_encode($username); ?>;
function getPlanner(username) {
var plan = window.open("../php/planner.php?pln=" + username);
}
</script>

这里是使用search.php中的用户名特定信息的 planner.php 的顶部。

<?php 
session_start();
$username = $_GET["pln"];
$_SESSION['username'] = $username;
if($_SESSION['username'] != true) {
header("Location: ../access_denied.html");
}
require_once('../php/connect.php');
?>