Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: добавление данных в таблицу
 
 автор: Krasnodar   (03.01.2007 в 17:13)   письмо автору
 
 

устанавливаю соединение
<?php
  
// Адерс сервера MySQL
  
$dblocation "localhost";
  
// Имя базы данных, на хостинге или локальной машине
  
$dbname "guest";
  
// Имя пользователя базы данных
  
$dbuser "root";
  
// и его пароль
  
$dbpasswd "";

  
// Устанавливаем соединение с базой данных
  
$dbcnx = @mysql_connect($dblocation$dbuser$dbpasswd);
  if (!
$dbcnx) {
   exit( 
"<P>В настоящий момент сервер базы данных не доступен,
             поэтому корректное отображение страницы невозможно.</P>" 
);
  } else { echo 
"Соединение с сервером успешно установлено<br/>";}
  
// Выбираем базу данных
  
if (! @mysql_select_db($dbname$dbcnx) ) {
    exit( 
"<P>В настоящий момент база данных не доступна,
              поэтому корректное отображение страницы невозможно.</P>" 
);
  } else { echo 
"Соединение с бозой '" .$dbname"' успешно установлено";}

  
// Определяем версию сервера
  
$query "SELECT VERSION()";
  
$ver mysql_query($query);
  if(!
$ver) exit("Ошибка при определении версии MySQL-сервера");
  
$version mysql_result($ver0);
  list(
$major$minor) = explode("."$version);
  
// Если версия выше 4.1 сообщаем серверу, что будем работать с
  // кодировкой cp1251
  
$ver $major.".".$minor;
  if((float)
$ver >= 4.1)
  {
    
mysql_query("SET NAMES 'cp1251'");
  }
?>

делаю форму для регистрации
<table>
<form method=post>
<tr><td>Имя:</td><td><input type=text name=name></td></tr>
<tr><td>Пароль:</td><td><input type=password name=pass></td></tr>
<tr><td>Пароль:</td><td><input type=password name=pass_again></td></tr>
<tr><td>e-mail:</td><td><input type=text name=email></td></tr>
<tr><td>Wap-сайт:</td><td><input type=text name=wap_url></td></tr>
<tr><td>Web-сайт:</td><td><input type=text name=web_url></td></tr>
<tr><td></td><td><input type=submit value='Зарегистрировать'></td></tr>
</form>
</table>
<?php
  
// Обработчик HTML-формы

  /////////////////////////////////////////////////
  // 1. Блок проверки правильности данных
  /////////////////////////////////////////////////
  // Удаляем лишние пробелы
  
$_POST['name'] = trim($_POST['name']);
  
$_POST['pass'] = trim($_POST['pass']);
  
$_POST['pass_again'] = trim($_POST['pass_again']);
  
// Проверяем не пустой ли суперглобальный массив $_POST
  
if(empty($_POST['name'])) exit();
  
// Проверяем правильно ли заполнены обязательные поля
  
if(empty($_POST['name'])) exit('Поле "Имя" не заполнено');
  if(empty(
$_POST['pass'])) exit('Одно из полей "Пароль" не заполнено');
  if(empty(
$_POST['pass_again'])) exit('Одно из полей "Пароль" не заполнено');
  if(
$_POST['pass'] != $_POST['pass_again']) exit('Пароли не совпадают');
  
// Если введён e-mail проверяем его на соответсвие
  
if(!empty($_POST['email']))
  {
    if(!
preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i"$_POST['email']))
    {
      exit(
'Поле "E-mail" должно соответствовать формату somebody@somewhere.ru');
    }
  }
  
// Если на сервер не включены "магические кавычки"
  // обрабатываем введённые пользователями данные
  // функцией mysql_escape_string()
  
if (!get_magic_quotes_gpc())
  {
    
$_POST['name']  = mysql_escape_string($_POST['name']);
    
$_POST['pass']  = mysql_escape_string($_POST['pass']);
    
$_POST['email'] = mysql_escape_string($_POST['email']);
    
$_POST['wap_url']  = mysql_escape_string($_POST['wap_url']);
    
$_POST['web_url']  = mysql_escape_string($_POST['web_url']);
  }

  
/////////////////////////////////////////////////
  // 2. Блок проверки имени на уникальность
  /////////////////////////////////////////////////
  // Устанавливаем соединение с базой данных
  
require_once("config.php"); 
  
// Проверяем не было ли переданное имя
  // зарегистрировано ранее
  
$query "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]'";
  
$usr mysql_query($query);
  if(!
$usr) exit("Ошибка - ".mysql_error());
  
$total mysql_result($usr0);
  if(
$total 0)
  {
    exit(
"Данное имя уже зарегистрировано, пожалуйста, выберите другое");
  }

  
/////////////////////////////////////////////////
  // 3. Блок регистрации пользователя
  /////////////////////////////////////////////////
  // Формируем и выполняем SQL-запрос на 
  // добавление нового пользователя
  
$query "INSERT INTO users
            VALUES(NULL,
                   '
$_POST[name]',
                   '
$_POST[pass]',
                   '
$_POST[email]',
                   '
$_POST[wap_url]',
                   '
$_POST[web_url]')";
  if(
mysql_query($query))
  {
    
// Осуществляем перезагрузку страницы,
    // чтобы сбросить POST-данные
    
echo "<HTML><HEAD>
          <META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$_SERVER[PHP_SELF]'>
          </HEAD></HTML>"
;
    echo
"Спасибо за регистрацию";
  } else exit(
"Ошибка при добавлении данных - ".mysql_error());
?>

в результате получается
Соединение с сервером успешно установлено
Соединение с бозой 'guest' успешно установлено
Ошибка при добавлении данных - Column count doesn't match value count at row 1

где ошибка?

   
 
 автор: tonnal   (03.01.2007 в 17:19)   письмо автору
 
   для: Krasnodar   (03.01.2007 в 17:13)
 


$query = "INSERT INTO users 
            VALUES(NULL, 
                   '$_POST[name]', 
                   '$_POST[pass]', 
                   '$_POST[email]', 
                   '$_POST[wap_url]', 
                   '$_POST[web_url]')";

Ошибка в запросе. Нужно - INSERT INTO users (поле1, поле2) VALUES ('знач1','знач2') - забыли указать поля. А можн INSERT INTO users SET поле1='значение1', поле2='значение2'

   
 
 автор: Krasnodar   (03.01.2007 в 17:25)   письмо автору
 
   для: tonnal   (03.01.2007 в 17:19)
 

помоему указывать имена столбцов не обязательно, темболее запись идет во все столбци и попорядку....

   
 
 автор: cheops   (03.01.2007 в 17:53)   письмо автору
 
   для: Krasnodar   (03.01.2007 в 17:25)
 

Если не указываете список столбцов, количество значений и столбцов должно совпадать. Если здесь таблица users таже самая, что и в теме http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=30165, то значений не хватает.

   
 
 автор: Krasnodar   (03.01.2007 в 18:26)   письмо автору
 
   для: cheops   (03.01.2007 в 17:53)
 

Извиняюсь... Уже крыша начинает потихоньку ехать.... А как бырь со столбцом data регистрации?

   
 
 автор: cheops   (03.01.2007 в 20:27)   письмо автору
 
   для: Krasnodar   (03.01.2007 в 18:26)
 

Поставьте вместо него функцию NOW() - она автоматически вставит текущую дату.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования