За последние 24 часа нас посетили 18003 программиста и 1700 роботов. Сейчас ищет 1481 программист ...

Занесение данных в базу - происходит ерунда...

Тема в разделе "PHP и базы данных", создана пользователем Laroux, 12 июн 2006.

  1. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Получаю из формы н-ное кол-во переменных. Формирую строки для вставки в SQL-запрос (MySQL):
    Код (Text):
    1. $stroka1="";
    2. foreach ($_POST as $key=>$value)
    3. $stroka1=$stroka1.",".$key;
    4. $stroka1=substr($stroka1,1,strlen($stroka1)-4);
    5.  
    6. $stroka2="";
    7. foreach ($_POST as $key=>$value)
    8. $stroka2=$stroka2.","."'"."$".$key."'";
    9. $stroka2=substr($stroka2,1,strlen($stroka2)-7);
    и формирую запрос:

    $query = "INSERT INTO $db_table ($stroka1) VALUES ($stroka2)";


    Вроде бы все хорошо, только в базу ложаться не значения перменных, а их имена (типа $value1, $value2 и т.д.). Что не так сделал?
     
  2. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Может как-то проще можно действовать?
    Однако вопрос остается...
     
  3. Typhon

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

    С нами с:
    27 мар 2006
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Deeptown
    вообще по идее нужно в кавычках передовать имена переменных. Пробуй -\"$stroka2\". И зачем ты передаешь $stroka1 перед VALUES??
    Может стоит VALUES (\"stroka1\", \"stroka2\")
     
  4. Mavir

    Mavir Guest

    Почему люди не умеют отлаживать.... Простое print $query; могло бы снять лишние вопросы.
    И еще надо не только закавычивать строку, но и закавычивать все что внутри переменной - mysql_escape_string($stroka2)
     
  5. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Ничего не получается. Причем вывел
    Код (Text):
    1. print $query = "INSERT INTO $db_table ($stroka1) VALUES ($stroka2)";
    и ошибок не нашел. Вставил вместо
    Код (Text):
    1. mysql_query("$query") or die(mysql_error());
    то, что мне вывел print и скрипт отработал нормально...
     
  6. Mavir

    Mavir Guest

    Из этого запроса получается, что в таблицу - $db_table (это не переменная, а именно имя таблицы), в поле $stroka1 (тоже так называется поле), записывается значение $stroka2. Ничего не смущает?
    Как у тебя называется таблица и имя поля?
     
  7. Mavir

    Mavir Guest

    Покажи, что выводит
    Код (Text):
    1. print $query;
     
  8. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    INSERT INTO auto (marka,model,color,kuzov,vin,privod,god,probeg,engine,objem,tlc,price,valuta,navig,parktr,firemirror,ptfary,stereo,electropaket,dopoln,foto,namev,region,raion,nas_punkt,telefon,email) VALUES ('$marka','$model','$color','$kuzov','$vin','$privod','$god','$probeg','$engine','$objem','$tlc','$price','$valuta','$navig','$parktr','$firemirror','$ptfary','$stereo','$electropaket','$dopoln','$foto','$namev','$region','$raion','$nas_punkt','$telefon','$email')

    и вместо значения, например, $dopoln=testova stroka в базу залезает именно строка $dopoln, а не ее значение... Блин...
     
  9. Mavir

    Mavir Guest

    Так и надо писать в запросе 'testova stroka', а не '$dopoln'. Вот как у тебя запрос написан, так он и записывается. Т.е. в базу пишется то, что между кавычками.
     
  10. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Ну так а если я пишу вот так как выводит print в самом скрипте (т.е. не генерю строки 1 и 2, а жестко их прописываю), то в таблицу попадают значения переменных. Почему???
    Как должна выглядеть строка запроса, чтобы в базу попали значения, а не имена переменных....
     
  11. Mavir

    Mavir Guest

    Почему значения переменных должны попасть в MySQL? Выполни этот запрос, например, через phpMyAdmin. Что введется в БД?
     
  12. Mavir

    Mavir Guest

    Это уже SQL-запрос, а котором передаешь СТРОКИ '$marka', '$model' и т.д. MySQL ничего не знает о значения переменных PHP.
     
  13. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Я запутался уже.
    Чем отличается $query = "INSERT INTO $db_table ($stroka1) VALUES ($stroka2)"; от $query = "INSERT INTO $db_table (marka,model,color) VALUES ('$marka','$model','$color')";, если $stroka1="marka,model,color";, а $stroka2="'$marka','$model','$color'"; и при этом второй запрос делает то, что надо, а первый - нет?
     
  14. Mavir

    Mavir Guest

    Вопрос: что выведет print?
    PHP:
    1. <?
    2. $a=5;
    3. $b="\$a";
    4. print $b;
    5. ?>
     
  15. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    понятно что $a, но у меня же слешей нет...
     
  16. Mavir

    Mavir Guest

    Какая разница. Это же у тебя уже строка и в ней уже не обрабатываются переменные. Как она выводится через print так и будет вводиться в БД. Сначала разберись, что такое переменная и что такое значение переменной. А так же, чем отличается формирование строки в скрипте с использованием переменных от значения этой строки.

    Кстати, а если в примере заменю на $b='$a';, то что выведется? ;)
     
  17. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Ладно, сдаюсь. Ничего не могу поделать, хотя чувствую, что все элементарно просто.
    Перефразирую вопрос: я получаю из формы неопределенное количество данных в массиве $_POST. Как мне занести эти данные в таблицу БД MySQL?
     
  18. Mavir

    Mavir Guest

    Правильно составить SQL-запрос. Еще раз повтрорюсь, то что выводится по print $query, скопируй и вставь в phpMyAdmin. И выполни этот запрос.
     
  19. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Я понимаю, что его надо правильно составить. Я понимаю, что неправильно его пишу. Или вообще неправильно подхожу к тому, как получить конечный результат. Но поэтому-то сюда и пишу. Неужто я спрашиваю что-то супер сложное?

    Скопировал и вставил. Произошло то же самое, что мне нафиг не нужно. И что?

    Я уже перечитал все, что у меня есть. Нигде даже упоминания про это нет.
    Уж думаю UPDATE использовать, что ли? Или какой-нибудь финт типа записи в файл, а потом перенос в таблицу... Только это уж точно будут трусы через голову...
     
  20. Mavir

    Mavir Guest

    А не кажется, что запрос должен быть такого вида
    INSERT INTO auto (marka) VALUES ('volvo')?
     
  21. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Может случиться так, что нужно будет вставлять только в поле marka, а может и еще в 20 полей. И как тогда поступить?
     
  22. Mavir

    Mavir Guest

    Речь не о том сколько полей, а о том, что в базу данных заносится то, что стоит после VALUES. Если в MySQL передается VALUES ('$marka'), то и запишется $marka, а если передается VALUES ('volvo'), то и запишется volvo
     
  23. Laroux

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

    С нами с:
    28 май 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Краснодар
    Все уже. Помогли в другом месте (тем не менее спасибо):
    Код (Text):
    1.  
    2. $int="";
    3. $val="";
    4.  
    5. $field_names = array();
    6.  
    7. $res = mysql_query("SHOW COLUMNS FROM `$db_table`");
    8. for($i=0;$i<mysql_num_rows($res);$i++)
    9. {
    10. array_push($field_names,mysql_result($res, $i));
    11. }
    12. foreach($field_names as $v)
    13. {
    14. $int.="`$v`,";
    15. if(!empty($_POST[$v]))
    16. $val.="'$_POST[$v]',";
    17. else
    18. $val.="'',";
    19. }
    20. $query="INSERT INTO $db_table (".substr($int,0,-1).") VALUES(".substr($val,0,-1).");";
    21. mysql_query ("$query");
    P.S. То, что мне здесь написали, я понимал и так. Наверное неверно задаю вопросы...
     
  24. Mavir

    Mavir Guest

    Например, заносится только одно значение в БД - marka. По твоему коду формируется запрос к БД
    Код (Text):
    1. INSERT INTO auto (marka) VALUES ('$marka')
    а нужно
    Код (Text):
    1. INSERT INTO auto (marka) VALUES ('volvo')
    Если ты не видишь в этих двух запросах разницы, то я не смогу больше объяснить в чем у тебя ошибка.
     
  25. Mavir

    Mavir Guest

    Нет, ты не понимал формат SQL-запроса, думаю и сейчас не понял. :)