#php #html #fopen #fputs
#php #HTML #fopen #fputs
Вопрос:
Я пытаюсь написать программу, основная идея которой заключается в том, что я запрашиваю у пользователя ввод в текстовой области, а затем текст сохраняется в файле word. Вот код, который я пытаюсь использовать:
<html>
<head>
<title>Simple Guestbook</title>
</head>
<body>
<h1>Simple Guestbook Comment Creator</h1>
<br>
<form method = "post"
action = "mysite.php">
<textarea name = "text"
rows = "10"
cols = "20">Write Here</textarea>
<input type = "submit"
value = "Submit Comment">
</form>
<?
if($_POST['text'] !== NULL){
$comment = $_POST['text'];
$file = fopen("texttest.txt", "a");
fputs($file, "<br>n$comment");
fclose($file);
}
?>
</body>
</html>
Кажется, я не могу заставить это работать должным образом. Я также думал о том, чтобы каким-то образом заставить действие формы сохранить текст, а затем перезагрузить сайт, но у меня не получилось, чтобы это сработало (исходный файл mysite.php , поэтому действие заключается в простой перезагрузке страницы).
Если у кого-нибудь есть идеи получше об используемом алгоритме / другом синтаксисе, пожалуйста, дайте мне знать, поскольку я только начал изучать базовый синтаксис PHP.
Спасибо
Ответ №1:
Проверьте следующее:
- Есть ли у php разрешение на запись файлов в этот каталог?
- Называется ли этот php-файл «myfile.php «?
В любом случае, когда что-то не работает и вы хотите знать, что вызывает ошибку, поместите error_reporting(-1);
в начало вашего php — он выдаст любую ошибку или предупреждение, включая те, которые выдает fopen().
Кроме того, вы можете захотеть проверить, правильно ли передана переменная: echo $comment
сразу после ее назначения.
Комментарии:
1. Когда я загружаю веб-страницу, она сообщает мне «Обратите внимание: неопределенный индекс: текст в C:xampphtdocsmysite.php в строке 21 «.
2. Это означает, что в массиве post нет элемента с именем «text». (в php есть разница между «unset» и «null»). Вам следует изменить строку 21 в
if(isset($_POST['text']))
Ответ №2:
Что-то вроде этого может сработать.
Возможно, вам захочется сделать больше с вводимыми ими значениями и всем прочим, но это в основном сделает то, о чем вы просите.
Вы также захотите убедиться, что у вас есть правильный путь к файлу, в который вы пытаетесь выполнить запись, и что у этого файла есть правильные разрешения для его записи:
<html>
<head>
<title>Simple Guestbook</title>
</head>
<body>
<h1>Simple Guestbook Comment Creator</h1><br>
<?php
if (isset($_POST['submit'])) {
if (strlen(trim($_POST['comment']))) {
$file = fopen("texttest.txt", "a");
fputs($file, "$_POST['comment'])n");
fclose($file);
}
} else {
?>
<form method = "post" action = "<?php echo($_SERVER['PHP_SELF']); ?>">
<label>Leave your comment
<textarea name="comment" rows="10" cols="20"></textarea>
</label>
<input type="submit" name="submit" value="Submit Comment" />
</form>
<?php
}
?>
</body>
Кроме того, поскольку вы возвращаетесь на ту же страницу, вы можете захотеть поместить какое-нибудь сообщение, сообщающее пользователю, что ему удалось ввести что-то в вашу адресную книгу.
Комментарии:
1. Спасибо за ответ. Что делает strlen(trim($_POST[‘comment’])) (в частности, как это возвращает логическое значение или нет)? Также есть ли преимущество в использовании $ _SERVER … вместо того, чтобы просто снова вводить имя файла .php?
2. strlen возвращает целое число и, прежде чем я получу длину
$_POST['comment']
, вероятно, лучше избавиться от пустых мест на обоих концах комментария. затем strlen вернет длину комментария. Если комментарий имеет любую длину (и, следовательно, strlen возвращает целое число, большее 0), оператор if примет значение true. В противном случае он вернет 0, а оператор if примет значение false, и тогда код для записи в файл не сработает.