Обновление БД

Статус
В этой теме нельзя размещать новые ответы.

Braniack

Профессор
Регистрация
25 Май 2008
Сообщения
160
Реакции
46
Вообщем нужно следлать реализацию обновления анкеты.
Имеется 2 файла: первый файл это файл редактирования (index.php), второй файл anketa_update - сам файл обновления.

Вот содержимое файла anketa_update

Код:
<?php 
include ("config.php");
if (isset($_POST['name_team']))       
{
$name_team = $_POST['name_team']; 

if ($name_teeam == '') 
{
unset($name_team);
}  

}

/* Если существует в глобальном массиве $_POST['title'] опр. ячейка, то мы создаем простую переменную из неё. Если переменная пустая, то уничтожаем переменную.   */
if (isset($_POST['last_name_com']))      {$last_name_com= $_POST['last_name_com']; if ($last_name_com == '') {unset($last_name_com);}}
if (isset($_POST['name_com']))      {$name_com= $_POST['name_com']; if ($name_com == '') {unset($name_com);}}
if (isset($_POST['name_com_2']))        {$name_com_2 = $_POST['name_com_2']; if ($name_com_2 == '') {unset($name_com_2);}}
if (isset($_POST['mobile_phone'])) {$mobile_phone = $_POST['mobile_phone']; if ($mobile_phone == '') {unset($mobile_phone);}}
if (isset($_POST['home_phone']))        {$home_phone = $_POST['home_phone']; if ($home_phone == '') {unset($home_phone);}}
if (isset($_POST['email_com']))      {$email_com = $_POST['email_com']; if ($email_com == '') {unset($email_com);}}
if (isset($_POST['id']))      {$id = $_POST['id'];}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="mobile_phone/html; charset=windows-1251">


ЗДЕСЬ ИДЕТ html код
                                                    
<?php 
if (isset($name_team) && isset($last_name_com) && isset($name_com) && isset($name_com_2) && isset($mobile_phone) && isset($home_phone) && isset($email_com))
{

$result = mysql_query ("UPDATE anketa SET name_team='$name_team', last_name_com='$last_name_com', name_com='$name_com', name_com_2='$name_com_2', mobile_phone='$mobile_phone', home_phone='$home_phone', email_com='$email_com' WHERE id='$id'");

if ($result == 'true') {echo "<p>Ваша анкета обновлена</p>";}
else {echo "<p>Ваша анкета не обновлена!</p>";}


}		 
else 

{
echo "<p>Вы ввели не всю информацию, поэтому анкета в базе не может быть обновлена .</p>";
}
		 
	
		 
		 ?>                                                    
ЗДЕСЬ ИДЕТ html код	 
</body>
</html>

Проблема в том, что когда я нажимаю в файле index.php редактировать анкету. Он пишет
Вы ввели не всю информацию, поэтому анкета в базе не может быть обновлена

В чём проблема?
 
во-первых, рискну предположить, что вы передаете в этот файл данные методом GET, а надо POST.
Во-вторых, что это за ужас, и в чем его смысл?
/* Если существует в глобальном массиве $_POST['title'] опр. ячейка, то мы создаем простую переменную из неё. Если переменная пустая, то уничтожаем переменную. */
if (isset($_POST['last_name_com'])) {$last_name_com= $_POST['last_name_com']; if ($last_name_com == '') {unset($last_name_com);}}
if (isset($_POST['name_com'])) {$name_com= $_POST['name_com']; if ($name_com == '') {unset($name_com);}}
if (isset($_POST['name_com_2'])) {$name_com_2 = $_POST['name_com_2']; if ($name_com_2 == '') {unset($name_com_2);}}
if (isset($_POST['mobile_phone'])) {$mobile_phone = $_POST['mobile_phone']; if ($mobile_phone == '') {unset($mobile_phone);}}
if (isset($_POST['home_phone'])) {$home_phone = $_POST['home_phone']; if ($home_phone == '') {unset($home_phone);}}
if (isset($_POST['email_com'])) {$email_com = $_POST['email_com']; if ($email_com == '') {unset($email_com);}}
if (isset($_POST['id'])) {$id = $_POST['id'];}
register_globals обычно, по умолчанию отключен, и необходимости в таких конструкциях просто нет.
почему бы не использовать в необходимом метсте сразу суперглобальные переменные необходимые
 
Alternator мне советовали так делать...

Не можешь тада набрасть код/изменить мой как нада сделать?
Суть состоит в том, чтоб просто обновить данные в таблице.
 
Пускай такой советчик идет лесом ... взяв с собой книгу по PHP5, и уяснив для себя, что register_globals по умолчанию везде отключен, и так никто не пишет

PHP:
<?php 
include ("config.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="mobile_phone/html; charset=windows-1251">


ЗДЕСЬ ИДЕТ html код
                                                    
<?php 
if (	isset($_REQUEST['name_team']) && 
		isset($_REQUEST['last_name_com']) && 
		isset($_REQUEST['name_com']) && 
		isset($_REQUEST['name_com_2']) && 
		isset($_REQUEST['mobile_phone']) && 
		isset($_REQUEST['home_phone']) && 
		isset($_REQUEST['email_com']) &&
		isset($_REQUEST['id']))
{
//Данные перед пердачей в MySQL надо экранировать
$name_team=		mysql_escape_string($_REQUEST['name_team']);
$last_name_com=	mysql_escape_string($_REQUEST['last_name_com']);
$name_com=		mysql_escape_string($_REQUEST['name_com']);
$name_com_2=	mysql_escape_string($_REQUEST['name_com_2']);
$mobile_phone=	mysql_escape_string($_REQUEST['mobile_phone']);
$home_phone=	mysql_escape_string($_REQUEST['home_phone']);
$email_com=		mysql_escape_string($_REQUEST['email_com']);
$id=			mysql_escape_string($_REQUEST['id']);



$result = mysql_query ("UPDATE anketa SET name_team='".$name_team."', last_name_com='".$last_name_com."', name_com='".$name_com."', name_com_2='".$name_com_2."', mobile_phone='".$mobile_phone."', home_phone='".$home_phone."', email_com='".$email_com."' WHERE id='".$id."'");

if ($result == 'true') {echo "<p>Ваша анкета обновлена</p>";}
else {echo "<p>Ваша анкета не обновлена!</p>";}


}		 
else 

{
echo "<p>Вы ввели не всю информацию, поэтому анкета в базе не может быть обновлена .</p>";
}
		 
	
		 
		 ?>                                                    
ЗДЕСЬ ИДЕТ html код	 
</body>
</html>
 
Пускай такой советчик идет лесом ... взяв с собой книгу по PHP5, и уяснив для себя, что register_globals по умолчанию везде отключен, и так никто не пишет

Хм, пишет тоже самое
Вы ввели не всю информацию, поэтому анкета в базе не может быть обновлена .

Может проблема не в обрабочике?
Вот файл редактирования. При переходе на него, выводится список всех анкет, находящихся в БД при нажатии тутже открывается окно редактирования, и потом внизу идёт кнопка "отправить" на тот файл "обрабочик" что ты написал

Код:
<?php 
include ("config.php");
if (isset($_GET['id'])) {$id = $_GET['id'];}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
тут html код
<?
if (!isset($id))

{

$result = mysql_query("SELECT name_team,id FROM anketa");
$myrow = mysql_fetch_array ($result);

do 
{
printf ("<p><a href='index.php?id=%s'>%s</a></p>",$myrow["id"],$myrow["name_team"]);
}

while ($myrow = mysql_fetch_array($result));

}
else
{
$result = mysql_query("SELECT * FROM anketa WHERE id=$id");
$myrow = mysql_fetch_array ($result);
print <<<HERE

<form name="form1" method="post" action="update_anketa.php">
         <p>
           <label>Название команды<br>
             <input value="$myrow[name_team]" type="text" name="name_team" id="name_team">
             </label>
         </p>
         <p>
           <label>Фамилия<br>
           <input value="$myrow[last_name_com]" type="text" name="last_name_com" id="last_name_com">
           </label>
         </p>
         <p>
           <label>Отчество<br>
           <input value="$myrow[name_com_2]" type="text" name="name_com_2" id="name_com_2">
           </label>
         </p>
        
		 <p>
           <label>Сотовый телефон <br>
           <input value="$myrow[mobile_phone]" type="text" name="mobile_phone" id="mobile_phone">
           </label>
         </p>
		 
		  <p>
           <label>Домашний телефон <br>
           <input value="$myrow[home_phone]" type="text" name="home_phone" id="home_phone">
           </label>
         </p>
		 
		  <p>
           <label>Электронная почта<br>
           <input value="$myrow[email_com]" type="text" name="email_com" id="email_com">
           </label>
         </p>
        
         
		 <input name="id" type="hidden" value="$myrow[id]">
		 
         <p>
           <label>
           <input type="submit" name="submit" id="submit" value="Сохранить изменения">
           </label>
         </p>
       </form>



HERE;


}


?>
 
глядя на ваш код, мне просто хочется плакать горючими слезами.
пожалуйста найдите книгу по современному PHP, и по хорошему стилю кода.
не работает, потому у вас из формы НЕ передается переменная name_com , но при этом вы пытаетесь писать ее в БД.
естественно что она не находится
PS есть еще такой древний способ отлавливания ошибок, как вывод переменных.
в данном случае в ветке условия, где идет наперекосяк пишем:
PHP:
echo '<pre>';
print_r($_REQUEST);
echo '</pre>';
и видим, что переменной name_com у нас нету
 
Вообщем вот мой файл добавления анкеты, переделал по принципу указанному выше, но вот ошибочка опять (переменные я поменял, так что на предуущие посты не смотрите)

Ошибка. Вы ввели не всю информацию. Пожалуста, вернитесь назад и заполните заявку правильно
вот код
PHP:
if (    isset($_REQUEST['name_team']) &&  
        isset($_REQUEST['last_name']) &&  
        isset($_REQUEST['name']) &&  
        isset($_REQUEST['name_2']) &&  
        isset($_REQUEST['mobile_phone']) &&  
        isset($_REQUEST['home_phone']) &&  
        isset($_REQUEST['email']) && 
        isset($_REQUEST['id'])) 
{ 
//Данные перед пердачей в MySQL надо экранировать 
$name_team    	=    mysql_escape_string($_REQUEST['name_team']); 
$last_name		=    mysql_escape_string($_REQUEST['last_name']); 
$name			=    mysql_escape_string($_REQUEST['name']); 
$name_2			=    mysql_escape_string($_REQUEST['name_2']); 
$mobile_phone	=    mysql_escape_string($_REQUEST['mobile_phone']); 
$home_phone		=    mysql_escape_string($_REQUEST['home_phone']); 
$email			=    mysql_escape_string($_REQUEST['email']); 
$id				=    mysql_escape_string($_REQUEST['id']); 

/* Здесь пишем что можно заносить информацию в базу */
$result = mysql_query ("INSERT INTO anketa (name_team,last_name,name,name_2,mobile_phone,home_phone,email) VALUES ('".$name_team."', '".$last_name."','".$name."','".$name_2."','".$mobile_phone."','".$home_phone."','".$email."')");


if ($result == 'true') {echo "<p>Спасибо. Ваша заявка принята</p>";}
else {echo "<p>Ошибка. Ваша заявка не принята</p>";}


}		 
else 

{
echo "<p>Ошибка. Вы ввели не всю информацию. Пожалуста, вернитесь назад и заполните заявку правильно</p>";
}
		 
		 
echo '<pre>'; 
print_r($_REQUEST); 
echo '</pre>';

где косяк?
 
Вот этот блок:
echo '<pre>';
print_r($_REQUEST);
echo '</pre>';
Что он сейчас выводит?
как бы без его содержимого трудно гадать на кофейной гуще
Подозреваю, что ошибка та же, что и в прошлый раз

И еще одно замечание.
Так, не правильно:
PHP:
if ($result == 'true') {echo "<p>Спасибо. Ваша заявка принята</p>";}
Правильно так:
PHP:
if ($result === TRUE) {echo "<p>Спасибо. Ваша заявка принята</p>";}
Выдержка из офф справки:
В остальных случаях, mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки
Советую перечитать офф-справку, раздел "Справочник языка"
В нем, много чего полезного по типам данных, операторам, и прочему
 
Вот этот блок:

Что он сейчас выводит?
как бы без его содержимого трудно гадать на кофейной гуще
Подозреваю, что ошибка та же, что и в прошлый раз

Вот чё выводит. Такое чувство что в банальном ошибка, а вот где..

Array
(
[name_team] => Команда Ивана
[last_name] => Иванов
[name] => Иван
[name_2] => Иванович
[mobile_phone] => 5845
[home_phone] => 4564464
=> 5454@yuaf.ru
[submit] => Отпавить заявку
[spylog_test] => 1
)[/QUOTE]
 
Жаль тут нету смайла со стеной.
Попробуй сам ответить на вопросы, не читая скрытый текст(он специально сделан фоновым цветом)
Что по твоему делает код?
echo '<pre>';
print_r($_REQUEST);
echo '</pre>';
Он выводит содержимое переменной/массива/etc...
Что он выводит в данном случае?
Он выводит содержимое суперглобального массива $_REQUEST, в котором лежат переменные получаемые из формы.
В каком случае происходит попадание в условие в котором выводится ошибка?
В случае, если нехватает какой-то переменной, получаемой из формы
Какую перменную из проверяемых мы не получили?
Методом простого сопоставления выяснем, что переменная $_REQUEST['id'] у нас отсутсвует, хотя мы проверяем ее наличие
Что делать,понятно?
Либо прописать в форме поле id, либо получить это значение из какого-либо другого места
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху