2012-10-04 20 views
0

我想要一个简单的非MySQL PHP脚本,它允许查看者投票或向下投票。如果它必须是由MySQL数据库驱动的,那么这就是它的必要性。理想情况下,不是。如何在php中创建一个简单的up/down php脚本投票?

所以基本上,如果你要查看该页面的源在Web浏览器,它会是这个样子:

<h2>Stack Overflow Is Cool</h2> 
<span id="author-info-etc">Written by Ben Dover on 01-01-2012 (+12) | (-3) Total Rank: +9</span> 
<p>Once upon a time there was this really cool website called Stack Overflow where amazing people would help answer questions asked by people who destroyed their keyboards by throwing them against their computer screen in an act of utter frustration and despair.</p> 

和源文件是这样的:

<span id="author-info-etc">Written by <?php echo $authorname; ?> on <?php echo $pubDate; ?> <?php include ('pagevotescript.php'); ?></span> 

莫非有人帮我创建这个PHP脚本?

+0

@deifwud我不知道,我只是一个静态文件类型的家伙。我知道这是跛脚。你说的很明显。我只是通过物理写入.php页面上的文件而不是动态生成或从数据库中调用所有东西。但我明白,在这种情况下,这样做可能是不可能的。 – Garry

+0

@tadman我添加了mysql标签,因为我不反对使用mysql的想法。这可能会出现这种情况,因为我的原始问题已经由其他人编辑,现在看起来就是这样。 – Garry

回答

0

您需要一种方法来坚持您的会话之间的数据,所以你需要一个数据库,如果你不想安装mysql,我认为PHP的最后版本配备sqlite内置支持。

2

如果您想拥有可靠的投票系统,则需要使用数据库(如MySQL)来存储投票。否则,您的Web应用程序将如何知道每页已收到多少票?

你的数据库结构可能是这个样子:

页面

page_id | page_name 
------------------- 
1  | My Page 
2  | Test 

用户

user_id | user_name 
------------------- 
1  | John  
2  | Sara 
3  | Tom 

投票

vote_id | user_id | page_id | vote_weight 
----------------------------------------- 
1  | 1  | 1  | 1 
2  | 1  | 2  | -1 
3  | 2  | 2  | 1 
4  | 3  | 1  | 1 

当用户投票:

  1. 检查,看看他们是否已经投票页面上。
  2. 如果是这样,要么拒绝他们的另一票或更新他们现有的投票。
  3. 如果他们还没有在有问题的页面投票,插入一个新的投票。
+0

我喜欢韦恩的想法。我怎么能把所有这一切都绑定在php文件中,而不是有用户名,那么投票可以匿名?也许登录IP地址将会使人们避免双重投票呢? – Garry

+0

IP地址和会话将是另一种选择。但是,它永远不会确保同一个人没有投过两次票。 –

1

将页面数据存储在MySQL中最简单,并且只有一列称为投票。通过这种方式,您可以同时显示页面并拉入选票,并且可以在用户互动时轻松上/下选票。

没有MySQL,您需要将值存储在某个文件中。你可以有about-us.php,然后是about-us.php.txt,其中txt文件是一个简单的#,可以被检索,然后更改和重置。类似这样的:

// Open file for reading and writing 
$fp = fopen('about-us.php.txt', 'w+'); 

//Retrieve contents of file as integar 
$count = (int) fread($fp, filesize('about-us.php.txt')); 

// Take the count and up it by 1 
$count++; 

// Write the changes 
fwrite($fp, $count); 

// Close the file 
fclose($fp); 
+0

我喜欢这个想法。我将如何着手创建允许观看者点击进行投票的HTML?有没有办法让上面的代码做数学运算:UP投票和DOWN投票的总和以显示当前排名? – Garry

+0

这是一个可怕的想法。请不要将文件系统用作数据库。这不会计入会导致计数器滑落的同时请求。 – tadman

+0

@tadman我重视你的意见。您能否解释为什么将投票数据存储在.txt文件中是一个糟糕的主意? – Garry

0

你想拥有一个包含用户和帖子的数据库。用户应该能够投递帖子,增加或减少用户的“信誉”数量。要存储所有这些信息,您已经需要一个数据库。

如果你仍然想将“投票”信息存储在别的东西然后一个MySQL数据库,有很多选项。text file,NoSQL,Couchdb和许多其他选项。

要学会如何与数据库进行通信,然后执行诸如将信息存储在文件中,这将会容易得多。而且由于mysql是最常用的数据库,这将是一个相当明智的选择。

PS:如果你开始学习MySQL,你应该绝对不是开始使用PHP mysql_功能,而是像PDO,以circumenvent SQL-Injections.

0

的低技术含量的方法是使用一个用PHP存储你的值的键值存储。一个例子是PHP中的dba_*函数,如dba_open,它创建一个单行文件数据库,其行为与任何常规文件相同,不需要服务器。

实施例:

$db = dba_open("stats", "r", "gdbm"); 
$count = dba_fetch("/page/path", $db); 
dba_insert("/page/path", $count + 1, $db); 

作为一个说明这将受到微妙竞态条件,其中两个或更多个同时的请求将取并保存同一递增的值。使用适当的数据库,即使是the embedded SQLite,也是一个更好的主意。