1 (изменено: Franz Crawl, 2010-08-18 14:31:53)

Тема: Проблемы с данными в БД

Здравствуйте.Я выполняю упражнение, данное на этом сайте http://phpclub.ru/detail/article/phpintro (Вступление в PHP и MySQL).Создал БД, назвал Products
http://s48.radikal.ru/i119/1008/73/de796257d2det.jpg
в нем таблица Clients.Заполнил таблицу вот так
http://s45.radikal.ru/i108/1008/fd/1bd03947e07at.jpg
После создания пишет
http://s004.radikal.ru/i208/1008/dc/dedc309fdae7t.jpg
В самой форме выбираю Яблоки, заполняю имя и почту, и на следующей странице выводиться, что мой запрос в базе данных.Но вот что там
http://s55.radikal.ru/i147/1008/55/58f4ad93e229t.jpg
При вызове результатов(apple.php) пишет, что Любителей яблок нет.Использую денвер PHP 5.3.1, MySQL 5.1.В php везде кодировка windows-1251.
-----------------------------------------------------------------------------------------------------------------------------------------
Создал id(1 строка).В index выбрал PRIMARY, поставил галку в A_I
http://s42.radikal.ru/i095/1008/fc/99cec8356dfat.jpg
Создалось
http://s52.radikal.ru/i137/1008/3b/e487d0b5bad5t.jpg
После того как я заполнил форму, то вывело это
http://i064.radikal.ru/1008/e0/8d03cffb3ea1t.jpg
Что я сделал не так?
P.S.В php коде после этих изменений я ничего не менял.

2

Re: Проблемы с данными в БД

Franz Crawl
Проверьте запрос на вставку данных (INSERT), очевидно в нем несоответствие полей.

3

Re: Проблемы с данными в БД

$query = "INSERT INTO $userstable VALUES('id','$name','$email', '$preference')";
Написал в этой строке 'id'
Вот что происходит после нескольких запросов
http://s49.radikal.ru/i123/1008/51/09f46e3bda10t.jpg
айди создается, а необходимые поля не заполняются(

4

Re: Проблемы с данными в БД

Franz Crawl
Попробуйте так:

$query = "INSERT INTO $userstable VALUES(NULL, '$name', '$email', '$preference')";

5

Re: Проблемы с данными в БД

Hanut к сожалению тоже самое происходит(

6 (изменено: DmitryV, 2010-08-20 14:44:31)

Re: Проблемы с данными в БД

Franz Crawl
а так если поле id автоинкремент

$query = "INSERT INTO $userstable (`name`, `email`, `preference`) VALUES ('$name', '$email', '$preference')";
// проверьте наличие значений в переменных
echo $userstable;
echo $name;
echo $email;
echo $preference;

структуру таблицы выложите картинки не открываються.
и проверьте в файле my.ini в каталоге /mysql/ строку sql-mode="" выставите в  sql-mode=""  предыдущее значение сохраните и закоментируйте, перепусите mysql

7

Re: Проблемы с данными в БД

Структура:
Field   Type  Length/Values  Default  Collation  Attributes  Null      Index       A_I   

id        int             8             none     пусто       пусто     пусто   Primary    галка

name  Varch       24             none     пусто       пусто     пусто    пусто       пусто

email  Varch       24             none     пусто       пусто     пусто     пусто      пусто

preference (все тоже самое как и с name и email)

Столбцы Comments    MIME type     Browser transformation    Transformation options тоже пусты

прописал в email.php
echo $userstable;
echo $name;
echo $email;
echo $preference;

выводит
ProductsИнформация о вас занесена в базу данных.

То есть показывает только название таблицы

$userstable (`id`, `name`, `email`, `preference`) результата не дало.Все тоже самое(

8

Re: Проблемы с данными в БД

Franz Crawl
Покажите код, который создает переменные $userstable, $name и $email.

9 (изменено: Franz Crawl, 2010-08-21 10:30:46)

Re: Проблемы с данными в БД

Вот, что в форме (отрывок)

<FORM ACTION="email.php" METHOD="POST">
Ваше имя:<BR> <INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR> <INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>

В email.php

/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";

И

echo "Привет, ".$_POST['name'];
echo "<BR><BR>";
echo "Спасибо за ваш интерес.<BR><BR>";
echo "Вас интересуют ".$_POST['preference'].". Информацию о них мы пошлем вам на email: ".$_POST['email'];

10 (изменено: DmitryV, 2010-08-21 10:35:18)

Re: Проблемы с данными в БД

Franz Crawl
а в коде

<FORM ACTION="email.php" METHOD="POST">
Ваше имя:<BR> <INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR> <INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>

Присутствует кнопка отправить? и закрытие тега формы?

<input type="submit" value="Отправить">
</form>

и Ваш код по добавлению данных в таблицу находиться в скрипте email.php? Вы вызываете его по отправке данных форме в нем у Вас должен быть скрипт занесения данных в базу, если в другом то вызывайте другой указав его в

<FORM ACTION="email.php" METHOD="POST">

Структуру проверьте Ваших файлов и логику вызова скриптов.

11

Re: Проблемы с данными в БД

Вот полная версия формы

<CENTER>
Хотите больше знать о наших товарах?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php" METHOD="POST">
Ваше имя:<BR> <INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR> <INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меня интересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value = "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>

в email.php все так же как в уроке

12 (изменено: DmitryV, 2010-08-21 10:51:08)

Re: Проблемы с данными в БД

Franz Crawl
а в каком файле код внесения данных в базу?

дайте полный листинг Ваших файлов пожалуйста.
и структуру Вашей таблицы выгрузив её структуры через экспорт в phpmyadmin.

переменные в скрипте mail.php пропишите $_POST['имя переменной'] пример:

$name = $_POST['name'];

до кода запроса к базе!

PS: Полученные переменные $_POST и $_GET представляют собой простой ассоциированный массив. Где ключом массива является имя переменной, а соответствующим значением – ее значение, используйте в зависимости от Вашего метода передачи данных.

13 (изменено: Franz Crawl, 2010-08-21 10:54:06)

Re: Проблемы с данными в БД

Полный код файла email.php, который должен вносить данные в ДБ

<?php
/* Этот скрипт получает переменные из index.html */

/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "Franz Crawl";
$password = "123";
$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";

/* email администратора */
$adminaddress = "*****";

/* создать соединение */
mysql_connect($hostname,$username,$password) or die("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die(mysql_error()); 

echo "<CENTER>";
echo "Привет, ".$_POST['name'];
echo "<BR><BR>";
echo "Спасибо за ваш интерес.<BR><BR>";
echo "Вас интересуют ".$_POST['preference'].". Информацию о них мы пошлем вам на email: ".$_POST['email'];
echo "</CENTER>";

/* составить запрос для вставки информации о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES ('id', '$name', '$email', '$preference')";
/* Выполнить запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());
echo "Информация о вас занесена в базу данных.";

/* Закрыть соединение */
mysql_close(); 
?>

таблица

-- phpMyAdmin SQL Dump
-- version 3.2.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 21, 2010 at 11:50 AM
-- Server version: 5.1.40
-- PHP Version: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `products`
--

-- --------------------------------------------------------

--
-- Table structure for table `clients`
--

CREATE TABLE IF NOT EXISTS `clients` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `email` varchar(25) NOT NULL,
  `preference` varchar(25) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `clients`
--

index.html

<CENTER>
Хотите больше знать о наших товарах?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php" METHOD="POST">
Ваше имя:<BR> <INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR> <INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меня интересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value = "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>

У меня все так же как и в уроке (кроме данных, для подключения к БД)

14 (изменено: DmitryV, 2010-08-21 11:01:59)

Re: Проблемы с данными в БД

Franz Crawl
У Вас не объявлены переменные для запроса ($name, $email, $preference):

$query = "INSERT INTO $userstable VALUES ('id', '$name', '$email', '$preference')";

объявите их по моему примеру выше (объявление переменных должно быть до запроса!).
и запрос грамотнее написать:

$query = "INSERT INTO $userstable (`name`, `email`, `preference`) VALUES ('$name', '$email', '$preference')";

15

Re: Проблемы с данными в БД

DmitryV
Спасибо вам, у меня все получилось)

16 (изменено: DmitryV, 2010-08-21 11:09:26)

Re: Проблемы с данными в БД

Franz Crawl
В Вашем случае скрипт бы работал при условии конфигурации значения register_globals = On (в php.ini) но это не верно и с точки зрения безопасности должно быть в Off, и на большенстве хостингов он выключен так как правильно обращаться к переменным через массивы данных $_POST и $_GET. Урок не точен... так как использует правильное обращение к переменным в выводе информации и не верное в запросе.

17

Re: Проблемы с данными в БД

DmitryV
Да, просто урок для только начинающих)
У меня возник еще вопрос уже по другому коду:
index.html

<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php" METHOD="POST">
Какую машину Вы хотите?<BR><input type="text" name="model"  size="20" maxlength="30">
<P>
Ваша почта<BR><input type="text" name="email"  size="20" maxlength="30">
<p>
<input type="submit" value="Заказать!">
</FORM>
</TD></TR></TABLE></CENTER>

email.php

<?php
/* Этот скрипт получает переменные из index.html */
$model = $_POST['model'];
$email = $_POST['email'];
/* Переменные для соединения с базой данных */
$hostname = "localhost";
$username = "Franz Crawl";
$password = "123";
$dbname = "products";
/* Таблица MySQL, в которой хранятся данные */
$userstable = "notebook";

/* создать соединение */
mysql_connect($hostname,$username,$password) or die("Не могу создать соединение ");
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbname) or die(mysql_error());

echo "<center>";
echo "Ваш выбор: ".$_POST['model'];
echo "<BR><BR>";
echo "Ваша почта: ".$_POST['email'];
echo "</center>"

/* составить запрос для вставки информации о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES ('id', '$model', '$email')";
mysql_query($query) or die(mysql_error());
echo "Информация о вас занесена в базу данных.";
/* Закрыть соединение */
mysql_close(); 
?>

Дримвьювер рьяно указывает, что в строке $query = "INSERT INTO $userstable VALUES ('id', '$model', '$email')"; синтаксическая ошибка.Вот, что отображает браузер email.php:
Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in Z:\home\test1.ru\www\email.php on line 32

Что там не так?

18 (изменено: DmitryV, 2010-08-22 14:09:16)

Re: Проблемы с данными в БД

Franz Crawl
в строке выше

echo "</center>"

не хватает ; должно быть

echo "</center>";

PS: Совет, если для Вас не принципиально в чем писать, расмотрите PHP Development Tools http://www.eclipse.org/pdt/downloads/ в нем удобнее и синтаксис ошибки подобно такой Вы сразу увидите, но качайте дистрибутив с http://www.zend.com/community/pdt?ecl=EclipseZend он со встроенным отладчиком.

19

Re: Проблемы с данными в БД

DmitryV
И еще раз вам спасибо)Не в первый раз у меня такие глупые ошибки)
А вы сами в чем работаете?

20 (изменено: DmitryV, 2010-08-23 10:09:37)

Re: Проблемы с данными в БД

Franz Crawl
Я работал раньше в Zend Studio но щас в силу болезни и так как не смог оплатит её лицензию перешел на PHP Development Tools (не жалею, разницы особой нет за исключением возможностей, но Вам они пока не нужны да и в основном они нужны на корпоративном уровне ну тогда уже можно задуматься над покупкой ZS) + настроено рабочее окружение на локальном компьютере, если Вы решили серьезно заняться программированием на php + mysql то PMA это не заминимый инструмент, если Вам нужны уроки и у Вас есть скайп (пишите в ПМ) и свободное время могу Вам помочь с настройками рабочего места и подсказать как лучше и с чего начать, обязательно прочитайте статьи с этого сайта они очень грамотно и дохотчего написаны.

Franz Crawl сказал:

Не в первый раз у меня такие глупые ошибки

Такие ошибки бывают у каждого, особенно в работе над крупными проектами, что бы их избежать хорошо иметь рабочее окружене с проверкой синтаксиса и отладчиком скриптов.

21

Re: Проблемы с данными в БД

DmitryV
Спасибо, что готовы оказать мне помощь.Если что я к вам обращусь