Я пытаюсь создать простую систему голосования PHP, в которой пользователю сайта предлагается проголосовать за свою любимую фотографию. Каждый день допускается только один голос.PHP Voting System Redirect Not Working
Когда голосование кастовал PHP скрипт:
====
1 - проверяет пользователей IP-адрес и сравнивает его с текстовым файлом IP Log
2 - если IP-адрес пользователя найден в журнале, он проверяет, был ли последний голос (для этого IP-адреса) отправлен на текущую дату
3 - Если был зарегистрирован IP-адрес пользователя и последний голос был на дата аренды пользователь перенаправляется на страницу, напоминающую им, разрешается только один голос в день
4 - Если IP-адрес пользователя был зарегистрирован, но последний голос был до текущей даты, голосование записывается, и пользователь перенаправлено на благодарность за голосование.
5 - Если IP-адрес пользователя не зарегистрирован, голосование записывается, и пользователь перенаправляется на страницу с благодарностью за голосование.
====
К сожалению, PHP скрипт, я работаю с будет делать 1 из 2 вещей:
1 - Если "перерыв" включается после если/другое заявление ($ logIP == $ ipAddress), скрипт добавляет два голоса и две записи IP в журнал
2 - Если «перерыв» удален, вводится один голос и записывается один IP-адрес. Тем не менее, независимо от голосования и IP записываемые новые избиратели и возвращающие голоса перенаправлены на страницу, напоминающие им только один голос разрешаются каждый день одним и тем же пользователем
Сценарий выглядит следующим образом:
====
// GET USERS VOTE, IP ADDRESS AND TODAYS DATE
$userVote = $_REQUEST['vote'];
$ipAddress = $_SERVER["REMOTE_ADDR"];
$ipDate = date("Y/m/d");
// IF THE USERS VOTE IS NULL, REDIRECT TO ERROR PAGE
if ($userVote != "") {
$userFound = false;
$userVoted = false;
echo $userFound . " -- " . $userVoted . "<br /><br />";
$file_handle = fopen("ip_log.txt", "r");
// LOOP THROUGH FILE IP ADDRRESSES AND DATES THOSE ADDRESSES WHERE LOGGED
while (!feof($file_handle)) {
$line_of_text = fgets($file_handle);
$parts = explode('||', $line_of_text);
$logIP = $parts[0];
$logDate = $parts[1];
// CHECK IF THE LOGGED IP ADDRESS MATCHES THE USERS IP ADDRESS
if ($logIP == $ipAddress) {
$userFound = true;
// CHECK IF THE LOGGED VOTE DATE MATCHES == TODAY FOR THE CURRENT IP ADDRESS BEING CHECKED
if ($logDate == $ipDate) {
// IP ADDRESS FOUND AND LOGGED DATE == TODAY, RREDIRECT USER TO TRY AGAIN LATER PAGE
header("Location: http://www.fotohuis.ca/vote/tryagain.html");
exit;
}
else {
// IP ADDRESS FOUND BUT LOGGED DATE != TODAY, KEEP CHECKING UNTIL EOF
}
}
else {
// IP ADDRESS NOT FOUND, KEEP CHECKING UNTIL EOF
continue;
}
}
// USER FOUND
if ($userFound == true) {
// USER FOUND BUT THE LOGGED VOTE DATE != TODAY
if ($userVoted == false) {
// GET IP ADDRESS LOG CONTENT
$filename1 = "ip_log.txt";
$content1 = file($filename1);
// INSERT USER IP ADDRESS INTO LOG
$insertip = "\r\n" . $ipAddress . "||" . $ipDate;
$fp1 = fopen($filename1, "a");
fputs($fp1, $insertip);
fclose($fp1);
// GET POLL RESULT CONTENT
$filename2 = "poll_result.txt";
$content = file($filename2);
// PUT VOTE CONTENT INTO ARRAY
$array = explode("||", $content[0]);
$picOne = $array[0];
$picTwo = $array[1];
$picThree = $array[2];
$picFour = $array[3];
$picFive = $array[4];
$picSix = $array[5];
// CALCULATE VOTE TOTAL
if ($userVote == 0) {
$picOne = $picOne + 1;
}
if ($userVote == 1) {
$picTwo = $picTwo + 1;
}
if ($userVote == 2) {
$picThree = $picThree + 1;
}
if ($userVote == 3) {
$picFour = $picFour + 1;
}
if ($userVote == 4) {
$picFive = $picFive + 1;
}
if ($userVote == 5) {
$picSix = $picSix + 1;
}
// INSERT USER VOTE
$insertvote = $picOne . "||" . $picTwo . "||" . $picThree . "||" . $picFour . "||" . $picFive . "||" . $picSix;
$fp2 = fopen($filename2, "w");
fputs($fp2, $insertvote);
fclose($fp2);
// /REDIRECT USER TO THANK YOU FOR VOTING PAGE
header("Location: http://www.fotohuis.ca/vote/thankyou.html");
exit;
}
// USER FOUND AND THE LOGGED VOTE DATE == TODAY
else {
// USER ATTEMPTED TO VOTE 2+ TIMES IN THE SAME DAY, REDIRECT USER TO TRY AGAIN LATER PAGE
header("Location: http://www.fotohuis.ca/vote/tryagain.html");
exit;
}
}
// USER NOT FOUND
else {
// GET IP ADDRESS LOG CONTENT
$filename1 = "ip_log.txt";
$content1 = file($filename1);
// INSERT USER IP ADDRESS INTO LOG
$insertip = "\r\n" . $ipAddress . "||" . $ipDate;
$fp1 = fopen($filename1, "a");
fputs($fp1, $insertip);
fclose($fp1);
// GET POLL RESULT CONTENT
$filename2 = "poll_result.txt";
$content2 = file($filename2);
// PUT VOTE COUNT INTO ARRAY
$array = explode("||", $content2[0]);
$picOne = $array[0];
$picTwo = $array[1];
$picThree = $array[2];
$picFour = $array[3];
$picFive = $array[4];
$picSix = $array[5];
// CALCULATE VOTE TOTAL
if ($userVote == 0) {
$picOne = $picOne + 1;
}
if ($userVote == 1) {
$picTwo = $picTwo + 1;
}
if ($userVote == 2) {
$picThree = $picThree + 1;
}
if ($userVote == 3) {
$picFour = $picFour + 1;
}
if ($userVote == 4) {
$picFive = $picFive + 1;
}
if ($userVote == 5) {
$picSix = $picSix + 1;
}
// INSERT USER VOTE
$insertvote = $picOne . "||" . $picTwo . "||" . $picThree . "||" . $picFour . "||" . $picFive . "||" . $picSix;
$fp2 = fopen($filename2, "w");
fputs($fp2, $insertvote);
fclose($fp2);
// REDIRECT USER TO THANK YOU FOR VOTING PAGE
header("Location: http://www.fotohuis.ca/vote/thankyou.html");
exit;
}
fclose($file_handle);
}
====
Любая помощь с этим будет очень цениться, как я был у нее уже неделю без каких-либо прогресса :(
Спасибо за очистку кода ... делает его намного легче читать.Две вещи, которые я заметил после тестирования: (1) голоса добавляются только во вторую позицию массива и (2) происходит одна и та же ошибка; в частности, пользователь отправляет голосование, цикл while работает, не находит IP/дату, объявления IP/дату, а затем его, как если бы цикл while снова запускался и теперь находит IP/дату и перенаправляет пользователя на уже (это несмотря на то, что ранее не было проголосовано.) --- после принятия голосования пользователь должен быть перенаправлен на страницу с благодарностью. Мысли? –
Произошла ошибка в строке '$ array = explode (" || ", $ content [0]);', которая теперь исправлена в ответе. Цикл работает только один раз, поэтому я не уверен, почему он будет делать то, что вы указали, если у вас больше кода, который здесь не показан. – drew010
Да ... Я играл с кодом и просто понял это. По-прежнему возникает проблема, когда пользователь, который впервые подает голос (или первый раз в день), перенаправляется на страницу «tryagain.html» ... это как если бы перенаправление на страницу «thankyou.html» не было Не обрабатывайтесь!?! –