2015-02-02 4 views
0

Я получаю 2 ошибки из своего кода. Или 1 ошибка и 1 уведомление.Caesar Cipher PHP

Heres Уведомление и проблема

Примечание: Undefined смещение: 0 в F: \ Xampp \ HTDOCS \ Шифрование \ result.php на линии 19

Предупреждение: in_array() ожидает параметр 2 быть массив, строка, заданная в F: \ Xampp \ HTDOCS \ Шифрование \ result.php на линии 19

И вот мой код

Index.php

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
    <div id="encrypt" style="position:absolute; left:20%; top:25%;"> 
    <form method="post" action="result.php"> 
    <textarea rows="4" cols="50" name="toEncrypt">Enter message to encrypt</textarea> 
    <br/> 
    <input type="submit" name="encrypt" value="Encrypt"> 
    </form> 
    </div> 
    <div id="decrypt" style="position:absolute; right:20%; top:25%;"> 
    <form method="post" action="result.php"> 
    <textarea rows="4" cols="50" name="toDecrypt">Enter message to decrypt</textarea> 
    <br/> 
    <input type="submit" name="decrypt" value="Decrypt"> 
    </form> 
    </div> 
</body> 

И это мой PHP-файл.

<?php 
$toEncrypt = $_POST['toEncrypt']; 
//$toDecrypt = $_POST['toDecrypt']; 
$key = array(
"A" => "B", "B" => "C","C" => "D", "D" => "E","E" => "F","F" => "G", 
"G" => "H", "H" => "I", "I" => "J", "J" => "K","K" => "L", 
"L" => "M","M" => "N", "N" => "O", "O" => "P", 
"P" => "Q","Q" => "R", "R" => "S","S" => "T","T" => "U", 
"U" => "V", "V" => "W", "W" => "X", "X" => "Y", 
"Y" => "Z", "Z" => "Å", "Å" => "Ä", "Ä" => "Ö", "Ö" => "A" 
); 

//$text2 = $toDecrypt; 

$length=strlen($toEncrypt); 
$newstr=''; 
for ($i = 0; $i < $length; $i++) 
{ 
if (is_array($key) && in_array($toEncrypt[$i], $key[$i])) 
{ 
$newstr=$key[$i]; 
} 
} 

echo $newstr; 

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

+0

Если вы еще не видели его, вы можете взять тур здесь: http://stackoverflow.com/ тур и посмотреть, как работает этот сайт! (BTW: Вы можете принять ответ, который помог вам больше всего и решить вашу проблему (http://meta.stackexchange.com/q/5234)) – Rizier123

ответ

0

Вы должны изменить 2 строки:

if (is_array($key) && in_array($toEncrypt[$i], $key[$i])) 
//... 
$newstr=$key[$i]; 

к этому:

if (is_array($key) && in_array(strtoupper($toEncrypt[$i]), array_flip($key))) 
          //^^^^^^^^^^     ^^^^^^^^^^ To search trough the keys and not the values 
          //|Because your array is in upper case 
//... 
$newstr .= $key[strtoupper($toEncrypt[$i])]; 
     //^^  ^^^^^^^^^^So you get the right key 
     //|So you append the string 
+0

Хм да, это делает, но вместо этого он добавляет два раза вместо этого, так что A => C вместо B – TheDonBase

+0

Я волнуюсь люблю тебя <3 – TheDonBase

+0

@ TheDonBase Добро пожаловать! Наслаждайтесь своим днем: D – Rizier123