[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по практической реализации интерфейса
Морячёк
[LIST=1]
Вопрос вроде бы простой, но я чего-то очевидного не понимаю или не вижу - не судите строго, пожалуйста, принцип вроде понял, а на практике закрепить не удается... Собственно, не так давно заинтересовался изучением РНР, обложился книгами (Мазуркевич и Еловая, в частности). Суть проблемы в том, что при обработке вот этого кода, интерфейс не добавляет в таблицу БД данные, да и выдает "Спасибо! Ваша информация введена!", не давая возможности заполнить форму:

<html>
<
body>
<?php
$host='localhost';
$user='admin';
$password='1111';
$DBName='tz';

if (submit) {
$link = mysql_connect ($host, $user, $password);
$db_selected = mysql_select_db('tz', $link);
$sql = "INSERT INTO X (a, b, c, d, e, f, l) VALUES '$a', '$b', '$c', '$d', '$e', '$f', '$l'";
$result = mysql_query ($sql) ;
echo "Спасибо! Ваша информация введена! \n";
} else {
?>
<form method="post" action="<?php echo $PHP_SELF?>">
#: <input type ="Text" name = "a"><br>
Название фирмы: <input type="Text" name ="b"><br>
Телефон: <input type = "Text" name = "c"><br>
Ф.И.О.: <input type="Text" name="d"><br>
Адрес: <input type ="Text" name = "e"><br>
Деятельность: <input type ="Text" name = "f"><br>
Login: <input type ="Text" name = "l"><br>
<
input type = "Submit" name="submit" value="submit">
</
form>
<?php } ?>
</body>
</
html>


а вот исходник авторов:

<html>
<
body>
if (submit) {
$date = mysql_connect ("localhost", "root");
mysql_select_db ("mydatebase", $date) ;
$sql = "INSERT INTO students (first, last, address, position) VALUES '$first', 'last', '$address', 'position')";
$result = mysql_query ($sql) ;
echo "Спасибо! Ваша информация введена\n";
}else {
?>
<form method="post" action="<?php echo $PHP_SELF?>">
Имя: <input type ="Text" name = "first"><br>
Фамилия: <input type="Text" name ="last"><br>
Улица: <input type = "Text" name = "address"><br>
Должность: <input type="Text" name="position"><br>
<
input type = "Submit" name="submit" value="Ввод информации">
</
form>
<?php
}
?>
</body>
</
html>




Спустя 8 часов, 52 минуты, 33 секунды (18.06.2011 - 10:22) linker написал(а):
Сожги книги этих авторов. Это
if (submit) {
либо фигня, либо опечатка. Откуда переменные $first, $address? Этот запрос вообще работать не будет
$sql = "INSERT INTO students (first, last, address, position) VALUES '$first', 'last', '$address', 'position')";
И т.д. и т.п.

Спустя 45 минут, 57 секунд (18.06.2011 - 11:08) bulgakov написал(а):
Очень много ошибок в коде, например:



<html>
<
body>
<?php
$host='localhost'; // из соображений безопасности подключение к базе лучше выносить в отдельный файл и потом подключать его
$user='admin';
$password='1111';
$DBName='tz';

if (submit) { /* submit в данном случае будет ошибка, потому как php будет пытаться найти константу с именем submit, не совсем понятно что вы тут хотите проверить если переменную то надо писать $submit, если же отследить нажатие кнопки то это делается через проверку пост запроса, проверяется это так if($_SERVER['REQUEST_METHOD']=='POST') */
$link = mysql_connect ($host, $user, $password);
$db_selected = mysql_select_db('tz', $link);
$sql = "INSERT INTO X (a, b, c, d, e, f, l) VALUES '$a', '$b', '$c', '$d', '$e', '$f', '$l'"; /* в sql запросе значения которые передаются для вставки в конструкции VALUES должны быть в скобках - VALUES ('$a', '$b', '$c', '$d', '$e', '$f', '$l') */
$result = mysql_query ($sql) ;
echo "Спасибо! Ваша информация введена! \n"; // в этом блоке для вставки данных из форм в таблицу так же отсутствует проверка входных данных что очень небезопасно
} else {
?>
<form method="post" action="<?php echo $PHP_SELF?>"> // неправильно написана суперглобальная переменная php_self, правильно вот так - "<?php echo _SERVER["PHP_SELF"]?>" */
<input type ="Text" name = "a"><br> // некритично но name лучше присваивать более читаемые имен
Название фирмы: <input type="Text" name ="b"><br>
Телефон: <input type = "Text" name = "c"><br>
Ф.И.О.: <input type="Text" name="d"><br>
Адрес: <input type ="Text" name = "e"><br>
Деятельность: <input type ="Text" name = "f"><br>
Login: <input type ="Text" name = "l"><br>
<
input type = "Submit" name="submit" value="submit">
</
form>
<?php } ?>
</body>
</
html>


Вот это вкратце что я нашел. Возможно тут еще какие-то ошибки. Мой вам совет или внимательнее читайте книги или же найдите другое руководство. Так же есть замечательный сайт команды irbis-team советую так же и там почитать руководства.

Спустя 11 минут, 23 секунды (18.06.2011 - 11:19) m4a1fox написал(а):
Морячёк
Ндя.... Крутые книжки:) Почитай Котерова. Или Кузнецова.

Спустя 5 часов, 30 минут, 41 секунда (18.06.2011 - 16:50) Морячёк написал(а):
Спасибо, большое... user posted image
Котерова и Кузнецова скачал и начал читать... Нашел еще один скрипт у буржуев, не могли бы Вы его прокомментировать на предмет работоспособности и жизнепрегодности - мне не все понятно, за спрос ведь не бьют, а разобраться уж очень хочется:



<html>
<
body>
<?php
error_reporting(E_ALL);
$host='localhost';
$user='admin';
$password='1111';
$DBName='ops';

$db = mysql_connect($host, $user, $password);
mysql_select_db("ops",$db);
if ($submit) {
// here if no ID then adding else we're editing
if ($id) {
$sql = "UPDATE employees SET first='$first',last='$last',address='$address',position='$position'
WHERE id=
$id";
} else {
$sql = "INSERT INTO employees (first,last,address,position) VALUES ('$first','$last','$address','$position')";
}
// run SQL against the DB
$result = mysql_query($sql);
echo "Record updated/edited!<p>";
} elseif ($delete) {
// delete a record
$sql = "DELETE FROM employees WHERE id=$id";
$result = mysql_query($sql);
echo "$sql Record deleted!<p>";
} else {
// this part happens if we don't press submit
if (!$id) {
// print the list if there is not editing
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PHP_SELF, $myrow["id"], $myrow["first"],
$myrow["last"]);
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><br>", $PHP_SELF, $myrow["id"]);
}
}

?>
<P>
<
a href="<?php echo $PHP_SELF?>">ADD A RECORD</a>
<
P>
<
form method="post" action="<?php echo $PHP_SELF?>">
<?php
if ($id)
{
// editing so select a record
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];
// print the id for editing
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<?php
}
?>
First name:<input type="Text" name="first" value="<?php echo $first ?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $last ?>"><br>
Address:<input type="Text" name="address" value="<?php echo $address ?>"><br>
Position:<input type="Text" name="position" value="<?php echo $position ?>"><br>
<
input type="Submit" name="submit" value="Enter information">
</
form>
<?php
}
?>
</body>
</
html>

Спустя 25 минут, 26 секунд (18.06.2011 - 17:15) bulgakov написал(а):
Ок, попробую разобраться. Итак:



<html>
<
body>
<?php
$host='localhost';
$user='admin';
$password='1111';
$DBName='ops';

$db = mysql_connect($host, $user, $password);
mysql_select_db("ops",$db); // если имя базы для выбора храниться в перменной $DBName то зачем передавать строку "ops"?
if ($submit) { // опять неизвестная переменная $submit об этом я уже писал выше повторяться не буду
// here if no ID then adding else we're editing

if ($id) { // еще одна неопределенная переменная, прежде чем с ними работать видимо нужно их получить из массива $_POST

//предварительно отфильтровав.

$sql = "UPDATE employees SET first='$first',last='$last',address='$address',position='$position' // опять же повторюсь все эти переменные нужно получить и

//отфильтровать из массива
$_POST
WHERE id=$id";
} else {
$sql = "INSERT INTO employees (first,last,address,position) VALUES ('$first','$last','$address','$position')"; // тоже самое с переменными
}
// run SQL against the DB
$result = mysql_query($sql); // опять же ни одной проверки на ошибки в работе с базой данных
echo "Record updated/edited!<p>";
} elseif ($delete) { // опять неизвестная переменная
// delete a record

$sql = "DELETE FROM employees WHERE id=$id"; // тоже самое
$result = mysql_query($sql);
echo "$sql Record deleted!<p>"; // зачем выводить на экран ваш sql запрос? делая это вы показываете структуру запроса зная это можно вскрыть вашу базу
} else {
// this part happens if we don't press submit
if (!$id) { // опять переменная
// print the list if there is not editing

$result = mysql_query("SELECT * FROM employees",$db); // зачем еще раз передавать ресурс базы данных если вы уже с ним работаете?
while ($myrow = mysql_fetch_array($result)) { // эта функция по умолчанию возвращает и индексный и ассоциативный массив и принимает необязяательный

//параметр выбора какой массив вам нужен, например со вторым параметро MSQL_ASSOC вернется чисто ассоциативный массив

printf("<a href=\"%s?id=%s\">%s %s</a> \n", $PHP_SELF, $myrow["id"], $myrow["first"], // зачем такие сложности? вы же сами запутаетесь в этой функции
$myrow["last"]);
printf("<a href=\"%s?id=%s&delete=yes\">(DELETE)</a><br>", $PHP_SELF, $myrow["id"]);
}
}

?>
<P>
<
a href="<?php echo $PHP_SELF?>">ADD A RECORD</a>
<
P>
<
form method="post" action="<?php echo $PHP_SELF?>">
<?php
if ($id)
{
// editing so select a record
$sql = "SELECT * FROM employees WHERE id=$id";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
$id = $myrow["id"];
$first = $myrow["first"];
$last = $myrow["last"];
$address = $myrow["address"];
$position = $myrow["position"];
// print the id for editing
?>
<input type=hidden name="id" value="<?php echo $id ?>">
<?php
}
?>
First name:<input type="Text" name="first" value="<?php echo $first ?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $last ?>"><br>
Address:<input type="Text" name="address" value="<?php echo $address ?>"><br>
Position:<input type="Text" name="position" value="<?php echo $position ?>"><br>
<
input type="Submit" name="submit" value="Enter information">
</
form>
<?php
}
?>
</body>
</
html>



Вообщем повторяющиеся ошибки, мой вам совет учите основы основы и еще раз основы! Вы еще плохо подготовлены для понимания работы таких скриптов. Читайте книги, а php.net должен быть вам родным домом.

Спустя 44 минуты, 16 секунд (18.06.2011 - 17:59) VolDroN написал(а):
Просто книги и примеры устаревшие.
Замените все переменные которые должны идти с формы на $_POST['имя переменной']

Спустя 7 минут, 44 секунды (18.06.2011 - 18:07) alex12060 написал(а):
Вася, все фигня. Учиь по ирбису.

Спустя 32 минуты, 33 секунды (18.06.2011 - 18:40) m4a1fox написал(а):
alex12060
И то вариант!

Спустя 3 часа, 45 минут, 43 секунды (18.06.2011 - 22:25) Морячёк написал(а):
Цитата (alex12060 @ 18.06.2011 - 15:07)
Вася, все фигня. Учиь по ирбису.

та я понял уже) понравилась авторизация и регистрация, но пока слишком сложно - книги с инета пока штудирую...
а я вот у ирбиса не нашел интерфейсов - это у меня зрительная иллюзия или я таки что-то упустил? user posted image

Спустя 11 минут, 6 секунд (18.06.2011 - 22:36) bulgakov написал(а):
Штудируй книги и php.net

Спустя 2 минуты, 7 секунд (18.06.2011 - 22:39) Игорь_Vasinsky написал(а):
Морячёк
Уменя в подписи линк - правильное оформлениеSQL -запроса, там и про конкатенацию почитаешь

и в начале кода, во время отладки скрипта поставь
error_reporting(E_ALL);


в твоём коде и ошибки и опечатки и не объявленные переменные...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.