我正在创建一个展示访客信息的网站。用户可以访问该页面并使用Textarea为其URL选择一个名称,该名称将保存为mysql数据库中的表格。
我在我的第一个php文件中使用$ name变量,它替换了文本“visitor_tracking”。但今天我注意到还有另一个php文件和更多的sql代码,我再次看到这个文件也有sql代码中使用的“ visitor_tracking ”文本。
但我认为我失败了很多时间,因为我根本不知道如何用我名为$ name的变量名替换“visitor_tracking”文本。
<?php
//define our "maximum idle period" to be 30 minutes
$mins = 30;
//set the time limit before a session expires
ini_set ("session.gc_maxlifetime", $mins * 60);
session_start();
$ip_address = $_SERVER["REMOTE_ADDR"];
$page_name = $_SERVER["SCRIPT_NAME"];
$query_string = $_SERVER["QUERY_STRING"];
$current_page = $page_name."?".$query_string;
//connect to the database using your database settings
include("db_connect.php");
if(isset($_SESSION["tracking"])){
//update the visitor log in the database, based on the current visitor
//id held in $_SESSION["visitor_id"]
$visitor_id = isset($_SESSION["visitor_id"])?$_SESSION["visitor_id"]:0;
if($_SESSION["current_page"] != $current_page)
{
$sql = "INSERT INTO visitor_tracking
(ip_address, page_name, query_string, visitor_id)
VALUES ('$ip_address', '$page_name', '$query_string', '$visitor_id')";
if(!mysql_query($sql)){
echo "Failed to update visitor log";
}
$_SESSION["current_page"] = $current_page;
}
} else {
//set a session variable so we know that this visitor is being tracked
//insert a new row into the database for this person
$sql = "INSERT INTO visitor_tracking
(ip_address, page_name, query_string)
VALUES ('$ip_address', '$page_name', '$query_string')";
if(!mysql_query($sql)){
echo "Failed to add new visitor into tracking log";
$_SESSION["tracking"] = false;
} else {
//find the next available visitor_id for the database
//to assign to this person
$_SESSION["tracking"] = true;
$entry_id = mysql_insert_id();
$lowest_sql = mysql_query("SELECT MAX(visitor_id) as next FROM visitor_tracking");
$lowest_row = mysql_fetch_array($lowest_sql);
$lowest = $lowest_row["next"];
if(!isset($lowest))
$lowest = 1;
else
$lowest++;
//update the visitor entry with the new visitor id
//Note, that we do it in this way to prevent a "race condition"
mysql_query("UPDATE visitor_tracking SET visitor_id = '$lowest' WHERE entry_id = '$entry_id'");
//place the current visitor_id into the session so we can use it on
//subsequent visits to track this person
$_SESSION["visitor_id"] = $lowest;
//save the current page to session so we don't track if someone just refreshes the page
$_SESSION["current_page"] = $current_page;
}
}
这是脚本的一小部分: 我真的希望我可以帮助用变量 $ name 替换“ visitor_tracking ”文本...我试图用“$ name”替换文本并使用也有不同的qoutes,但对我没有用...
这是我在第二个php文件中使用的调用,该文件从我的第一个php文件中读取:
include 'myfile1.php';
echo $var;
但不知道那是否正确。我等不及听到我做错了什么。
非常感谢您提前
PS 非常感谢Prix为我提供了第一个php文件!
答案 0 :(得分:0)
首先你需要在两个页面中启动会话。它应该是您在向页面输出缓冲区写入任何内容之前在页面中执行的第一件事。
在第一页中,您需要将值分配给会话变量。如果你没有使用session_start启动会话,那么你没有会话,$ _SESSION中的值将无法使用。
<?php
session_start(); // first thing in page
?>
<form action="" method="post" >
...
<td><input type="text" name="gname" id="text" value=""></td>
...
</form>
<?PHP
if (isset($_POST['submit'])) {
$name = $_POST['gname'];
//...
//Connect to database and create table
//...
$_SESSION['gname'] = $name;
...
// REMOVE THIS Duplicate -> mysql_query($sql,$conn);
}
?>
再次在第二页中,您需要先启动会话。在读取$ _SESSION变量之前,您需要检查它是否有值(避免错误或警告)。接下来读取值并做任何你想做的事情。
<?php
session_start(); // first thing in page
...
if(isset($_SESSION['gname'])){
// Read the variable from session
$SomeVar = $_SESSION['gname'];
// Do whatever you want with this value
}
?>
顺便说一下,
SQL injection
。if
语句已完成。如果表单未提交或$_POST['gname']
是空的,该怎么办?