Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ряд проблем

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
T-Mon
Отправлено: 17 Ноября, 2007 - 10:57:19
Post Id


Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Вот код программы:
PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  4. <title>Guestbook</title>
  5. </head>
  6. <body>
  7. <form method="post">
  8. Your name:<br>
  9. <input type="text" size=40 name="name">
  10. <br>
  11. Your message:<br>
  12. <textarea name="post" rows=10 cols=30 wrap="on"></textarea>
  13. <br>
  14. <input type="submit" value="Post a message">
  15. <br>
  16. </form>
  17.  
  18. <?PHP
  19. $host="localhost";
  20. $login="root";
  21. $pass="";
  22. $db_name="db_book";
  23. $table="data";
  24. $data=mysql_connect($host,$login,$pass) or die ("Cannot connect mysql");
  25. $query="CREATE DATABASE IF NOT EXISTS `$db_name`;";
  26. mysql_query($query,$data);
  27. mysql_select_db($db_name,$data) or die ("Cannot select the database");
  28. $query="CREATE TABLE IF NOT EXISTS `$table` (
  29. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  30. `name` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
  31. `post` VARCHAR( 90 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
  32. );";
  33. mysql_query($query,$data);
  34. $name=$_POST['name'];
  35. $post=$_POST['post'];
  36. if (strlen($name)<1)
  37. {
  38.         echo ("You haven't specified your name");
  39.         exit();
  40. }
  41. elseif (strlen($name)>12)
  42. {
  43.         echo ("Your name is too long");
  44.         exit();
  45. }
  46. elseif (strlen($post)<1)
  47. {
  48.         echo ("You haven't written the message");
  49.         exit();
  50. }
  51. elseif (strlen($post)>90)
  52. {
  53.         echo ("Your message is too long");
  54.         exit();
  55. }
  56. $query="INSERT INTO '$table' ('id','name','post') VALUES (NULL,'$name','$post');";
  57. mysql_query($query,$data);
  58.  
  59. ?>
  60. </body>
  61. </html>

1. Кода форму заполняю кириллицей, функция strlen() работает некорректно.
2. Постоянно в браузере выводятся Notice'ы:
Цитата:
Notice: Undefined index: name in P:\WEB\localhost\www\test.php on line 34

Notice: Undefined index: post in P:\WEB\localhost\www\test.php on line 35

3. Как сделать так, чтоб сообщение
Цитата:
You haven't specified your name
не выводилось сразу при первой загрузке.
4. Наконец, база и таблица нормально создаются, но почему то записи туда не добавляются.
Спасибо за внимание!
 
 Top
EuGen Администратор
Отправлено: 17 Ноября, 2007 - 11:33:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




1. В чем проявляется некорректность работы? И убедитесь что Вы правильно задаете кодировку.
2. Потому, что Вы обращаетесь сразу к необъявленным элементам массива $_POST.
Правильно делать так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $name=isset($_POST['name'])?$_POST['name']:'';
  3. $post=isset($_POST['post'])?$_POST['post']:'';
  4.  

3. Нужно проверять - а передавались ли данные. В простейшем случае это можно делать, проверяя $name и $post на непустые строки (см п. 2.), но правильнее это делать так:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['accept_data']))
  3. {
  4.    if (strlen($name)<1)
  5.    {
  6.         echo ("You haven't specified your name");
  7.         exit();
  8.    }
  9.    ...//Ваш код
  10. }
  11.  

и не забыть в форму добавить hidden-поле:
PHP:
скопировать код в буфер обмена
  1.  
  2. <form method="post">
  3.  Your name:
  4.  <input type="text" size=40 name="name">  
  5.  Your message:
  6.  <textarea name="post" rows=10 cols=30 wrap="on"></textarea>  
  7.  <input type='hiddan' name='accept_data' value='1'>
  8.  <input type="submit" value="Post a message">  
  9.  </form>
  10.  

4.Вы вставляете NULL-значение в поле `id` таблицы, которое наверняка у Вас служит первичным ключем, и, соответственно, никаких NULL там быть не может. Если нет, то приведите структуру Вашей таблицы. Плюс к тому, зачем Вы пишете имя таблицы в кавычках, означающих строковую константу? Если и употреблять кавычки, то только обратные, например:
PHP:
скопировать код в буфер обмена
  1.  
  2. $query="INSERT INTO `$table` VALUES ...";
  3.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
T-Mon
Отправлено: 17 Ноября, 2007 - 13:17:08
Post Id


Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




1. Некорректность в том, что когда ввожу значение в поле name (если б дошло до поля post, было б тоже самое и с ним) в кириллической раскладке, сразу выводится сообщение "Your name is too long".
Тут вроде бы кодировку задаю:
PHP:
скопировать код в буфер обмена
  1. <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

2. Можна пожалуйста поподробнее об этом:
PHP:
скопировать код в буфер обмена
  1. $name=isset($_POST['name'])?$_POST['name']:'';

Что означают опереторы "?" и ":", если можно, линк на инфо, где это объясняется.
Что-то напоминает if...else, но синтаксис странный.
3. Не совсем понимаю суть этой формы... если можно, тоже линк или пояснение.
4. Хмм... не знал, что ' отличается от `, тоже хотелось бы точно найти, где и как точно можно каждую применять.
Спасибо за ваш ответ.\n\n(Добавление)
Кстати, в коде есть структура таблицы, вот:
PHP:
скопировать код в буфер обмена
  1.  $query="CREATE TABLE IF NOT EXISTS `$table` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `name` VARCHAR( 12 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
  4. `post` VARCHAR( 90 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
  5. );";
\n\n(Добавление)
Еще одно, NULL в поле id я ставил, потому что так делал phpmyadmin, с которым я, так сказать, консультировался.
 
 Top
T-Mon
Отправлено: 17 Ноября, 2007 - 20:16:10
Post Id


Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Никто не поможет?
 
 Top
valenok Модератор
Отправлено: 17 Ноября, 2007 - 21:14:02
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Если это всё нужно читать - то вряд ли\n\n(Добавление)
начните с http://phpfaq[dot]ru/debug
а там посмотрим


-----
Truly yours, Sasha.
 
My status
 Top
T-Mon
Отправлено: 18 Ноября, 2007 - 00:09:48
Post Id


Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Мда, трудно тут с чтением, хреновый из вас модератор, обязанность модератора - читать внимательно каждое сообщение в модерированном форуме на предмет нарушения правила или просьбе о помощи.
 
 Top
Staind
Отправлено: 18 Ноября, 2007 - 01:02:47
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2007  
Откуда: Планета сокровищ


Помог: 0 раз(а)

[+]


Цитата:
или просьбе о помощи.

Что за нова?
 
 Top
EuGen Администратор
Отправлено: 18 Ноября, 2007 - 11:11:29
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




1. Попробуйте передавать в кодировке cp1251 (обычная Windows) и задавать ее не в тэге meta, а в свойстве accept-charset формы:
PHP:
скопировать код в буфер обмена
  1.  
  2. <form action="your_script" accept-charset="cp1251">
  3.  

только нужно убедиться, что оно задается именно как "cp1251" (я то уже не помню), а не, скажем, "windows1251" и т.п.
2. Конструкция и есть краткая запись ветвления. Выполняется оно так:

Если expr есть true (либо по правилам приведения типов считается равным true), то переменной $var присвоится значение выражения val0, в противном случае присвоится значение выражения val1
Некоторые другое альтернативные виды конструкция PHP Вы можете найти тут:
http://php.su/learnphp/cs/?alt
3. А тут нет ничего сложного: Вы создаете скрытое полу в форме, скрипту оно передается вместе с другими, "явными" данными. Но в скрипте оно уже совсем "явное", и Вы можете проверить, например, было ли оно задано или нет. Таким образом, если оно не задано, то данные формы не передавались, и делать ничего не нужно.
4. Как я и предполагал, Вы пытаетесь вставить NULL - значение в поле, объявленное при создании таблицы как NOT NULL. Такой запрос INSERT никогда не выполнится. Либо сделайте ваше поле id как поле auto_increment и уберите его вообще из запроса INSERT, либо перестраивайте логику Вашего скрипта.
Обратные кавычки - применимы для обозначения объектов БД в запросах (самих баз данных, таблиц, полей(колонок)). Одинарные и двойные кавычки применяются, в случаях, когда Вам нужно обозначить строковую константу. Например, применимо для вставки значений в строковое поле.
__________
P.S. не пойму, отчего я сегодня такой добрый?((*


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok Модератор
Отправлено: 18 Ноября, 2007 - 12:13:49
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




если вам ответили, а мне не пожаловались - то по мне всё нормально.
а код у вас по цвету явно не похож на чтото такое

код ..
// А вот ты , да ты, ты полный **** **** *** ** ** ** * * *
код ..

--

Может из вас получится лучше.
Поживём увидим.


-----
Truly yours, Sasha.
 
My status
 Top
Infuzzer
Отправлено: 18 Ноября, 2007 - 12:22:35
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Нояб. 2007  
Откуда: Израиль, Ашкелон


Помог: 0 раз(а)




T-Mon, valenok - не разжигайте Улыбка
Нужно проще относиться к словам людей. А модераторы - тоже люди. Улыбка
T-Mon, можно же с юмором относиться, зачем сразу нападать?
Вообще на многих форумах за обсуждение действий модератора банан вешают. Хотя это маразм полнейший.
Вот так и складывается плохое отношение к модераторам.

Вообще иногда лучше жевать, чем говорить. В любом случае - не надо лезть с кулаками после одного сообщения, не помог valenok, поможет кто-то другой.
 
 Top
T-Mon
Отправлено: 18 Ноября, 2007 - 12:33:55
Post Id


Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Да при чем тут кулаки, я вообще редко вступаю в конфликт, про меня удивили слова модератора "я не хочу все читать", скорей я отреагировал с юмором... кстати, на счет юмора, главное, чтоб сейчас модератор не отреагировал с "с юмором" и не закрыл тему.
EuGen, огромное спасибо, сейчас все проверю.
 
 Top
Infuzzer
Отправлено: 18 Ноября, 2007 - 12:39:48
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Нояб. 2007  
Откуда: Израиль, Ашкелон


Помог: 0 раз(а)




T-Mon, он вполне адекватный. Улыбка
 
 Top
valenok Модератор
Отправлено: 18 Ноября, 2007 - 12:50:06
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




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

но читать десятки строк кода никому не нужно
особенно если это теги html или такая фигня как

PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2.  $host="localhost";
  3.  $login="root";
  4.  $pass="";
  5.  $db_name="db_book";
  6.  $table="data";
  7.  $data=mysql_connect($host,$login,$pass) or die ("Cannot connect mysql");
  8.  $query="CREATE DATABASE IF NOT EXISTS `$db_name`;";
  9.  


нужно прямо ошибку, строку в которой ошибка и две строки до и после, ну вы не потрудились стираьт пробелы, а я читать.
Вроде честно. Ну помогу не я, поможет ктото другой.
Как сказал один хороший человек: ещё не извелись добродетели


-----
Truly yours, Sasha.
 
My status
 Top
Infuzzer
Отправлено: 18 Ноября, 2007 - 12:56:29
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Нояб. 2007  
Откуда: Израиль, Ашкелон


Помог: 0 раз(а)




Ура, нахально флудить можно аж до четвертой страницы!!! Улыбка
На мой взгляд схема один вопрос - одна тема -- очень удобная.
Флуд разводится до той поры, как задавший вопрос не скажет "Спасибо, проблема решена, тему можно закрыть".
 
 Top
EuGen Администратор
Отправлено: 18 Ноября, 2007 - 13:26:37
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




А вот не скажите.. частенько бывает так, что одна тема "плавно" перетекает в другую. Вроде и не флуд, а читать потом очень трудно.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB