2014-10-22 2 views
0

Я пытаюсь создать своего рода бета-ключ, который проверяет ваш ключ в системе и перенаправляет вас, если это так.Не перенаправляется, если ключ действителен или нет.

Но при заполнении правой клавиши или случайного значения она перенаправляет вас только на ту же страницу, что и ничего за ней, как должно быть.

<?php 

include("config.php");  
echo "Your IP did not match to a beta key, please fill in one below:<br>"; 
echo '<form method="post" action="key">'; 
if (isset($_GET["failed"])) echo "That key has already been used or is invalid.<br>"; 
echo '<br>'; 
echo '<input type="text" name="key" placeholder="Beta Key" required=""/>'; 
echo '<br>'; 
echo '<button type="submit">Submit</button>'; 
echo '</form>'; 

if(isset($_POST['key'])) { 
    $retrievekey = $con->prepare("SELECT key FROM keys"); 
    $retrievekey->execute(); 
    while ($result = $retrievekey->fetch()) { 
     if($_POST['key'] == $result['key']) { 
      header("Location: http://admin.gta-o.net/keyvalid"); 
      // do stuff when the key is valid 
      die(); 
     } else { 
      header("Location: http://admin.gta-o.net/key?failed=true"); 
      die(); 
     } 
    } 
} 

echo "If you're looking for one please contact us on <i>[email protected]</i> with your name and reason.<br>"; 
echo "Chance on not getting a reply back is big, this means we have rejected your request."; 
?> 

Вот как это выглядит, как при подаче ключ или случайное значение, обратите внимание также, кажется, удалить нижний текст при подаче.

Благодаря

+0

Это PDO? или mysqli? – Ghost

+1

Вы используете два зарезервированных слова MySQL 'key' и' keys' http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html, которые должны быть завернуты в backticks '\' '- что является дополнительным фактором. Если бы вы проверяли ошибки, это означало бы ошибку. –

ответ

1

На первой итерации он просто умирает, если он не соответствует. Он не имеет полного цикла для всех строк.

Просто выберите эту конкретную клавишу. Нет необходимости в цикле каждый раз и проверять каждую строку:

MySQLi

<?php 

include 'config.php'; 

if(isset($_POST['key'])) { 

    $retrievekey = $con->prepare("SELECT `key` FROM `keys` WHERE `key` = ?"); 
    $retrievekey->bind_param('s', $_POST['key']); 
    $retrievekey->execute(); 

    if($retrievekey->num_rows > 0) { 
     header("Location: http://admin.gta-o.net/keyvalid"); 
    } else { 
     header("Location: http://admin.gta-o.net/key?failed=true"); 
    } 

    exit; 

} 

?> 

<form method="POST" action=""> <!-- remove that action="key" --> 
    <input type="text" name="key" placeholder="Beta Key" required="" /><br/> 
    <button type="submit">Submit</button> 
</form> 

<p>If you're looking for one please contact us on <i>[email protected]</i> with your name and reason</p><br/> 
<p>Chance on not getting a reply back is big, this means we have rejected your request.</p> 

Sidenote: Я не знаю, если это PDO или MySQLi, но если его PDO:

$retrievekey = $con->prepare("SELECT `key` FROM `keys` WHERE `key` = :key"); 
$retrievekey->bindParam(':key', $_POST['key']); 

Тогда ,

if($retrievekey->rowCount() > 0) { 

Важное примечание:

EDIT: Оба key и keys являются MySQL reserved keywords поэтому они должны быть обернуты в обратные кавычки запроса.

+1

'key' и' keys' => http://dev.mysql.com/doc/refman/5.5/ru/reserved-words.html, которые также могут объяснить, почему у OP могут быть проблемы и не получить ошибок, потому что of '?';) –

+0

@ Fred-ii- скорее всего самая большая причина. забыл, что спасибо fred – Ghost

+0

Добро пожаловать. Этих двух, которых я знаю наизусть;) Вы должны внести изменения в этот эффект, хотя OP использует зарезервированные ключевые слова. –

Смежные вопросы