За последние 24 часа нас посетили 17426 программистов и 1683 робота. Сейчас ищут 1010 программистов ...

опять не получается с обновлением БД

Тема в разделе "PHP для новичков", создана пользователем writer, 8 дек 2012.

  1. writer

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

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    есть опрос
    в БД выгядит так
    id---name---plus---minus---localsfere
    1 ---dfdfd---0---1---929

    Код (PHP):
    1. include('connect.php');
    2. mysql_query("SET NAMES 'cp1251'");
    3. mysql_query("SET CHARACTER SET 'cp1251'");
    4. $sql = "UPDATE `opros` SET `plus` = '".$plus."',`minus` = '".$minus."',`name` = '".$name."',`localsfere` = '".$localsfere."' WHERE `id` = '".$did."'"; 
    вот запрос на редактирвание

    Код (PHP):
    1. $localsfere=929;
    2. $sql_data['name']='';
    3. $sql_data['id']='';
    4. $sql_data['plus']='';
    5. $sql_data['minus']='';
    6. $sql_data2 = mysql_query("SELECT * FROM `opros` WHERE localsfere='$localsfere'");
    7.     $sql_data0 = mysql_num_rows($sql_data2);
    8.     for ($i=1; $i <=$sql_data0; $i++) {
    9. $sql_data = mysql_fetch_assoc($sql_data2);
    10. $sql_data['name'].=$sql_data['name'];
    11. $sql_data['plus'].=$sql_data['plus'];
    12. $sql_data['minus'].=$sql_data['minus'];
    13. $sql_data['id'].=$sql_data['id'];
    14. echo '<div class="success"><form action="user.php?id='.$_SESSION['id'].'" method="POST">'.$sql_data['name'].'</br><input type="radio" name="plus" value="0">Нет
    15.  <input type="radio" name="plus" value="1" >Да<input style="margin-left:20px;" type="submit"></form></div>';
    16.  
    17. }    
    18. $minus=$sql_data['minus'];$plus=$sql_data['plus'];
    19. if(isset($_POST['plus'])){$plus=$_POST['plus'];}else{$_POST['plus']='';$plus='';}
    20. if($_POST['plus']==0){$plus;$minus=$minus+1;}
    21. elseif($_POST['plus']==1){$plus=$plus+1;$minus;}else{$plus;$minus;}
    22. $name=$sql_data['name'];
    23. $did=$sql_data['id']; 
    вот сам обработчик
    в нем получение вопроса,ответа,скидывает в эот же файл на обработку,занесение их в переменные и в запрос на редактирование.
    По какой то приине не проходит...не могу понять почему

    Код (PHP):
    1. UPDATE `opros` SET `id`=[value-1],`name`=[value-2],`plus`=[value-3],`minus`=[value-4],`localsfere`=[value-5] WHERE 1
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Непонятно по какой причине он могу бы пройти.
    Вот последний фрагмент как следует понимать, это псевдокод какой-то или буквально так выглядит твой запрос?
    SET `id`=[value-1] — если ты так подствляешь переменные из PHP, то оно не работает.
    По сути своей, даже если исправить синтаксис, этот запрос говно. Он что, реально должен заменить данные во всех строках таблицы на одно и то же значение? В том числе id должен попытаться сделать у всех одинаковым — вообще-то обычно нормальные люди называют словом id уникальный первичный ключ.

    Кажется ты взял чей-то чужой рабочий код и пытаешся его испортить. Это печально.
     
  3. writer

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

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    последняя часть кода это чистый SQL из БД.надо смотреть первый 2 кода. они все мои и я не переписывал ни у кого.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    В общем, если хочешь помощи, объясни пожалуйста простыми словами что твой скрипт должен делать.
    Если не сможешь внятно объяснить, значит рано еще кодировать.

    Добавлено спустя 32 секунды:
    это ошибочный SQL, нерабочий и непонятный
     
  5. writer

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

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    мне нужно обновить БД с занесением результатов голосования в нее.

    Код (PHP):
    1. $localsfere=929;//Получение запроса.Он у меня пока что один поэтому поставил физически его
    2. $sql_data['name']='';//выносим из цикла имя впороса
    3. $sql_data['id']='';//выносим из цикла id вопроса
    4. $sql_data['plus']='';//выносим положительные ответы
    5. $sql_data['minus']='';//отрицательные ответы
    6.  
    7. //получаем нужный вопрос.в последующем будет рандом
    8. $sql_data2 = mysql_query("SELECT * FROM `opros` WHERE localsfere='$localsfere'");
    9.     $sql_data0 = mysql_num_rows($sql_data2);
    10.     for ($i=1; $i <=$sql_data0; $i++) {
    11. $sql_data = mysql_fetch_assoc($sql_data2);
    12. $sql_data['name'].=$sql_data['name'];
    13. $sql_data['plus'].=$sql_data['plus'];
    14. $sql_data['minus'].=$sql_data['minus'];
    15. $sql_data['id'].=$sql_data['id'];
    16.  
    17. //полчили все переменные и вынесли вне цикла
    18. echo '<div class="success"><form action="user.php?id='.$_SESSION['id'].'" method="POST">'.$sql_data['name'].'</br><input type="radio" name="plus" value="0">Нет
    19.  <input type="radio" name="plus" value="1" >Да<input style="margin-left:20px;" type="submit"></form></div>';
    20. //построение формы отправки 
    21. }    
    22. $minus=$sql_data['minus'];$plus=$sql_data['plus'];//присвоение переменным значений
    23. if(isset($_POST['plus'])){$plus=$_POST['plus'];}else{$_POST['plus']='';$plus='';}
    24. //если переменная существует то присваеваем то что пришло уже после голосования иначе они так и остаются
    25. if($_POST['plus']==0){$plus;$minus=$minus+1;}
    26. //если пришло значение 0 - ответ НЕТ,то плюс неизменен а к минусу прибавляем 1
    27. elseif($_POST['plus']==1){$plus=$plus+1;$minus;}//или обратное действие
    28. else{$plus;$minus;}//иначе все неизменно
    29.  
    30. $name=$sql_data['name'];
    31. $did=$sql_data['id'];//на пропожарный переименовал
    32.  
    33. include('connect.php');//подключаю соединение с БД
    34. mysql_query("SET NAMES 'cp1251'");
    35. mysql_query("SET CHARACTER SET 'cp1251'");//принудительная кодировка
    36. $sql = "UPDATE `opros` SET `plus` = '".$plus."',`minus` = '".$minus."',`name` = '".$name."',`localsfere` = '".$localsfere."' WHERE `id` = '".$did."'";
    37.  
    38. //запрос не проходит
    39.  
    вот полный код

    как это может быть ошибочным запросом когда сама БД его сгенерировала?
    я оставил его здесь чтобы картина была как можно понятнее
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    1. А поподробнее, как ты добыл тот текст, который "база сгнерерировала"?

    2. Отступы в коде ставь нормально. Цикл for не видно где и что.

    3. Что должна делать вот эта конструкция? Я думаю ты не понимаешь, поэтому оно не может работать.
    Код (PHP):
    1. $sql_data['id'].=$sql_data['id'] 
    4. Твой код и читает из таблицы opros и пишет в нее. Так вот, непонятно как ты разделяешь эти две операции. Пишешь всегда чтоли? Надо условие типа if ($_SERVER['REQUEST_METHOD'] == 'POST') {проверим данные и запишем} или еще как.

    5. Было бы логично если бы условие WHERE и для SELECT и для UPDATE были бы одинаковыми. Например по id фильтровались бы.

    Короче с пониманием задачи есть проблемы.
    В общем я не верю, что это судно когда-нибудь поплывет ©
     
  7. writer

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

    С нами с:
    17 авг 2012
    Сообщения:
    131
    Симпатии:
    0
    1-в phpmuadmin заходишь в таблицу и там есть вкладка SQL в ней надо нажать UPDADE или другой запрос и она покажет как надо обращаться к ней.
    2-ну отступы ладно.
    3-так выносятся данные из цикла чтобы с ними работать вне его.таким запросом можно допустим делать как я раньше массивы данных.допустим запись массива в файл.она работает это 100%.
    4-эти 2 кода никак не связаны друг с другом и конфликта между ними быть не может.фильтровать и делать с одинаковыми id никак иначе человек будет отвечать на один и тот же вопрос а у меня будет выгружать рандомный вопрос и записывать в БД данные из предыдущего.

    все работает правильно если я буду записывать в файл.это проверял.Пишет все на ура.ошибка где то с занесением в БД.

    Ошибку нашел но не знаю из-за нее или нет. пока писал понял что данный во второй запрос из первого беру...ну пока у меня один вопрос это не критично.все равно должны данные одновлятся

    Добавлено спустя 26 минут 36 секунд:
    никто не поможет???
    Код (PHP):
    1. $localsfere=929;
    2. $sql_data['name']='';
    3. $sql_data['id']='';
    4. $sql_data['plus']='';
    5. $sql_data['minus']='';
    6. $sql_data2 = mysql_query("SELECT * FROM `opros` WHERE localsfere='$localsfere'");
    7.     $sql_data0 = mysql_num_rows($sql_data2);
    8.     for ($i=1; $i <=$sql_data0; $i++) {
    9. $sql_data = mysql_fetch_assoc($sql_data2);
    10. $sql_data['name'].=$sql_data['name'];
    11. $sql_data['plus'].=$sql_data['plus'];
    12. $sql_data['minus'].=$sql_data['minus'];
    13. $sql_data['id'].=$sql_data['id'];
    14. echo '<div class="success"><form action="user.php?id='.$_SESSION['id'].'" method="POST">'.$sql_data['name'].'</br><input type="radio" name="plus" value="0">Нет
    15. <input type="radio" name="plus" value="1" >Да
    16. <input type="hidden" name="id" value="'.$sql_data['id'].'" ></input> 
    17. <input type="hidden" name="name" value="'.$sql_data['name'].'" ></input>
    18. <input type="hidden" name="localsfere" value="'.$sql_data['localsfere'].'" ></input>
    19.   <input style="margin-left:20px;" type="submit"></form></div>';
    20. }    
    21. $minus=$_POST['minus'];$plus=$_POST['plus'];
    22. if(isset($_POST['plus'])){$plus=$_POST['plus'];}else{$_POST['plus']='';$plus='';}
    23. if($_POST['plus']==0){$plus;$minus=$minus+1;}
    24. elseif($_POST['plus']==1){$plus=$plus+1;$minus;}else{$plus;$minus;}
    25. $name=$_POST['name'];
    26. $id=$_POST['id'];
    27. $localsfere=$_POST['localsfere'];
    28.  
    29. include('connect.php');
    30. mysql_query("SET NAMES 'cp1251'");
    31. mysql_query("SET CHARACTER SET 'cp1251'");
    32. $sql = "UPDATE `opros` SET `plus` = '".$plus."',`minus` = '".$minus."',`name` = '".$name."',`localsfere` = '".$localsfere."' WHERE `id` = '".$id."'";
    33.  
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    я пытался помочь, но не могу. ты провалился по всем пунктам. формально просишь помощи, а реально пытаешся отбрехаться, что и так мол всё хорошо, сами с усами.
    удачи!
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    артудету идёт на тёмную сторону