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