2014-04-12 4 views
1

Я пытаюсь создать файл PHP каждый раз, когда пользователь регистрирует мой сайт. Я использую следующий код для создания файла в моем register.php:Невозможно добавить PHP-код в переменную?

Дело в том, что моя функция создания файла работает, но переменная $data не дает никакого результата. Когда я запускаю этот $data как одну переменную в другом PHP-файле, она все равно не работает.

Что я сделал неправильно, установив переменную.

// STARTING to create a file 
    $my_file = "$username.php"; 
    $handle = fopen("give/$my_file", 'w') or die('Cannot open file: '.$my_file); 

    //----------- BEGINNING OF THE PHP DATA TO WRITE TO NEW FILE ---------- 
    $data = "<? 
require('../config.inc.php'); 
$damned_user = $username; 
if ($_COOKIE['damn_given'] != TRUE) { 
$sql = mysql_query(\"SELECT * FROM users WHERE username='$damned_user' LIMIT 1\"); 
    if(mysql_num_rows($sql) == 1){ 
     $row = mysql_fetch_array($sql); 
     // $row['field']; 
     $damned_user_id = $row['id']; 
     if($_SESSION['id'] == $damned_user_id) { 
     } else { 
     $taken = $row['taken_damns']; 
     $taken_damns = $taken + 1; 
     $taking_sql = \"UPDATE users SET taken_damns='$taken_damns' WHERE username='$damned_user' \"; 
     if (mysql_query($taking_sql)) { 
      setcookie(\"damn_given\", TRUE, time()+3600*24); 
      $date = date(\"Y-m-d H:i:s\"); 

      $ip = $_SERVER['REMOTE_ADDR']; 
      $damns_table = \"INSERT INTO damns (id, from_ip, user_damned, when_damned) VALUES ('','$ip','$damned_user','$date') \"; 
       if (mysql_query($damns_table)) { 

       } else { 
        echo \"Couldn't save damn to damns table in database!\"; 
       } 
      if ($_SESSION['logged'] == TRUE) { 
       $session_id = $_SESSION['id']; 
       $giving_sql = \"UPDATE users SET given_damns='$taken_damns' WHERE id='$session_id'\"; 

       if (mysql_query($giving_sql)) { 

       } else { 
        echo ('Error giving damn!'); 
       } 
      } 
     } 
     else 
     { 
      die (\"Error taking damn!\"); 
     } 
     } 
    } else { 
     die(\"Error first sql!\"); 
    } 
} 
?> 
<html> 
<head> 
     <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> 
    <link rel=\"stylesheet\" href=\"/_common.css\" /> 
    <link rel=\"stylesheet\" href=\"/_col_white.css\" /> 
    <link rel=\"shortcut icon\" href=\"/favicon.ico\" /> <title>DamnIt.tk - Damned!</title> 
</head> 
<body> 
    <div id=\"main\"> 
    <div class=\"center\"><a href=\"/\"><img src=\"/_bnr_white.png\" style=\"width: 500px; height: 100px;\" alt=\"DamnIt Banner\" /></a></div> 
    <table class=\"tmid\" style=\"width: 100%;\"><tr> 
        <td class=\"center\" style=\"width: 25%;\"><a href=\"/profile\">Profile</a></td> 
      <td class=\"center\" style=\"width: 25%;\"><a href=\"/options\">Options</a></td> 
      <td class=\"center\" style=\"width: 25%;\"><a href=\"/stats\">Stats</a></td> 
      <td class=\"center\" style=\"width: 25%;\"><a href=\"/logout\">Log out</a></td> 
      </tr></table> <h1>Give a Damn</h1> 
     <? 
if (isset($_COOKIE['damn_given'])) { 
    ?> 
     <h2>You have already given a Damn to <? echo $damned_user ?> today!</h2><h3>Couldn't damn - try again tomorrow.</h3>  
     <? 
} 
elseif ($_SESSION['id'] == $damned_user_id) { 
    ?> 
     <h2>You cannot damn yourself!</h2> 
     <? 
} else{ ?> <h2>Damn given!</h2><h3>You have given a Damn to <? echo $damned_user ?>.</h3> <? } ?> 
</div></body> 
</html>"; 

    //------- END OF PHP WHICH MUST BE WRITTEN TO NEW FILE --------- 
    fwrite($handle, $data); 
    fclose($handle); 
    // finished with the file 
+2

Вы ** очень ** vunerable к SQL-инъекции. Каждый может изменить свои файлы cookie. [** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). См. [** розовая коробка **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – h2ooooooo

+0

Чтобы понять, почему создание динамических файлов PHP - это плохая идея, представьте, что происходит, когда вам нужно исправить ошибку в сгенерированном коде или добавить дополнительные функции. В любом случае у вас есть база данных, поэтому вы можете читать все, что должно быть разным на разных страницах, используя одну копию кода PHP. – IMSoP

ответ

0

Try NOWDOC:

$data = <<<'END' 
Your PHP code here 
END; 

Это позволит любой строки, без необходимости побега.

Однако, пожалуйста, подумайте о том, что вы делаете очень осторожно!

Также ... вы бы не пытались сорвать этот мой сайт, не так ли? http://giveadamn.co.uk/

Give a damn! http://giveadamn.co.uk/image/Kolink.jpg

Потому что если это так, вы делаете это неправильно. .htaccess, mate;)

RewriteEngine on 
RewriteRule give/(.*) give.php?user=$1 [L] 
+0

Я тестирую свои навыки PHP. Прошло 4 года. –

+0

Я не сумасшедший или что-то еще, мне просто интересно, потому что у вас есть код, который дает ссылки, и вы пытаетесь создать тот же URL-адрес, что и мой ('/ give/USERNAME'), чтобы заставить его работать, задаваться вопросом. –

+0

Да. .htaccess: D слишком сложный для меня, он также запрашивает give.php, когда я вхожу. Ваше сообщение об ошибках дает свои предложения. –

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