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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление данных в базу данных, не получается, прошу помощи 
:(
    Опции темы
proff89
  Дата 20.5.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
Вот пытаюсь сделать добавление данных, что-то нечто добавления статьи вида: pages.php?act=view&pid=5 но что-то не совсем получается, можете натолкнуть в нужно русло?
Код

<?php
        error_reporting(7);
    include "./config.php";    //    подключаем конфиг с доступом к БД

//    Осуществляем подключение к БД + даем знать MySQL'у в какой кодировке мы хотим работать
    mysql_connect($db_host, $db_uname, $db_pass) or die("Не могу соедениться с MySQL сервером!");
    mysql_select_db($db_name) or die("Базы данных не существует!");
    mysql_query ("set character_set_client='cp1251'");
    mysql_query ("set character_set_results='cp1251'");
    mysql_query ("set collation_connection='cp1251_general_ci'");
switch($_GET['act']) {
default:
    echo "<form action=\"dobav_st.php?page=add&ok=1\" method=\"post\">\n".
                "<br><br><input type=\"text\" name=\"newsname\">".
       "<br><br><textarea cols=\"70\" rows=\"10\" name=\"newstext\">Введите текст новости<br><br><hr /></textarea>\n".
               "<br><br><input type=\"submit\" value=\"  Добавить новость  \" name=\"ok\" /></form>\n";
    
     /* Выполняем SQL-запрос */
$query = "SELECT text
     FROM `Pages`
     ORDER BY id DESC
     LIMIT 0 , 20";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
        /* Выводим результаты в html */
   print "<table align='center'>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line as $col_value) {
            print "\t\t<td <fieldset style='text-align:left;padding:2pt;background:#ffffff;'><legend><i>заголовок</i></legend></fieldset><br>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</table>\n";
break;
case "view":
if(isset($_GET['pid'])) {
$pid=intval($_GET['pid']);
$sql2="SELECT * FROM `Pages` WHERE `id`='$pid'";
$result2 = mysql_query($sql2);
$postdata = mysql_fetch_row($result2);
print_r($postdata);
echo $postdata['text'] ;
echo $postdata;
}
break;
      case 'add':
         /* Выполняем SQL-запрос */
     if($_POST['newstext']) {
echo '<p>'.$_POST['newstext'].'</p>';
}
     if($_POST['newsname']) {
echo '<p>'.$_POST['newsname'].'</p>';
print "<center><h1><b>Данные успешно добавлены в базу данных</b></h1></center>";
echo '<meta http-equiv="refresh" content="0; url=dobav_st.php">';
}
    $query2 = "INSERT INTO Pages (id,name,text) VALUES (id, '".$_POST['newsname']."', '".$_POST['newstext']."');";
    echo $query2;
   $result1 = mysql_query($query2) or die("Query failed : " . mysql_error());
    /* Выводим результаты в html */
    print "<table>\n";
        print "\t<tr>\n";
            print "\t\t<td>$col_value</td>\n";
        print "\t</tr>\n";
    print "</table>\n";
        }
        ?>

проблема в том, что не форма появляется, но после нажатия кнопки запись в базу не происходит, ну и соответственно страница вида: pages.php?act=view&pid=5 не создается. значит как я делал, закомментировал этот участок кода:
Код

/* Выполняем SQL-запрос */
   /* $query = "SELECT text
     FROM `Pages`
     ORDER BY id DESC
     LIMIT 0 , 20";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());*/
        /* Выводим результаты в html */
   /*print "<table align='center'>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line as $col_value) {
            print "\t\t<td <fieldset style='text-align:left;padding:2pt;background:#ffffff;'><legend><i>заголовок</i></legend></fieldset><br>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</table>\n";
break;
case "view":
if(isset($_GET['pid'])) {
$pid=intval($_GET['pid']);
$sql2="SELECT * FROM `Pages` WHERE `id`='$pid'";
$result2 = mysql_query($sql2);
$postdata = mysql_fetch_row($result2);
print_r($postdata);
echo $postdata['text'] ;
echo $postdata;
}
break;*/ 

после чего проверил насколько рабочее условие непосредственной записи в бд, прописал echo $query2; запрос генерируется запись в базу происходит, правда почему то, сначал то что вводишь, а потом пустая запись, но это не беда, разберусь, интересен процесс, который я закомментирован, именно он не работает, 0 реакции. вот сижу думаю, но не могу понять, почему не выполняется действие case "view":
помогите плиз, скоро презащита..... :(
PM MAIL   Вверх
Feldmarschall
Дата 20.5.2008, 12:12 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Для начала научись программировать с отступами.
Отступы нужны там, где одна операция включается в другую.
поэтому писать 
Код

    print "<table>\n";
        print "\t<tr>\n";
            print "\t\t<td>$col_value</td>\n";
        print "\t</tr>\n";
    print "</table>\n";[/quote]

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

И логика программы должна быть логичной. Зачем писать, что данные успешно добавлены, ДО того, как они добавляются в БД?

Блин. Что у тебя делает default в начале списка?!

Добавлено через 14 минут и 6 секунд
Если у тебя какой-то кусок программы должен выполняться вообще всегда, то нафига его вообще в свитч запихивать?
Соединение с БД у тебя ведь не засунуто туда?

А если уж засунул в default в самом начале, то Break-то тогда зачем писать?
ты выполняешь код при любом значении свитча а потом его останавливаешь! То есть, остановка происходит в любом случае. 

Вот как должен выглядеть твой код, если его писать не кривыми руками:
обрати внимание на новые значения директивы error_reporting и запроса SET - они должны быть именно такими, как я написал
Код

<?php
error_reporting(E_ALL);
include "./config.php";    //    подключаем конфиг с доступом к БД
//    Осуществляем подключение к БД + даем знать MySQL'у в какой кодировке мы хотим работать
mysql_connect($db_host, $db_uname, $db_pass) or die("Не могу соедениться с MySQL сервером!");
mysql_select_db($db_name) or die("Базы данных не существует!");
mysql_query ("set names=cp1251");

echo "<form action=\"dobav_st.php?page=add&ok=1\" method=\"post\">\n".
     "<br><br><input type=\"text\" name=\"newsname\">".
     "<br><br><textarea cols=\"70\" rows=\"10\" name=\"newstext\">Введите текст новости<br><br><hr /></textarea>\n".
     "<br><br><input type=\"submit\" value=\"  Добавить новость  \" name=\"ok\" /></form>\n";
    
/* Выполняем SQL-запрос */
$query = "SELECT text
          FROM `Pages`
          ORDER BY id DESC
          LIMIT 0 , 20";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
/* Выводим результаты в html */
print "<table align='center'>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
  print "\t<tr>\n";
  foreach ($line as $col_value) {
    print "\t\t<td <fieldset style='text-align:left;padding:2pt;background:#ffffff;'><legend><i>заголовок</i></legend></fieldset><br>$col_value</td>\n";
  }
  print "\t</tr>\n";
}
print "</table>\n";

switch($_GET['act']) {
  case "view":
    if(isset($_GET['pid'])) {
      $pid=intval($_GET['pid']);
      $sql2="SELECT * FROM `Pages` WHERE `id`='$pid'";
      $result2 = mysql_query($sql2);
      $postdata = mysql_fetch_row($result2);
      print_r($postdata);
      echo $postdata['text'];
      echo $postdata;
    }
  break;

  case 'add':
    /* Выполняем SQL-запрос */
    if($_POST['newstext']) {
      echo '<p>'.$_POST['newstext'].'</p>';
    }
    if($_POST['newsname']) {
      echo '<p>'.$_POST['newsname'].'</p>';
      print "<center><h1><b>Данные успешно добавлены в базу данных</b></h1></center>";
      echo '<meta http-equiv="refresh" content="0; url=dobav_st.php">';
    }
    $query2 = "INSERT INTO Pages (id,name,text) VALUES (id, '".$_POST['newsname']."', '".$_POST['newstext']."');";
    echo $query2;
    $result1 = mysql_query($query2) or die("Query failed : " . mysql_error());
    /* Выводим результаты в html */
    print "<table>\n";
    print "\t<tr>\n";
    print "\t\t<td>$col_value</td>\n";
    print "\t</tr>\n";
    print "</table>\n";
}
?>


Это сообщение отредактировал(а) Feldmarschall - 20.5.2008, 12:17
PM   Вверх
proff89
Дата 20.5.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall
спасибо за помощь, но при нажатии на "добавить" ничего не происходит :( т.е до добавления дело даже не доходит, иначе echo $query2;
вывел бы запрос... помоги, плиз до конца добить вопрос

Это сообщение отредактировал(а) proff89 - 20.5.2008, 23:14
PM MAIL   Вверх
Feldmarschall
Дата 20.5.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



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

мне хочется, чтобы из того, что я говорил, хотя бы 10% было понято, а не "спасибо за рабочий код, я пошел", а знаний сколько было - столько и осталось. Можно хоть раз в жизни задуматься над своим кодом, а не совершать привычные два действия: надыбать код в инете и попросить в форуме исправить, если не работает?

да, и забыл совсем самое главное исправление.
Код

foreach ($_POST as $key => $value) $_POST[$key]=mysql_real_escape_string($value);
$query2 = "INSERT INTO Pages (id,name,text) VALUES (id, '".$_POST['newsname']."', '".$_POST['newstext']."');";



M
MoLeX
Модератор: ну обзываться не обязательно, а в остольном верно


Это сообщение отредактировал(а) MoLeX - 28.5.2008, 13:07
PM   Вверх
proff89
Дата 27.5.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall, извини, что сразу не отписался, приболел немного. 
но до добавления дело так и не доходит... :(
Код

case 'add':
    if($_POST['newstext']) {
      echo '<p>'.$_POST['newstext'].'</p>';
    }
         if($_POST['newsname']) {
              echo '<p>'.$_POST['newsname'].'</p>';
      print "<center><h1><b>Данные успешно добавлены в базу данных</b></h1></center>";
echo '<meta http-equiv="refresh" content="0; url=dobav_st.php">';
    }
foreach ($_POST as $key => $value)$_POST[$key]=mysql_real_escape_string($value);
$query2 = "INSERT INTO Pages (id,name,text) VALUES (id, '".$_POST['newsname']."', '".$_POST['newstext']."');";
          echo $query2;
    $result1 = mysql_query($query2) or die("Query failed : " . mysql_error());

PM MAIL   Вверх
proff89
Дата 28.5.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall, за помощью обратился, поможешь?

Код

<?php
error_reporting(E_ALL);
include "../config.php";    //    подключаем конфиг с доступом к БД
//    Осуществляем подключение к БД + даем знать MySQL'у в какой кодировке мы хотим работать
mysql_connect($db_host, $db_uname, $db_pass) or die("Не могу соедениться с MySQL сервером!");
mysql_select_db($db_name) or die("Базы данных не существует!");
mysql_query ("set names=cp1251");





echo "<form action=\"dobav_st.php?page=add&ok=1\" method=\"post\">\n".
     "<br><br><input type=\"text\" name=\"newsname\">".
     "<br><br><textarea cols=\"70\" rows=\"10\" name=\"newstext\">Введите текст новости<br><br><hr /></textarea>\n".
     "<br><br><input type=\"submit\" value=\"  Добавить новость  \" name=\"ok\" /></form>\n";
    



/* Выполняем SQL-запрос */
$query = "SELECT text
          FROM `Pages`
          ORDER BY id DESC
          LIMIT 0 , 20";
$result = mysql_query($query) or die("Query failed : " . mysql_error());




/* Выводим результаты в html */
print "<table align='center'>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
  print "\t<tr>\n";
  foreach ($line as $col_value) {
    print "\t\t<td <fieldset style='text-align:left;padding:2pt;background:#ffffff;'><legend><i>заголовок</i></legend></fieldset><br>$col_value</td>\n";
  }
  print "\t</tr>\n";
}
print "</table>\n";




switch($_GET['act']) {
  case "view":
    if(isset($_GET['pid'])) {
      $pid=intval($_GET['pid']);
      $sql2="SELECT * FROM `Pages` WHERE `id`='$pid'";
      $result2 = mysql_query($sql2);
      $postdata = mysql_fetch_row($result2);
      print_r($postdata);
      echo $postdata['text'];
      echo $postdata;
    }
  break;





  case 'add':
    /* Выполняем SQL-запрос */
    if($_POST['newstext']) {
      echo '<p>'.$_POST['newstext'].'</p>';
    }
    if($_POST['newsname']) {
      echo '<p>'.$_POST['newsname'].'</p>';
      print "<center><h1><b>Данные успешно добавлены в базу данных</b></h1></center>";
echo '<meta http-equiv="refresh" content="0; url=dobav_st.php">';
    }
foreach ($_POST as $key => $value)$_POST[$key]=mysql_real_escape_string($value);
$query2 = "INSERT INTO Pages (id,name,text) VALUES (id, '".$_POST['newsname']."', '".$_POST['newstext']."');";
    echo $query2;
    $result1 = mysql_query($query2) or die("Query failed : " . mysql_error());






    /* Выводим результаты в html */
    print "<table>\n";
    print "\t<tr>\n";
    print "\t\t<td>$col_value</td>\n";
    print "\t</tr>\n";
    print "</table>\n";
}
?>



помоги пожалуйста, послезавтра предзащита... почти всё готово, осталось это сделать...
PM MAIL   Вверх
Feldmarschall
Дата 28.5.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Если у тебя в коде ошибки происходят, ты их видишь?
скажем, имя функции неверно написал, или скобку не закрыл?
PM   Вверх
proff89
Дата 28.5.2008, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall, так смысл в том, что ошибки видимой нет, вывод к примеру сообщений из таблицы pages работает, а вот до условия добавления почему-то дело не доходит... echo $query2; не выводит sql запрос на экран, из чего я делаю вывод, что до добавления не доходит очередь...
PM MAIL   Вверх
Feldmarschall
Дата 28.5.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Если у тебя в коде ошибки происходят, ты их видишь?
скажем, имя функции неверно написал, или скобку не закрыл? 
PM   Вверх
proff89
Дата 28.5.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall, скобки проверил, все наместе... 

оставил только:

Код

echo "<form action=\"dobav_st.php?page=add&ok=1\" method=\"post\">\n".
     "<br><br><input type=\"text\" name=\"newsname\">".
     "<br><br><textarea cols=\"70\" rows=\"10\" name=\"newstext\">Введите текст новости<br><br><hr /></textarea>\n".
     "<br><br><input type=\"submit\" value=\"  Добавить новость  \" name=\"ok\" /></form>\n";
    
switch($_GET['act']) {
    case "add":
    /* Выполняем SQL-запрос */
              if($_POST['newstext']) {
      echo '<p>'.$_POST['newstext'].'</p>';
    }
              if($_POST['newsname']) {
      echo '<p>'.$_POST['newsname'].'</p>';
    }
foreach ($_POST as $key => $value)$_POST[$key]=mysql_real_escape_string($value);
$query2 = "INSERT INTO Pages (id,name,text) VALUES (id, '".$_POST['newsname']."', '".$_POST['newstext']."');";
    echo $query2;
    $result1 = mysql_query($query2) or die("Query failed : " . mysql_error());
}


действие не выполняется, как будто его нет :(
PM MAIL   Вверх
Feldmarschall
Дата 28.5.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



Неужели я непонятно по-русски пишу?
ЕСЛИ, вдруг, случайно, ты допускаешь какую-нибудь ошибку в коде, например неправильно имя функции написал, то видишь ли ты при этом сообщение об ошибке? Или просто чистый экран? Видел ли ты вообще хоть одно сообщение об ошибке при работе со своим кодом?
Можно на этот вопрос ответить, а не кидаться переписывать по десятому разу один и тот же код? 
почему надо выискивать в вопросе 10 смыслов, вместо того, чтобы просто и прямо на него ответить?

Добавь в начало скрипта строчку
ini_set('display_errors',1);

а в каталог со скриптом файл .htaccess со строчкой
php_flag display_errors 1

и снова запусти свой многострадальный скрипт. который выдаст тебе ошибку. которая всегда была, но которую ты просто не видишь.
Хотя опять же, может и не выдать. но как писать программы, не видя сообщений об ошибках - я себе не представляю. Это как машину водить с завязанными глазами.

Добавлено через 7 минут и 18 секунд
Хорошо, можно без ошибок, логикой. 
От выполнения какого условия у тебя зависит - будет выполняться добавление, или нет?
PM   Вверх
proff89
Дата 28.5.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall, повторюсь ещё раз, нет ошибки на экране, просто остается форма, перекидывает на dobav_st.php?page=add&ok=1 всё, после:
Цитата(Feldmarschall @  28.5.2008,  10:20 Найти цитируемый пост)
ni_set('display_errors',1);а в каталог со скриптом файл .htaccess со строчкой php_flag display_errors 1

не появляется сообщение об ошибке... ошибка только с нотисом ругается на switch($_GET['act']) {

PM MAIL   Вверх
Feldmarschall
Дата 28.5.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


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

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



ох. ре. неть
убейте меня кто-нибудь.
не появляется сообщение об ошибке. ошибка только с нотисом. 
РНР его носом тычет в ошибку - "вот она! Здесь у тебя проблема!!! откуда у тебя эта переменная? С чего ты взял, что она у тебя есть?".
Исполнение кода зависит от значения этой переменной. Если у нас нотис - значит, переменной нет. значит, поэтому код и не выполняется.
Но у нас все хорошо, прекрасная маркиза. ошибок нет - только нотис. нотис - это не ошибка. Это досадное недоразумение, придумали какие-то дураки, неизвестно, для чего. 
PM   Вверх
proff89
Дата 28.5.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Feldmarschall, аха, дело не в нотисе, обычное добавление работает, хотя ошибка с нотисом присутствует, так что не тут ошибка...
PM MAIL   Вверх
krundetz
Дата 28.5.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



Feldmarschall спокойне. А вам proff89 советую выводить все значения используемых переменных в процесе выполнения скрипта. Тоесть передаем какую нибудь переменную в функцию посмотрим а что она из себя представляет. Изменяем переменную на что нибудь посмотрим что получилось.  Должен прийти в скрипт массив значений посмотрим что пришло и т.д. и т.п. Для этого есть две такие замечательные функции как var_dump() и print_r(). Очень знаете ли облегчает жизнь визуально наблюдение за продвижением работы скрипта.

Это сообщение отредактировал(а) krundetz - 28.5.2008, 11:08


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


 




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


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

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