#php #mysql #html
#php #mysql #HTML
Вопрос:
У меня есть страница на моем сайте, на которой показаны все сотрудники моей компании. Я хотел бы обновить информацию, которая у меня есть, используя форму. У меня все хорошо, просто нужно сделать это ИДЕАЛЬНО. : p
У меня есть функция, которая должна ее обновлять, но это не так.
public function writeStaff($p) {
if ( $_POST['uid'] )
$uid = mysql_real_escape_string($_POST['uid']);
if ( $_POST['level'] )
$level = mysql_real_escape_string($_POST['level']);
if ( $_POST['name'] )
$name = mysql_real_escape_string($_POST['name']);
if ( $_POST['pic'] )
$pic = mysql_real_escape_string($_POST['pic']);
if ( $_POST['job'] )
$job = mysql_real_escape_string($_POST['job']);
if ( $_POST['about'] )
$about = mysql_real_escape_string($_POST['about']);
if ( $_POST['contact'] )
$contact = mysql_real_escape_string($_POST['contact']);
if ( $_POST['links'] )
$links = mysql_real_escape_string($_POST['links']);
if ( $_POST['username'] )
$username = mysql_real_escape_string($_POST['username']);
if ( $_POST['password'] )
$password = mysql_real_escape_string($_POST['password']);
if ( $uid ) {
$sql = "UPDATE staff SET level = $level, name = $name, pic = $pic, job = $job, about = $about, conact = $contact, links = $links, username = $username, password = $password WHERE uid = $uid";
return mysql_query($sql);
} else {
return false;
}
}
Далее у меня есть форма,
public function display_admin_staff() {
$uid = $_SESSION['uid'];
$name = $_SESSION['name'];
$Job = $_SESSION['jobs'];
$about = $_SESSION['about'];
$pic = $_SESSION['pic'];
$contact = $_SESSION['contact'];
$level = $_SESSION['level'];
$links = $_SESSION['links'];
$username = $_SESSION['username'];
$password = $_SESSION['password'];
return <<<ADMIN_FORM_STAFF
<form action="/staff/$uid" method="post">
<input name="uid" type="hidden" value="$uid" />
<fieldset>
<legend><span>Add Staff</span></legend>
<ul>
<li class="input"><label for="name">Name:</label><input name="name" id="name" type="text" size="50" value="$name"/></li>
<li class="input"><label for="level">Level:</label><input name="level" id="level" type="text" size="50" value="$level"/></li>
<li class="input"><label for="pic">Pic:</label><input name="pic" id="pic" type="text" size="50" value="$pic"/></li>
<li class="input"><label for="job">Job:</label><input name="job" id="job" type="text" size="50" value="$job"/></li>
<li class="input"><label for="about">About:</label><textarea class="resizable" name="about" id="about" style="width:267px; height:300px; resize: none;">$about</textarea></li>
<li class="input"><label for="contact">Email:</label><input name="contact" id="contact" type="text" size="50" value="$contact"/></li>
<li class="input"><label for="links">Links:</label><input name="links" id="links" type="text" size="50" value="$links"/></li>
<li class="input"><label for="username">Username:</label><input name="username" id="username" type="text" size="50" value="$username"/></li>
<li class="input"><label for="password">Password:</label><input name="password" id="password" type="password" size="50" value="$password"/></li>
</ul>
</fieldset>
<ul class="actions">
<li><button type="submit" id="complete" name="submit" class="button" value="Create This Entry!"><span>Create Staff Member!</span></button></li>
</ul>
ADMIN_FORM_STAFF;
}
Затем у меня все это собрано воедино…
$obj = new simpleCMS();
/* CHANGE THESE SETTINGS FOR YOUR OWN DATABASE */
$obj->host = 'localhost';
$obj->username = 'root';
$obj->password = 'root';
$obj->table = 'rrdcms';
$obj->connect();
if ( $_POST )
$obj->writeStaff($_POST);
echo $obj->display_admin_staff();
Комментарии:
1. В чем именно здесь проблема? У меня есть функция, которая должна ее обновлять, но это не так. немного расплывчато.
2. Когда я отправляю форму, ничего не происходит. Старые данные, которые хранятся в базе данных, все еще там.
Ответ №1:
Вам все равно придется заключать все свои переменные в кавычки внутри строки запроса, в противном случае вы просто вставляете пустые строки, вызывая синтаксические ошибки.
INSERT INTO ... (...) VALUES ('$var1', '$var2', '$var3') etc...
UPDATE ... SET field='$var1', field2='$var2', etc...
mysql_real_escape_string НЕ добавляет эти кавычки для вас. Он просто проверяет, что все, что он экранирует, «безопасно» для использования в строке запроса.
Если mysql_query() возвращает false , это означает, что возникла проблема, и вы можете получить точное описание / сообщение об ошибке mysql_error()
.
Ответ №2:
Вы передаете $_POST в качестве аргумента в writeStaff(), но затем в функции write staff вы все еще ссылаетесь на $ _POST, когда кажется, что вы должны ссылаться на $ p, поэтому:
public function writeStaff($p)
{
if ($p['uid']) { // good
if ($_POST['uid']) { // bad
Однако я подозреваю, что это сработает, поскольку $ _POST является суперглобальным и доступен в любом месте точно так же, как $ _SESSION, $ _REQUEST и т.д.
Возможно, вы захотите попробовать это:
public function writeStaff($p)
{
var_dump($_POST);
exit;
И посмотрите, содержит ли $_POST вообще какие-либо значения, если это не так, то это ваша проблема. Если $_POST действительно содержит значения, то обратитесь к ответу Марка Б., поскольку вы неправильно заключаете переменные в кавычки.
Комментарии:
1. Итак, я сделал about, но все равно ничего не работает. Использование ‘$ p [«]’ действительно делает много с тех пор, но это просто не работает.
2. «Итак, я сделал about», не уверен, что вы имеете в виду. Вы сделали var_dump? Где присутствуют значения?
3. Извините, я имел в виду выше, я печатал быстро и не перечитывал. И да, я попробовал var_dump и да, там присутствовали значения. Я также создал новую пустую страницу php и попытался обновить базу данных, используя другой код, но по-прежнему ничего. Способ настройки моего сайта заключается в том, что все находится на одной странице php. ((index.php )) Я не уверен на 100%, что это проблема, хотя я не должен быть. Есть ли у вас скрипт обновления mysql, который легко использовать? Поскольку все, что я пробовал, я не добился успеха.
4. @Dalton Sutton: Не знаю, почему вы ограничены использованием только 1 страницы, но мы можем обойти это. Похоже, что ваша форма обновления персонала отправляется по адресу: <form action=»/staff/ $uid» method=»post»>, что такое /staff/$uid? Не уверен, как вы создаете php-скрипт из такой переменной, если только у вас нет каких-то правил перезаписи apache.
5. Я так и делаю. На какой URL-адрес я должен поместить его, чтобы обновить? У меня это указывает на новую страницу php.
Ответ №3:
Попробуйте найти ошибки в вашем запросе с помощью следующего кода
$result = mysql_query($sql);
if (!$result) {
die('Invalid query: ' . mysql_error());
}