Автор Тема: Не могу найти ошибку в этой строке  (Прочитано 10452 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу занести данные в базу mysql, непонимаю...
$Query = "INSERT into $TableName (id, FirstName, LastName, EmailAddress, Comments) values ("5", "$Array[FirstName]",
"$Array[LastName]", "$Array[Email]", "$Array[Comments]")";

Так вот, выдает Parse error в этой строке... Подскажите plzz

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
Не могу найти ошибку в этой строке
« Ответ #1 : 06 Января 2004, 01:38:28 »
наверное он ругается на кавычки внутри кавычек, перед которыми в таком случае слэш ставят...
работа в Украине

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу найти ошибку в этой строке
« Ответ #2 : 06 Января 2004, 01:48:54 »
Спасибо! Действительно не нравилась ему такая форма записи :)
« Последнее редактирование: 06 Января 2004, 01:55:32 от Matold »

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу найти ошибку в этой строке
« Ответ #3 : 06 Января 2004, 01:54:34 »
Так, а вот опять проблема, уже с просмотром базы:

<HTML>
<
Head>
<
TitleПросмотр базы </title>
</
head>
<
BODY>
<?
php
$Host 
"database.agava.ru";
$User "xxx";
$Password "123"
$DBName "xxx";
$TableName "Feedback";
$Link mysql_connect($Host$User$Password);
$Query "SELECT * from $TableName";
$Result mysql_db_query ($DBName$Query$Link);
print (
"<Table border=1 Width= \\"75%\\" cellspasing=2 cellpadding=2 align=CENTER>\\n");
print (
"<TR align=center valign=top>\\n");
print (
"<TD align=center valign=top> Name </TD>\\n");
print (
"<TD align=center valign=top> Mail </TD>\\n");
print (
"<TD align=center valign=top> Comments </TD>\\n");
print (
"</TR>\\n");
while (
$Row mysql_fetch_array ($Result)) {
print (
"<TR align=center valign=top>\\n");
print (
"<TD align=center valign=top> $Row[FirstName] $Row[LastName] </TD>\\n");
print (
"<TD align=center valign=top> $Row[EmailAddress]</TD>\\n");
print (
"<TD align=center valign=top> $Row[Comments]</TD>\\n");
print (
"</TR>\\n");
mysql_close ($Link);
?>
</BODY>
</HTML>

 

Этот скрипт должен всю базу выводить в таблицу, но при выполнении ругается Parse error на последнюю строку :(
Опять я какую-то лажу сделал
« Последнее редактирование: 06 Января 2004, 18:26:02 от Matold »

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не могу найти ошибку в этой строке
« Ответ #4 : 06 Января 2004, 07:41:39 »
учись отлавливать парсе ерроры сам.
со всеми на форум не набегаешься.

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

И еще пара замечаний:
нельзя писать $Array[Email], а надо $Array[\'Email\'], иначе можешь словить глюк.
mysql_db_query - устаревшая функция, на нормальном хостинге работать не будет.

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу найти ошибку в этой строке
« Ответ #5 : 06 Января 2004, 13:10:42 »
Да, мне очень стыдно, что из-за такой дурацкой ошибки пришлось в форум писать (забыл "}" - просто ужастно :] ), просто я первый раз с mySQL работаю, боялся что ошибка в новых для меня функциях.
 RomikChef, а вот если писать  $Array[\'Email\'], то будет "parse error, expecting `T_STRING\' or `T_VARIABLE\' or `T_NUM_STRING\' ", а вот за все остальные советы - GREAT THANKS

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не могу найти ошибку в этой строке
« Ответ #6 : 06 Января 2004, 15:57:25 »
ты правда такой дурак, или прикидываешься?
за именно этот совет надо говорить GREAT THANKS
повторяю для слабослышащих:
так, как ты пишешь - НЕПРАВИЛЬНО.
РНР позволяет так писать, но
1. Так писать неправильно. Правила такие в РНР. строка ВСЕГДА заключается в кавычки. Без кавычек пишутся константы
2. Может вовсе не работать в будущих версиях РНР.
3.Это может привести к ОЧЕНЬ трудно уловимым ошибкам.

Поэтому вместо того, чтобы отмахиваться от этого замечания, надо переделать свою программу.
и писать правильно:

$Query 
"INSERT into $TableName (id, FirstName, LastName, EmailAddress, Comments) values (\'5\',\'".$Array[\'FirstName\']."\',\'".$Array[\'LastName\']."\',\'".$Array[\'Email\']."\',\'".$Array[\'Comments\']."\')";

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не могу найти ошибку в этой строке
« Ответ #7 : 06 Января 2004, 16:21:44 »
Если же учесть, что у тебя массив, да еще в котором имена ключей совпадают с именами полей, можно сделать еще проще.

В этом и заключается программирование!
Вместо тупого перечисления полей, сделать это автоматом!

сначала у тебя в запросе перечисляются поля.
во-первых, если ты заполняешь их все, то эту часть запроса можно вообще опустить.
insert into table values (,,,)
во-вторых, если все же перечислять, то можно сделать это автоматом.
получить имена ключей массива - array_keys()
сделать из них строку - implode
в итоге:
$query="INSERT INTO $TableName (".implode(",",array_keys($Array)).") values ....";
то же самое делаем со значениями, и пролучаем в итоге
$query="INSERT INTO $TableName (".implode(",",array_keys($Array)).") values (\'".implode("\',\'",$Array)."\');
ну, или если без перечисления полей, то так:
$query="INSERT INTO $TableName values (0,\'".implode("\',\'",$Array)."\');
Так ты убиваешь кучу зайцев: получается универсальный запрос не зависящий от состава и количества полей.
получается синтаксически правильный запрос.
Избегаешь возможных ошибок при ручном вводе.

И еще.
в первом примере нет поля id
что-то я сомневаюсь, что жесткое указание 5, как в твоем примере - это правильно.
правильнее не указывать его вовсе или писать 0.
Если у тебя есть возражения - я тебя обязательно выслушаю и объясню, в чем ты неправ. :-)

На дурака не обижайся :-)

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу найти ошибку в этой строке
« Ответ #8 : 06 Января 2004, 18:11:15 »
Так вот, даже если писать так:
$Query "INSERT into $TableName (id, FirstName, LastName, EmailAddress, Comments) values (\'0\', \' \\".$Array[\'FirstName\'].\\" \',\' \\".$Array[\'LastName\'].\\"\',\' \\".$Array[\'Email\'].\\"\',\'\\".$Array[\'Comments\'].\\"\')";  то все равно выходит "parse error, expecting `T_STRING\' or `T_VARIABLE\' or `T_NUM_STRING\' ",
однако без кавычек все ОК


Цитировать
в первом примере нет поля id
что-то я сомневаюсь, что жесткое указание 5, как в твоем примере - это правильно.
правильнее не указывать его вовсе или писать 0.

Да нет, в проге у меня "0", но просто сначала хотел указать частный случай, а потом передумал ^-^

А вот перед values  все-таки перечисляю столбцы, тк есть еще и другие

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Не могу найти ошибку в этой строке
« Ответ #9 : 06 Января 2004, 18:49:47 »
Matold
Я думаю, нужно все таки почитать что такое . и зачем она нужна... как только ты пймешь, что это такое... я думаю ты поймешь конструкции \\" в твоем коде - гупость.

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

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не могу найти ошибку в этой строке
« Ответ #10 : 06 Января 2004, 19:15:34 »
мда.
тяжелый случай.
человеку дают ГОТОВЫЙ правильный пример,а он в ответ на это зачем-то пишет кривой.
зачем?

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

Слушай, Matold, в меня сомнения закрадываются.
Ты вообще читал, что я тебе написал-то?

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу найти ошибку в этой строке
« Ответ #11 : 06 Января 2004, 20:43:13 »
Цитировать
Phoinix:
Странно, что так сложно переписать готовый код, причем правильный, а потом, решив, что тебя все-таки здесь надули, внести свои "правильные" коррективы...

Цитировать
RomikChef: ну, или если без перечисления полей, то так: $query="INSERT INTO $TableName values (0,\'".implode("\',\'",$Array)."\');


Так вот, в коде  RomikChef\'a не хватает " в конце строки перед ; , так что меня здесь "надули" :)

Оффлайн Matold

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 25
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.matold.narod.ru/
Не могу найти ошибку в этой строке
« Ответ #12 : 06 Января 2004, 20:53:24 »
Так вот, тупо перекопировав код и добавив " получилось так:
<?php
$Host 
"database.agava.ru";
$User "xxx";
$Password "xxx"
$DBName "xxx";
$TableName "Feedback";
$Link mysql_connect($Host$User$Password);
//$Query = "INSERT into $TableName values (\\"0\\", \\"$Array[FirstName]\\", \\"$Array[LastName]\\", \\"$Array[Email]\\", \\"$Array[Comments]\\")";
$query="INSERT INTO $TableName values (0,\'".implode("\',\'",$Array)."\')";
if (
mysql_db_query ($DBName$Query$Link)) {
echo 
"обновлены данные таблицы $TableName.
\\n"
;
echo 
"\\n <meta http-equiv=\\"refresh\\" content=\\"1;URL=sql_feedback_view.php\\" >";
} else {
echo 
"Не удается обновить таблицу $TableName.
\\n"
;
}
mysql_close ($Link);
?>

Так вот, при выполнении получаю "Не удается обновить таблицу"
НО если это ГОТОВЫЙ правильный пример, то почему такой результат выполнения? (однако если поменять местами //  перед $query и $Query то все работает ???

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Не могу найти ошибку в этой строке
« Ответ #13 : 06 Января 2004, 21:16:31 »
Цитировать
$Query = "INSERT into $TableName (id, FirstName, LastName, EmailAddress, Comments) values (\'5\',\'".$Array[\'FirstName\']."\',\'".$Array[\'LastName\']."\',\'".$Array[\'Email\']."\',\'".$Array[\'Comments\']."\')";


Где тут не хватает кавычки???

Ответь на вопрос зачем были поставлены точки перед и после переменных, и сразу же вопрос стоит ли в этом случае ставить слеши перед кавычками? и соответсвенно почему???

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не могу найти ошибку в этой строке
« Ответ #14 : 06 Января 2004, 21:19:08 »
тебя здесь не надувают.
Тебя здесь УЧАТ ка делать правильно.
Не пишут за тебя готовый код, а учат.
показывают.
Я, кроме готовых строчек, еще и пояснения разные словами делал.
Но по-моему, слова до товарищя либо не доходят вовсе, либо доходят очень туго.

Если ты не понял, как пользоваться с помощью программирования, возьми пример, где просто тупо написана строка, как у тебя, но ПРАВИЛЬНО. Если там есть опечатка - исправь ее самостоятельно.

Если ты не понимаешь, как сделать самостоятельно, надо спросить, что не понял.
А не бежать обратно на форум с криками - у меня не работает!!!

Скажи, ты головой хоть иногда думаешь?
Ты же сам только что писал -
Цитировать
А вот перед values все-таки перечисляю столбцы, тк есть еще и другие

и тут же берешь код, в котором столбцы не перечислены
Цитировать
$query="INSERT INTO $TableName values (0,\'".implode("\',\'",$Array)."\')";


складывается все-таки, впечатление, что ты даже не пытаешься, понять, что означает тот или иной пример, а слепо запихиваешь в код и смотришь, что получится.
Неужели так трудно подумать и спросить, что непонятно?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28