Получаю из формы н-ное кол-во переменных. Формирую строки для вставки в SQL-запрос (MySQL): Код (Text): $stroka1=""; foreach ($_POST as $key=>$value) $stroka1=$stroka1.",".$key; $stroka1=substr($stroka1,1,strlen($stroka1)-4); $stroka2=""; foreach ($_POST as $key=>$value) $stroka2=$stroka2.","."'"."$".$key."'"; $stroka2=substr($stroka2,1,strlen($stroka2)-7); и формирую запрос: $query = "INSERT INTO $db_table ($stroka1) VALUES ($stroka2)"; Вроде бы все хорошо, только в базу ложаться не значения перменных, а их имена (типа $value1, $value2 и т.д.). Что не так сделал?
вообще по идее нужно в кавычках передовать имена переменных. Пробуй -\"$stroka2\". И зачем ты передаешь $stroka1 перед VALUES?? Может стоит VALUES (\"stroka1\", \"stroka2\")
Почему люди не умеют отлаживать.... Простое print $query; могло бы снять лишние вопросы. И еще надо не только закавычивать строку, но и закавычивать все что внутри переменной - mysql_escape_string($stroka2)
Ничего не получается. Причем вывел Код (Text): print $query = "INSERT INTO $db_table ($stroka1) VALUES ($stroka2)"; и ошибок не нашел. Вставил вместо Код (Text): mysql_query("$query") or die(mysql_error()); то, что мне вывел print и скрипт отработал нормально...
Из этого запроса получается, что в таблицу - $db_table (это не переменная, а именно имя таблицы), в поле $stroka1 (тоже так называется поле), записывается значение $stroka2. Ничего не смущает? Как у тебя называется таблица и имя поля?
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, а не ее значение... Блин...
Так и надо писать в запросе 'testova stroka', а не '$dopoln'. Вот как у тебя запрос написан, так он и записывается. Т.е. в базу пишется то, что между кавычками.
Ну так а если я пишу вот так как выводит print в самом скрипте (т.е. не генерю строки 1 и 2, а жестко их прописываю), то в таблицу попадают значения переменных. Почему??? Как должна выглядеть строка запроса, чтобы в базу попали значения, а не имена переменных....
Почему значения переменных должны попасть в MySQL? Выполни этот запрос, например, через phpMyAdmin. Что введется в БД?
Это уже SQL-запрос, а котором передаешь СТРОКИ '$marka', '$model' и т.д. MySQL ничего не знает о значения переменных PHP.
Я запутался уже. Чем отличается $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'"; и при этом второй запрос делает то, что надо, а первый - нет?
Какая разница. Это же у тебя уже строка и в ней уже не обрабатываются переменные. Как она выводится через print так и будет вводиться в БД. Сначала разберись, что такое переменная и что такое значение переменной. А так же, чем отличается формирование строки в скрипте с использованием переменных от значения этой строки. Кстати, а если в примере заменю на $b='$a';, то что выведется?
Ладно, сдаюсь. Ничего не могу поделать, хотя чувствую, что все элементарно просто. Перефразирую вопрос: я получаю из формы неопределенное количество данных в массиве $_POST. Как мне занести эти данные в таблицу БД MySQL?
Правильно составить SQL-запрос. Еще раз повтрорюсь, то что выводится по print $query, скопируй и вставь в phpMyAdmin. И выполни этот запрос.
Я понимаю, что его надо правильно составить. Я понимаю, что неправильно его пишу. Или вообще неправильно подхожу к тому, как получить конечный результат. Но поэтому-то сюда и пишу. Неужто я спрашиваю что-то супер сложное? Скопировал и вставил. Произошло то же самое, что мне нафиг не нужно. И что? Я уже перечитал все, что у меня есть. Нигде даже упоминания про это нет. Уж думаю UPDATE использовать, что ли? Или какой-нибудь финт типа записи в файл, а потом перенос в таблицу... Только это уж точно будут трусы через голову...
Может случиться так, что нужно будет вставлять только в поле marka, а может и еще в 20 полей. И как тогда поступить?
Речь не о том сколько полей, а о том, что в базу данных заносится то, что стоит после VALUES. Если в MySQL передается VALUES ('$marka'), то и запишется $marka, а если передается VALUES ('volvo'), то и запишется volvo
Все уже. Помогли в другом месте (тем не менее спасибо): Код (Text): $int=""; $val=""; $field_names = array(); $res = mysql_query("SHOW COLUMNS FROM `$db_table`"); for($i=0;$i<mysql_num_rows($res);$i++) { array_push($field_names,mysql_result($res, $i)); } foreach($field_names as $v) { $int.="`$v`,"; if(!empty($_POST[$v])) $val.="'$_POST[$v]',"; else $val.="'',"; } $query="INSERT INTO $db_table (".substr($int,0,-1).") VALUES(".substr($val,0,-1).");"; mysql_query ("$query"); P.S. То, что мне здесь написали, я понимал и так. Наверное неверно задаю вопросы...
Например, заносится только одно значение в БД - marka. По твоему коду формируется запрос к БД Код (Text): INSERT INTO auto (marka) VALUES ('$marka') а нужно Код (Text): INSERT INTO auto (marka) VALUES ('volvo') Если ты не видишь в этих двух запросах разницы, то я не смогу больше объяснить в чем у тебя ошибка.