Вопрос вроде бы простой, но я чего-то очевидного не понимаю или не вижу - не судите строго, пожалуйста, принцип вроде понял, а на практике закрепить не удается... Собственно, не так давно заинтересовался изучением РНР, обложился книгами (Мазуркевич и Еловая, в частности). Суть проблемы в том, что при обработке вот этого кода, интерфейс не добавляет в таблицу БД данные, да и выдает "Спасибо! Ваша информация введена!", не давая возможности заполнить форму:
<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 написал(а):
Очень много ошибок в коде, например:
Вот это вкратце что я нашел. Возможно тут еще какие-то ошибки. Мой вам совет или внимательнее читайте книги или же найдите другое руководство. Так же есть замечательный сайт команды irbis-team советую так же и там почитать руководства.
<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) Морячёк написал(а):
Спасибо, большое...
Котерова и Кузнецова скачал и начал читать... Нашел еще один скрипт у буржуев, не могли бы Вы его прокомментировать на предмет работоспособности и жизнепрегодности - мне не все понятно, за спрос ведь не бьют, а разобраться уж очень хочется:
Котерова и Кузнецова скачал и начал читать... Нашел еще один скрипт у буржуев, не могли бы Вы его прокомментировать на предмет работоспособности и жизнепрегодности - мне не все понятно, за спрос ведь не бьют, а разобраться уж очень хочется:
<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 написал(а):
Ок, попробую разобраться. Итак:
Вообщем повторяющиеся ошибки, мой вам совет учите основы основы и еще раз основы! Вы еще плохо подготовлены для понимания работы таких скриптов. Читайте книги, а php.net должен быть вам родным домом.
<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['имя переменной']
Замените все переменные которые должны идти с формы на $_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) |
Вася, все фигня. Учиь по ирбису. |
та я понял уже) понравилась авторизация и регистрация, но пока слишком сложно - книги с инета пока штудирую...
а я вот у ирбиса не нашел интерфейсов - это у меня зрительная иллюзия или я таки что-то упустил?
Спустя 11 минут, 6 секунд (18.06.2011 - 22:36) bulgakov написал(а):
Штудируй книги и php.net
Спустя 2 минуты, 7 секунд (18.06.2011 - 22:39) Игорь_Vasinsky написал(а):
Морячёк
Уменя в подписи линк - правильное оформлениеSQL -запроса, там и про конкатенацию почитаешь
и в начале кода, во время отладки скрипта поставь
в твоём коде и ошибки и опечатки и не объявленные переменные...
Уменя в подписи линк - правильное оформлениеSQL -запроса, там и про конкатенацию почитаешь
и в начале кода, во время отладки скрипта поставь
error_reporting(E_ALL);
в твоём коде и ошибки и опечатки и не объявленные переменные...