За последние 24 часа нас посетил 18431 программист и 1606 роботов. Сейчас ищет 941 программист ...

Проблемы со составлением sql запроса

Тема в разделе "PHP для новичков", создана пользователем Koka, 27 ноя 2011.

  1. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    Приветствую, форумчани!.
    Я начинающий(ну совсем начинающий :lol: ) php-программист и у меня возникла проблема при составлении запроса к бд.
    Принцип работы куска проекта, где у меня проблемы: На страничке два поля. Одно числовое, второе - с датой. Поля могут быть произвольными: пользователь имеет возможность вбить любое целое не минусовое число и любую дату. Каждому числу соответствует одна дата. Дата может уже быть в таблице, а может и не быть.

    Что я смог добиться:
    Вариант 1: Данные добавляются в таблицу, но не обновляются.
    Вариант 2: Данные добавляются в таблицу, но обновляются все поля и дата встает на все нули.
    Вариант 3: Ничего не работает.
    Собственно не один из трех вариантов мне по понятным причинам не подходит, сам проблему решить не могу(Да, доки читал, но понял не достаточно хорошо чтобы применить на практике) по-этому спрашиваю у вас.

    Заранее спасибо за помощь.
    NB:
    Страница с формой.
    PHP:
    1.  
    2. <?php
    3.  
    4.     ob_start("ob_gzhandler");
    5.  
    6.     require 'config.php';
    7.  
    8.     session_start();
    9.  
    10.    
    11.  
    12.     if (!empty($_GET['password']) == $add_admin_password)
    13.  
    14.     {
    15.  
    16.         echo "
    17.  
    18.             <center>
    19.  
    20.             <form method='post' action='restart.php'>
    21.  
    22.             <table>
    23.  
    24.             <tr><td>Введите количество смс:</td><td><input type='text' name='sms' value='' size='20' /><br></td></tr>
    25.  
    26.             <tr><td>Введите дату:</td><td><input type='date' name='smsdate' value='' size='20' /></td></tr>
    27.  
    28.             <tr><td><input type='hidden' name='add_admin_password' value='$add_admin_password' /></tr></td>
    29.  
    30.             <tr><td  colspan=2 align='center'><input type='submit' value='Обновить информацию' /></td><td></td></tr>
    31.  
    32.             </table>
    33.  
    34.             </form> </center>";
    35.  
    36. }
    37.  
    38.  
    39.  
    40. ?>
    41.  
    Страница restart.php:
    PHP:
    1. <?php  
    2.  
    3. require 'config.php';  
    4.  
    5.  
    6.  
    7. if(isset($_POST['sms'],$_POST['smsdate'],$_POST['add_admin_password'])&&$_POST['add_admin_password']==$add_admin_password)
    8.  
    9. {
    10.  
    11.  
    12.  
    13. $db = mysql_connect($server_db,$login_db,$pass_db) or die('mysql_connect '.mysql_error());
    14.  
    15. mysql_select_db($db_name) or die('mysql_select_db '.mysql_error());
    16.  
    17.  
    18. "INSERT INTO ".$table_name."_users
    19.  
    20. (sms,smsdate)
    21.  
    22. VALUES
    23.  
    24. ('".$_POST['sms']."','".$_POST['smsdate']."')") or die('select error:'.mysql_error());
    25.  
    26.  mysql_close($db) or die('mysql_close '.mysql_error());
    27.  
    28.  echo "<center><br>Количество смс за <strong>".$_POST['smsdate']."</strong> обновлено: <strong>".$_POST['sms']."</strong> шт.</center>";
    29.  
    30. }
    31. ?>
    32.  
    33.  
     
  2. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    Кстати моя версия решения задачи:
    Шаг 1: получаем данные в переменные.
    Шаг 2: проверяем есть ли в бд поле с текущим значением smsdate и если есть, то делаем UPDATE, а если нету - INSERT.
    Только как реализовать проверку на то есть ли уже такая инфа в бд я хз.
     
  3. tosanta

    tosanta Активный пользователь

    С нами с:
    29 июн 2011
    Сообщения:
    6
    Симпатии:
    0
    Реализовывается просто:
    (как пример, все зависит от того что нужно проверить)
    PHP:
    1.  <?php    
    2.  
    3.  require 'config.php';    
    4.  
    5.  
    6.  
    7.  if(isset($_POST['sms'],$_POST['smsdate'],$_POST['add_admin_password'])&&$_POST['add_admin_password']==$add_admin_password)
    8.  
    9.  {
    10.  
    11.   $db = mysql_connect($server_db,$login_db,$pass_db) or die('mysql_connect '.mysql_error());
    12.  
    13.   mysql_select_db($db_name) or die('mysql_select_db '.mysql_error());
    14.  
    15.   $result = mysql_query("SELECT * FROM ".$table_name."_users WHERE `smsdate` = '".$_POST['smsdate']."'"); //тут конечно возможно придется обработать дату, в зависимости в каком формате она у тебя предаставлена в базе
    16.  
    17.   if ($result != false) {
    18.     //здесь обновляем значение в таблице, т.к. оно уже есть
    19.   } else {
    20.     //здесь добавляем новую запись, т.к. его нет
    21.   }
    22.  
    23.  }
    24.  ?>
    Написал на скорую руку, по этому возможны и ошибки в проверке. Точно не помню что возвращает функция mysql_query в случае отсутствия записи.
    Кстати еще советовал бы тебе проверять форму, точнее поля для ввода. Защита прежде всего.
     
  4. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    Есть информация об этой дате в бд или нет.

    В данном случае нет - функционал проекта поставлен таким образом, что получение взломщика даже полного контроля над всем и вся - глубоко фиолетово. :p


    Кстати у товарища из соседней(http://www.php.ru/forum/viewtopic.php?t=36759) темы в форме запроса был такой забавный ништячек(выделен ниже) без которого всё не хотело работать:
    Код (Text):
    1. <input name="fio" type="text" size="15" [забавный_ништячек]id="fio"[/забавный_ништячек]>
    Никак не могу понять что это за id? Просветит может кто?
     
  5. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  6. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    2tommyangelo,
    а! так вот о чем речь!

    И в таблице нужно под него выделить поле? Или это тот, который задается после полей в выноске "Индекс"? (типа там где примари и тд).
    и если это он - с чем мне его связать? походу с smsdate? (тут выбор не велик - либо смс, либо смсдейт)
     
  7. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Koka
    id в базе данных обычно не имеет ничего общего с атрибутом id разметки. Но можешь привязать и к id базы.

    Совет - сначала выучи html+css, а только потом php

    для сайтов html первичен, так как именно его выводит браузер. php - вторичен.
     
  8. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    я весьма не плохо знаю html+css.
    для меня пришло время именно php.

    всмысле? можно пример кода этой самой привязки? а то я не очень понял о чем ты.
     
  9. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    никак не согласуются с отсутствием знания что такое id

    Это я не понял, что ты имел в виду под
    Честно скажу - мне лень вдумываться в чужие проблемы. Изначально в этой теме только ответил на вопрос, что такое id
     
  10. Koka

    Koka Активный пользователь

    С нами с:
    27 ноя 2011
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    localhost
    я не знал о том, что id можно так использовать и подумал, что это какое-то из особых свойств <form></form>. (да, каюсь, дико затупил).