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

Тема в разделе "PHP", создана пользователем Braniack, 11 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Braniack

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45
    Вообщем нужно следлать реализацию обновления анкеты.
    Имеется 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 редактировать анкету. Он пишет
    В чём проблема?
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    во-первых, рискну предположить, что вы передаете в этот файл данные методом GET, а надо POST.
    Во-вторых, что это за ужас, и в чем его смысл?
    register_globals обычно, по умолчанию отключен, и необходимости в таких конструкциях просто нет.
    почему бы не использовать в необходимом метсте сразу суперглобальные переменные необходимые
     
  3. Braniack

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45
    Alternator мне советовали так делать...

    Не можешь тада набрасть код/изменить мой как нада сделать?
    Суть состоит в том, чтоб просто обновить данные в таблице.
     
  4. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    Пускай такой советчик идет лесом ... взяв с собой книгу по 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>
     
  5. Braniack

    Braniack

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

    Код:
    <?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;
    
    
    }
    
    
    ?>
     
  6. Alternator

    Alternator

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

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45
    Вообщем вот мой файл добавления анкеты, переделал по принципу указанному выше, но вот ошибочка опять (переменные я поменял, так что на предуущие посты не смотрите)

    вот код
    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>'
    где косяк?
     
  8. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    Вот этот блок:
    Что он сейчас выводит?
    как бы без его содержимого трудно гадать на кофейной гуще
    Подозреваю, что ошибка та же, что и в прошлый раз

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

    Braniack

    Регистр.:
    25 май 2008
    Сообщения:
    160
    Симпатии:
    45
    Вот чё выводит. Такое чувство что в банальном ошибка, а вот где..

     
  10. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    Жаль тут нету смайла со стеной.
    Попробуй сам ответить на вопросы, не читая скрытый текст(он специально сделан фоновым цветом)
    Что по твоему делает код?
    Он выводит содержимое переменной/массива/etc...
    Что он выводит в данном случае?
    Он выводит содержимое суперглобального массива $_REQUEST, в котором лежат переменные получаемые из формы.
    В каком случае происходит попадание в условие в котором выводится ошибка?
    В случае, если нехватает какой-то переменной, получаемой из формы
    Какую перменную из проверяемых мы не получили?
    Методом простого сопоставления выяснем, что переменная $_REQUEST['id'] у нас отсутсвует, хотя мы проверяем ее наличие
    Что делать,понятно?
    Либо прописать в форме поле id, либо получить это значение из какого-либо другого места
     
    Braniack нравится это.
Статус темы:
Закрыта.