Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И снова ошибка... не пашет mysql_fetch_array() 
:(
    Опции темы
mr.Anderson
Дата 18.7.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Пробую освоиться с MySQL. Написал следующий подробно прокомментированный код (он не несет большой смысловой нагрузки, это просто для тренировки):
Код

<?php

 function query( $str )
 {
  return mysql_query( $str );
 }

 $dbname = "MyDB"; //Имя БД
 $tbname = "MyTable"; //Имя таблицы
 $TableFLDS = "User TINYTEXT NOT NULL,
               Email TINYTEXT NOT NULL,
               Post TEXT NOT NULL"; //Поля таблицы

 mysql_CONNECT( "localhost", "root" ); //Соединяемся с MySQL-сервером

 query( "CREATE DATABASE ".$dbname ); //Создаем БД

 mysql_select_db( $dbname ); //Выбираем БД

 query( "CREATE TABLE ".$tbname." (".$TableFLDS.")" ); //Создаем таблицу

 $res = query( "SELECT * FROM ".$tbname ); //Создаем запрос

 if( ! $res ) //Если он не создался, выводим, почему
  DIE( mysql_error() );

 $array = mysql_fetch_array( $res ); //Запихиваем в массив все, что есть в таблице
 $Cols = ""; //Создаем переменную - будущий массив с колонками. Пока пустой.

 for( $i=0; $i < count( $array ); $i++ ) //Проходимся по всем элементам массива
 {
  echo $array[ $i ]." "; //Убеждаемся, что массив пуст (ведь пока никаких записей
                         //в нашей таблице нет, есть только "шапка" таблицы).

  for( $i=0; $i < mysql_num_fields( $res ); $i++ ) //Теперь запихиваем в $Cols[]
   $Cols[] = mysql_field_name( $res, $i );       //все имена колонок в таблице

  foreach( $Cols as $k => $v ) //Выводим, что же мы в него запихали
   echo "\$Cols[ ".$k." ] => ".$v."<br>";
 }

 echo "-----------------------------------------------<br><br>";

 $Values = array( "sim7", "sim7@rambler", "MyText" ); //Делаем массив со
                                                      //значениями полей

  //ВОТ ТУТ ПОШЛИ ПРОБЛЕМЫ...

 for( $i=0; $i < count( $Cols ); $i++ ) //Пробегаемся по колонкам
  query( "UPDATE ".$tbname." SET (".$Cols[ $i ]."=".$Values[ $i ].")" );
  //И запихиваем в таблицу наши значения. Теоретически.

 $array = mysql_fetch_array( $res ); //Снова читаем все содержимое таблицы

 foreach( $array as $k => $v ) //Выводится ворнинг о неверном аргументе.
  echo "\$array[ ".$k." ] => ".$v."<br>"; // -

 echo count( $array ); //Выводит единицу. Почему в $array ничего нет?

 query( "DROP TABLE ".$tbname );

 mysql_CLOSE();
?>

Собственно, я отделил комментарием участок кода, в котором, вероятнее всего, и содержится ошибка:
Код

//ВОТ ТУТ ПОШЛИ ПРОБЛЕМЫ...

 for( $i=0; $i < count( $Cols ); $i++ ) //Пробегаемся по колонкам
  query( "UPDATE ".$tbname." SET (".$Cols[ $i ]."=".$Values[ $i ].")" );
  //И запихиваем в таблицу наши значения. Теоретически.

 $array = mysql_fetch_array( $res ); //Снова читаем все содержимое таблицы

 foreach( $array as $k => $v ) //Выводится ворнинг о неверном аргументе.
  echo "\$array[ ".$k." ] => ".$v."<br>"; // -

 echo count( $array ); //Выводит единицу. Почему в $array ничего нет?

Так почему же массив $array остается пустым?

P.S. Только просьба не говорить мне о том, что в строчке
Код

query( "UPDATE ".$tbname." SET (".$Cols[ $i ]."=".$Values[ $i ].")" );

или в какой-нить другой надо заключить вставляемое значение в апострофы. Я пробовал, это не влияет. 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
AztEK
Дата 18.7.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 1
Всего: 18



Чтобы вставить ряд в таблицу, надо INSERT INTO, а не UPDATE.smile Массив пуст, т.к. данных в базе нету.
Надо вот так:
Код

//ВОТ ТУТ ПОШЛИ ПРОБЛЕМЫ...
 //for( $i=0; $i < count( $Cols ); $i++ ) //Пробегаемся по колонкам
  query( "INSERT INTO ".$tbname." (User, Email, Post) VALUES('sim7','sim7@rambler', 'MyText')" );
  //И запихиваем в таблицу наши значения. Теоретически.
 $res = query( "SELECT * FROM ".$tbname ); //Ñîçäàåì çàïðîñ
 $array = mysql_fetch_array( $res ); //Снова читаем все содержимое таблицы
 foreach( $array as $k => $v ) //Выводится ворнинг о неверном аргументе.
  echo "\$array[ ".$k." ] => ".$v."<br>"; // -
 echo count( $array ); //Выводит единицу. Почему в $array ничего нет?
 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
mr.Anderson
Дата 18.7.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Понял. smile СпасибО! 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 18.7.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



рановато я обрадовался.
Код

<?php

 function query( $str )
 {
  return mysql_query( $str );
 }

 $dbname = "MyDB"; //Èìÿ ÁÄ
 $tbname = "MyTable"; //Èìÿ òàáëèöû
 $TableFLDS = "User TINYTEXT NOT NULL,
               Email TINYTEXT NOT NULL,
               Post TEXT NOT NULL"; //Ïîëÿ òàáëèöû

 mysql_CONNECT( "localhost", "root" ); //Ñîåäèíÿåìñÿ ñ MySQL-ñåðâåðîì

 query( "CREATE DATABASE ".$dbname ); //Ñîçäàåì ÁÄ

 mysql_select_db( $dbname ); //Âûáèðàåì ÁÄ

 query( "CREATE TABLE ".$tbname." (".$TableFLDS.")" ); //Ñîçäàåì òàáëèöó

 $res = query( "SELECT * FROM ".$tbname ); //Ñîçäàåì çàïðîñ

 if( ! $res ) //Åñëè îí íå ñîçäàëñÿ, âûâîäèì, ïî÷åìó
  DIE( mysql_error() );

 $array = mysql_fetch_array( $res ); //Çàïèõèâàåì â ìàññèâ âñå, ÷òî åñòü â òàáëèöå
 $Fields = ""; //Ñîçäàåì ìàññèâ ñ êîëîíêàìè. Ïîêà ïóñòîé.

 for( $i=0; $i < count( $array ); $i++ ) //Ïðîõîäèìñÿ ïî âñåì ýëåìåíòàì ìàññèâà
 {
  echo $array[ $i ]." "; //Óáåæäàåìñÿ, ÷òî ìàññèâ ïóñò (âåäü ïîêà íèêàêèõ çàïèñåé
                         //â íàøåé òàáëèöå íåò, åñòü òîëüêî "øàïêà" òàáëèöû).

  for( $i=0; $i < mysql_num_fields( $res ); $i++ ) //Òåïåðü çàïèõèâàåì â $Fields[]
   $Fields[] = mysql_field_name( $res, $i );       //âñå èìåíà êîëîíîê â òàáëèöå

  foreach( $Fields as $k => $v ) //Âûâîäèì, ÷òî æå ìû â íåãî çàïèõàëè
   echo "\$Fields[ ".$k." ] => ".$v."<br>";
 }

 echo "-----------------------------------------------<br><br>";

 $Values = array( "sim7", "sim7@rambler", "MyText" ); //Äåëàåì ìàññèâ ñî
                                                      //çíà÷åíèÿìè ïîëåé

  //ÂÎÒ ÒÓÒ ÏÎØËÈ ÏÐÎÁËÅÌÛ...

  query( "INSERT INTO ".$tbname." (User, Email, Post) VALUES (sim7, sum7@rambler, MyText)" );
  //È çàïèõèâàåì â òàáëèöó íàøè çíà÷åíèÿ. Òåîðåòè÷åñêè.

 $array = mysql_fetch_array( $res ); //Ñíîâà ÷èòàåì âñå ñîäåðæèìîå òàáëèöû

 foreach( $array as $k => $v ) //Âûâîäèòñÿ âîðíèíã î íåâåðíîì àðãóìåíòå.
  echo "\$array[ ".$k." ] => ".$v."<br>"; // -

 echo count( $array ); //Âûâîäèò åäèíèöó. Ïî÷åìó â $array íè÷åãî íåò?

 query( "DROP TABLE ".$tbname );

 mysql_CLOSE();
?>

И все равно в Foreach пишется ворнинг о неверном аргументе. 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
RoDeX
  Дата 18.7.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 11.10.2005

Репутация: нет
Всего: нет



Вот тебе код полностью переписал, взяв за основу твой(никогда не используй в переменных больших букв, это так, на будующее. Имена переменных я тебя тут не менял)

Код

<?
/*
Упрощенный переработанный вариант скрипта специально для Sim7

(C) PC PROFessional 2004-2006 (e-mail: [email protected])
*/

 $dbname = "MyDB"; // Имя БД
 $tbname = "MyTable"; //Имя таблицы
 $TableFLDS = "User TINYTEXT NOT NULL,
               Email TINYTEXT NOT NULL,
               Post TEXT NOT NULL"; //Поля таблицы

mysql_CONNECT( "localhost", "root"); //Соединяемся с MySQL-сервером

mysql_query('CREATE DATABASE IF NOT EXISTS '.$dbname); //Создаем БД, если её не существует
mysql_select_db($dbname); //Выбираем БД
mysql_query('CREATE TABLE IF NOT EXISTS '.$tbname.' ('.$TableFLDS.')'); //Создаем таблицу, если её не существует

$res = mysql_query('SELECT * FROM '.$tbname ); //Создаем запрос
if(!$res) //Если он не создался, выводим, почему
{
    die(mysql_error());
}

while ($row = mysql_fetch_array($res)) {
    echo 'Имя: '.$row['User'].'<br> E-mail: '.$row['Email'].'<br>Сообщение: '.$row['Post'].'<br><br>'; // Получаем данные из таблицы
}

echo '<br><br> Всего записей: '.mysql_num_rows($res); // Выводим кол-во полей

$Values[] = array("sim7", "sim7@rambler", "MyText"); // Создаем массив с данными
$Values[] = array("Mr. Prof", "[email protected]", "TEST..."); // Создаем массив с данными

for($i=0;$i<count($Values);$i++)
{
    mysql_query('INSERT INTO '.$tbname.' (User, Email, Post) VALUES("'.$Values[$i]['0'].'","'.$Values[$i]['1'].'","'.$Values[$i]['2'].'")'); // Вставляем инфу в таблицу
}

/*
Если что не сделал из того, что ты планировал, извини. 
Я считаю данный скрипт раскрывает основы работы с БД.
Оформлен он по PEAR-стандартам. По-крайней мере вроде всё 
написано по ним. Советую их придерживать, это увеличит 
читабельность скрипта для других программистов. Также не
стоит злоупотреблять вложенными конструкциями for и foreach,
это увеличивает время генерации скрипта. К тому же, я так
и не понял, для чего Вы их использовали. А насчет функций, то
функция query - излишня, т.к. не несёт должной функциональности,
а только увеличивает время генерации страницы.
*/
?>


Если будут какие-либо вопросы - пиши... smile  
PM MAIL WWW ICQ   Вверх
mr.Anderson
Дата 19.7.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



RoDeX, большое спасибо за ответ! Я там ничего делать не планировал, просто тренировался. smile Разбирать скрипт буду завтра. 


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.