#php #html #client-server #sql-update
#php #HTML #клиент-сервер #sql-обновление
Вопрос:
Я сбит с толку, почему форма не отправляется, а затем перенаправляется на index.php страница. Я очень новичок в PHP и пытаюсь использовать объект User. Вот что у меня есть на данный момент.
<main>
<header>
<h1>Create New Account</h1>
</header>
<section id="formEntry">
<form id="createacct" name="createacct" action="CreateAccount.php" method="post" onsubmit="return validateForm()">
<fieldset>
<legend>Enter your information</legend>
<table>
<tr>
<td class="fieldName">First Name</td>
<td class="inputField"><input type="text" id="firstname" name="firstname" form="createacct" size="30" maxlength="50" onchange="firstNameUpdated()"></td>
<td id="firstnamemsg"></td>
</tr>
<tr>
<td class="fieldName">Last Name</td>
<td class="inputField"><input type="text" id="lastname" name="lastname" form="createacct" size="30" maxlength="50" onchange="lastNameUpdated()"></td>
<td id="lastnamemsg"></td>
</tr>
<tr>
<td class="fieldName">Email</td>
<td class="inputField"><input type="email" id="emailAddress" name="emailAddress" form="createacct" size="30" maxlength="50" onchange="emailUpdated()"></td>
<td id="emailmsg"></td>
</tr>
<tr>
<td class="fieldName">Select a username</td>
<td class="inputField"><input type="text" id="username" name="username" form="createacct" size="30" maxlength="50" onchange="usernameUpdated()"></td>
<td id="usernamemsg"></td>
</tr>
<tr>
<td class="fieldName">Enter your password</td>
<td class="inputField"><input type="password" id="password" name="password" form="createacct" size="30" maxlength="50" onchange="pwdUpdated()"></td>
<td id="passwordmsg"></td>
</tr>
<tr>
<td class="fieldName">Confirm password</td>
<td class="inputField"><input type="password" id="confirmpwd" name="confirmpwd" form="createacct" size="30" maxlength="50" onchange="confirmUpdated()"></td>
<td id="confirmpwdmsg"></td>
</tr>
<tr>
<td id="saveMsg"></td>
<td colspan="2" class="submitButton">
<input type="reset" value="Clear all fields" class="styleButton" onclick="clearFields(this)">
<input type="submit" value="Create New Account" class="styleButton" onclick="return createNewAccount()">
</td>
</tr>
</table>
</fieldset>
</form>
</section>
<?php
include 'CreateAccount.php';
$user = new User();
$user->first = trim($_POST["firstname"]);
$user->last = trim($_POST["lastname"]);
$user->emailaddress = trim($_POST["emailAddress"]);
$user->username = trim($_POST["username"]);
$user->password = trim($_POST["password"]);
$user->confirmpwd = trim($_POST["confirmpwd"]);
$isValid = $user->validate();
?>
</main>
И PHP-файл (CreateAccount.php ):
<?php
Class User {
public $first;
public $last;
public $emailaddress;
public $username;
public $password;
public $confirmpwd;
// validation function
function validate() {
if (($this->first != null || $this->first != '') amp;amp;
($this->last != null || $this->last != '') amp;amp;
($this->emailaddress != null || $this->emailaddress != '') amp;amp;
($this->username != null || $this->username != '') amp;amp;
($this->password != null || $this->password != '') amp;amp;
($this->confirmpwd != null || $this->confirmpwd != '') amp;amp;
($this->password === $this->confirmpwd)) {
storeData($this->first, $this->last, $this->emailaddress, $this->username, $this->password);
header('Location: TestPage.php');
} else {
header('Location: CreateNewAccount.php');
}
}
}
exit()
?>
Что я здесь делаю не так? Каждый раз, когда я отправляю, он перенаправляет меня на CreateAccount.php и выходит пустым. Спасибо за вашу помощь.
Комментарии:
1. php.net/manual/en/function.error-reporting.php
2. что
storeData()
делает и где для этого функция?3. пожалуйста, удалите exit() и попробуйте еще раз, потому что вы завершаете работу после создания пользовательского объекта, validate() никогда не будет достигнут, и страница будет пустой.
4. фейспалминг себя. да, этот выход сделает это здесь. Ваш скрипт завершает работу без какой-либо обработки
5. Вы отправляете данные в CreateAccount.php который имеет только определение класса и ничего больше. Функции не вызываются, чего вы ожидаете? Может быть, вы хотите изменить действие вашей формы на «», чтобы оно отправлялось на текущую страницу, где вы фактически используете пользовательский класс?
Ответ №1:
Я заставил это работать. Я действительно делал все неправильно, я потратил часы на то, чтобы устранить ошибки и переместить код.
Оказалось, что мне не нужен PHP-код на веб-странице PHP, потому что у меня не было объекта класса. Вот что я сделал — фрагмент кода:
<?php
class User {
public $first = '';
public $last = '';
public $emailaddress = '';
public $username = '';
public $password = '';
public $confirmpwd = '';
function validate() {
if ($this->first === null || $this->first === '') {
return false;
}
if ($this->last === null || $this->first === '') {
return false;
}
if ($this->emailaddress === null || $this->emailaddress === '') {
return false;
}
if ($this->username === null || $this->username === '') {
return false;
}
if ($this->password === null || $this->password === '') {
return false;
}
if ($this->confirmpwd === null || $this->confirmpwd === '') {
return false;
}
if ($this->password !== $this->confirmpwd) {
return false;
}
return true;
}
}
А затем вернемся к моему исходному фрагменту кода выше (CreateAccount.php ), я изменил код на то, как он выглядит сейчас:
<?php
include 'User.php';
$user = new User();
$user->first = trim($_POST["firstname"]);
$user->last = trim($_POST["lastname"]);
$user->emailaddress = trim($_POST["emailAddress"]);
$user->username = trim($_POST["username"]);
$user->password = trim($_POST["password"]);
$user->confirmpwd = trim($_POST["confirmpwd"]);
$isValid = $user->validate();
if ($isValid) {
storeData($first, $last, $emailaddress, $username, $password); //ignore the line
header('Location: index.php');
} else {
header('Location: CreateNewAccount.php');
}
?>
Обратите внимание, что я переместил переменные с веб-страницы PHP в файл PHP (CreateAccount.php ), проблема решена и не выдает мне ошибку Undefined index.
Что касается exit(), который я использовал в исходном коде, он работает либо с exit(), либо без него, хотя в этом нет необходимости, но для удобства.
Ответ №2:
<?php
# In your CreateAccount.php,
# update your code like this
Class User {
public $first;
public $last;
public $emailaddress;
public $username;
public $password;
public $confirmpwd;
// validation function
function validate() {
if (($this->first != null || $this->first != '') amp;amp;
($this->last != null || $this->last != '') amp;amp;
($this->emailaddress != null || $this->emailaddress != '') amp;amp;
($this->username != null || $this->username != '') amp;amp;
($this->password != null || $this->password != '') amp;amp;
($this->confirmpwd != null || $this->confirmpwd != '') amp;amp;
($this->password === $this->confirmpwd)) {
storeData($this->first, $this->last, $this->emailaddress, $this->username, $this->password);
header('Location: TestPage.php');
} else {
header('Location: CreateNewAccount.php');
}
}
}
#notice that the exit code is been removed and hopefully this should work..
Комментарии:
1. Когда вы копируете и вставляете операционный код, вы должны добавить объяснение того, что вы изменили и почему это решит проблему. Также будет удобно, если вы также прочитаете ответы и комментарии, опубликованные другими.
2. Да, конечно, но моя среда разработки PHPSTORM IDE обычно тестирует код перед тем, как опубликовать его здесь, поэтому, к вашему сведению, ответ: да, я протестировал его, и он работает нормально.
3. Я использую NetBeans IDE и удаление exit(), как я уже сказал выше, не помогло. Он просто отобразил список ошибок.