Problemas criando uma proibição dinâmica .htaccess

Estou tentando alcançar um pequeno aplicativo para uso próprio que lê os dados enviados para o meu database a partir do formulário de contato, e eu quero poder proibir os usuários que não são bem-vindos pelo conteúdo do formulário de contato, e assim por diante. Então, eu tenho todos os usuários IP, que é enviado com o formulário. Mas, apenas salva a negação do database toda vez que eu clico no botão de proibição e estou me perguntando o porquê. Aqui está o código inteiro:

<?php if(isset($_POST['submit'])) { // Read the while file into a string $htaccess $htaccess = file_get_contents('.htaccess'); // Stick the new IP just before the closing  $new_htaccess = str_replace('allow from all', "deny from "."$unwanteduser"."\nallow from all", $htaccess); // And write the new string back to the file file_put_contents('.htaccess', $new_htaccess); } ?>     Yhteydenottopyynnöt  body{width:100%;} tr:nth-child(even) { background: #ccc; }    <?php $con = mysql_connect("localhost","user","pass"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("db", $con); $result = mysql_query("SELECT * FROM wp_contactform"); $f = fopen(".htaccess", "a+"); $ip = $row['IP']; fwrite($ip , $f); fclose($f); echo ""; $i = 0; while($row = mysql_fetch_array($result)) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; $unwanteduser = $row['IP']; echo ""; echo ""; } echo "
ID Nimi Puhelin Sposti Viesti Päivä IP Ban
" . $row['ID'] . "" . $row['Nimi'] . "" . $row['Puhelin'] . "" . $row['Email'] . "" . $row['Viesti'] . "" . $row['Day'] . "" . $row['IP'] . "
"; mysql_close($con); ?>

Conforme escrito em um comentário, se você colocar as partes que formam uma unidade lógica em uma function própria, as coisas se tornam mais simples:

 /** * add an ip to ban to a .htaccess file * * @param string $htaccess_file * @param string $ip * @return int Number of bytes that were written to the file, or FALSE on failure. */ function htaccess_add_ban_ip($htaccess_file, $ip) { $htaccess_original = file_get_contents($htaccess_file); if (false === $htaccess_original) { return false; } $htaccess_changed = str_replace( 'allow from all', "deny from $ip\nallow from all", $htaccess_original, $count ); if ($count != 1) { return false; } return file_put_contents($htaccess_file, $htaccess_changed); } 

Você só precisa chamar essa function no local onde você precisa da funcionalidade:

 $result = htaccess_add_ban_ip($file, '127.0.0.1'); 

Verifique o valor de retorno para controlar se as coisas correram bem, por exemplo, para testar:

 if (false === $result) { die(sprintf('Could not write .htaccess file "%s".', $file)); } if ($result < 36) { die(sprintf('Very little bytes (%d) written to .htaccess file "%s", this makes no sense, please check.', $result, $file)); } die(sprintf('Successfully wrote IP %s to .htaccess file "%s" (%d bytes written).', $ip, $file, $result)); 

No futuro, você pode introduzir a funcionalidade necessária (como o bloqueio de arquivos) dentro da function e, normalmente, não deve alterar a maior parte do resto do seu script.

Se você está procurando uma maneira de simplificar a conexão e a consulta do seu database mysql um pouco, veja também esta resposta relacionada a uma pergunta diferente:

  • O arquivo PHP não pode inserir parte do código

Ele contém uma class / object MySql com outro exemplo de como usar / criar funções para tornar o código mais fácil de lidar.

$ indesejável não recebe o valor do formulário após a submissão

Experimente isso

 < ?php if(isset($_POST['submit'])) { // Read the while file into a string $htaccess $htaccess = file_get_contents('.htaccess'); // Stick the new IP just before the closing  $unwanteduser = $_POST['gtfo']; $new_htaccess = str_replace('allow from all', "deny from "."$unwanteduser"."\nallow from all", $htaccess); // And write the new string back to the file file_put_contents('.htaccess', $new_htaccess); } ?> 

INFO: Depois de enviar o formulário, parece ser como uma atualização de página, então o que você designou no $ indesejável antes de enviar o formulário será perdido

estou confuso

 $result = mysql_query("SELECT * FROM wp_contactform"); $f = fopen(".htaccess", "a+"); $ip = $row['IP']; 

Neste ponto, qual é o valor de $row['IP'] ? e o que você está tentando acrescentar?