Новичок с ОБНОВЛЕНИЕМ php / mysql

#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());
}