Добрый день. Написал небольшой скрипт для изменения данных базы сайта, а он выдает ошибку, как не круче, как не изменяю код, ошибку убрать не могу - PHP: <?PHP $conn = mysql_connect ("localhost:3306", "*****", "*****") or die ("Соединение не установлено!"); mysql_select_db ("*****", $conn); mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); $sql = 'SELECT * FROM `dle_post` WHERE `short_story` LIKE "%http%" AND `autor` LIKE "wolf"'; $result = mysql_query($sql); for ($j=1;$j<208;$j++) { $rw = mysql_fetch_array($result, MYSQL_BOTH); echo "id={$rw['id']}"; while ($i=strpos($rw['short_story'],"http")) { $k=strpos($rw['short_story'],"<br",$i); $rw['short_story']=substr($rw['short_story'],0,$i).substr($rw['short_story'],$k); } $sql=" UPDATE `dle_post` SET `short_story` = '".$rw[short_story]."' WHERE `dle_post`.`id` =".$rw[id]; if (mysql_query ($sql)) echo (" Занесено в базу<br>"); else echo ("Invalid query: " . mysql_error()); } ?> Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home2/wolfston/public_html/runcib.ru/nolink.php on line 20 20 строку переписывал раз 10, менял " на ' , переносил переменные внутрь, выносил за скобки, окружал их фигурными скобками, не помогает :cry:[/php]
$k=strpost($rw['short_story'],"<br",$i); <br> и концовка разве можно так делать.... $sql на 20-й строке ... какае-то...
PHP: <?php $conn = mysql_connect ("localhost:3306", "*****", "*****") or die ("Соединение не установлено!"); mysql_select_db ("*****", $conn); mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); $sql = 'SELECT * FROM `dle_post` WHERE `short_story` LIKE "%http%" AND `autor` LIKE "wolf" LIMIT 208'; $result = mysql_query($sql); while ($rw = mysql_fetch_array($result)) { if ( strpos($rw['short_story'], 'http')!==false) { $k=strpost($rw['short_story'],"<br",$i); $rw['short_story']=substr($rw['short_story'],0,$i).substr($rw['short_story'],$k); $sql=" UPDATE `dle_post` SET `short_story` = '".$rw['short_story']."' WHERE `dle_post`.`id` =".$rw['id']; if (mysql_query ($sql)) echo (" Занесено в базу<br>"); else echo ("Invalid query: " . mysql_error()); } } на мой взгляд это должно выглядеть както так
alexeurodnepr BR бывают такие <br> и такие <br />, но ваше замечание не втему. Frozen спасибо за попытку оптимизировать программу путем ее уродства и приведения ее в неробочий вариант, мне нужна помощь только по одной строке, а вы на досуге подумайте, где в том что вы написали присваивается значение переменной $i и как ваш код отреагирует если в в переменной $rw['short_story'] будет 2 или больше строчек начинающихся http? Ребята, мне не надо оптимизировать код, который я буду один раз запускать, не надо пытаться менять алгоритм, смысл которого вам не понятен, мне нужна всего лишь помощь в ошибке. Такое впечатление что в этом разделе для нубов сидят одни нубы, и не кто не может помочь с проблемой, видимо надо было постить в другой раздел.
DukeNukem вызывающе, но пока по делу. в какой строчке говорит ошибку сейчас и что за функция strpost? ты что-то не показал и заставляешь нас гадать.
там опечатка, имелась в виду функция strpos ошибка в 20 строке, как я не менял формат этой строки, ошибка не менялась
Только что проверил, работает, по всей видимости проблема была у хостера, судя по новостям они вчера сервак переносили, и видимо php криво работал сейчас эта ошибка не выпадает
DukeNukem, проблема была не на серваке, а у ВАС В КОДЕ !!! PHP: <?php $rw['short_story'] = "Тест"; $rw['id'] = 5; $sql="UPDATE `dle_post` SET `short_story` = '$rw['short_story']' WHERE `dle_post`.`id` =$rw['id']"; echo $sql; ?> Выведет ошибку Просто интерпретатор запутался в апостофах !!! С самого начала в вашем коде, опубликованном здесь, было другое сообщение об ошибке!!! А в показанном коде флоппик еще в первом ответе описал проблему в строке !!!
PHP: <?PHP $conn = mysql_connect ("localhost:3306", "******", "******") or die ("Соединение не установлено!"); mysql_select_db ("*****", $conn); mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); $sql = 'SELECT * FROM `dle_post` WHERE `short_story` LIKE "%http%" AND `autor` LIKE "wolf"'; $result = mysql_query($sql); for ($j=1;$j<208;$j++) { $rw = mysql_fetch_array($result, MYSQL_BOTH); echo "id={$rw['id']}"; while ($i=strpos($rw['short_story'],"http")) { $k=strpos($rw['short_story'],"<br",$i); if ($k>0) $rw['short_story']=substr($rw['short_story'],0,$i).substr($rw['short_story'],$k); else $rw['short_story']=substr($rw['short_story'],0,$i); } $sql=" UPDATE `dle_post` SET `short_story` = '".$rw[short_story]."' WHERE `dle_post`.`id` =".$rw[id]; if (mysql_query ($sql)) echo (" Занесено в базу<br>"); else echo ("Invalid query: " . mysql_error()); } ?> Вот вобщемто скрипт который уже отработал и выполнил то ради чего задумывался, учитывая что строка на которую ругался php не изменилась, так и хочется кинуть чемто тяжолым в своего хостера Вобщем мораль сей басни такова - видимо, если не можешь найти ошибку, особенно в случае ее отсутствия, нужно попробывать на другой версии php
unicross специально для вас напишу, прежде чем написать сюда я эту строку писал так - PHP: $sql=" UPDATE `dle_post` SET `short_story` = '".$rw['short_story']."' WHERE `dle_post`.`id` =".$rw['id']; и так PHP: $sql=" UPDATE `dle_post` SET `short_story` = '{$rw['short_story']}' WHERE `dle_post`.`id` ={$rw['id']}"; и так PHP: $sql=' UPDATE `dle_post` SET `short_story` = "'.$rw['short_story'].'" WHERE `dle_post`.`id` ='.$rw['id']; и еще многими другими способами и каждый раз была одна и таже ошибка. У меня уже мозги плавились, но результат не менялся, так что виноват интерпритатор php
Вы уж изаините его. Он просто слегка прихуел от вашего интеллекта, вот так и получилось. Он нечаянно, правда...
DukeNukem, объясните мне глупому ПОЧЕМУ эта строка до сих пор выглядет так: Нашли чем гордиться. Написали с ошибкой и вините PHP во всем... После изменений загружать файл на сайт по FTP не пробовали??? :wink:
Код (Text): $sql=" UPDATE `dle_post` SET `short_story` = '".$rw[short_story]."' WHERE `dle_post`.`id` =".$rw[id]; Потому что, если не ошибаюсь синтаксис PHP это допускает. Хз, вначале загружал через файл менеджер с-панели, сегодня через фтп, это что имеет значение? А вобще, скрипт отработал, данный вопрос уже значения не имеет, разве что чисто риторическое
Ошибаетесь... Привыкли работать с отключенными предупреждениями... PHP: <?php error_reporting(E_ALL); $rw['short_story'] = "Тест"; $rw['id'] = 5; $sql="UPDATE `dle_post` SET `short_story` = '" . $rw[short_story] . "' WHERE `dle_post`.`id` =" . $rw[id]; echo $sql; ?> Выведет: Код (Text): Notice: Use of undefined constant short_story - assumed 'short_story' in C:\Apache\htdocs\test.php on line 5 Notice: Use of undefined constant id - assumed 'id' in C:\Apache\htdocs\test.php on line 5 Важно чтобы новый файл попал на сервер... У вас он не обновлялся...
Думаю обновлялся, я его сегодня слил по фтп, потому как писал на другом компьютере, поменял strpost на strpos, залил обратно и запустил, он конечно выдал ошибку, переполнения памяти, так как в алгоритме был косяк, я подправил и он заработал. Нечего я не изменял с того момента как он ругался на 20 строчку. Я сам понять не могу. Изначально я писал скобки в $rw['short_story'], но после того как он начал ругатся на эту строчку я их и убирал и добавлял и переиначивал, как только мог. Я лично грешу на это - 12.02.2009 После переноса некоторых аккаунов вам необходимо сменить NS сервера. Делается это так: 1. Проверяем в CPanel слева (где вся инфа о аккаунте) пункт Server Name и если там написано s4 то вам необходимо выполнить следующее: 2. В панели управления доменом в разделе "изменить именной сервер" для: **** Если вы не указывали ip, а указывали только наши ns, то вам этого делать не нужно. Все перенесется само собой. Новость продублирована в рассылке. Рекомендуем подписаться всем клиентам. Само собой мой сайт перехал Других обьяснений не вижу
DukeNukem, и этот скрипт работает как надо и как было задумано .. т.е. правильно ? именно с той самой ошибкой, на которую вам на протяжении всего треда указывает unicross ? и это ведь та самая 20 строчка ^_^
PHP: <?PHP $conn = mysql_connect ("localhost:3306", "******", "******") or die ("Соединение не установлено!"); mysql_select_db ("*****", $conn); mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); $sql = 'SELECT * FROM `dle_post` WHERE `short_story` LIKE "%http%" AND `autor` LIKE "wolf"'; $result = mysql_query($sql); for ($j=1;$j<208;$j++) { $rw = mysql_fetch_array($result, MYSQL_BOTH); echo "id={$rw['id']}"; while ($i=strpos($rw['short_story'],"http")) { $k=strpos($rw['short_story'],"<br",$i); if ($k>0) $rw['short_story']=substr($rw['short_story'],0,$i).substr($rw['short_story'],$k); else $rw['short_story']=substr($rw['short_story'],0,$i); } $sql=" UPDATE `dle_post` SET `short_story` = '".$rw[short_story]."' WHERE `dle_post`.`id` =".$rw[id]; if (mysql_query ($sql)) echo (" Занесено в базу<br>"); else echo ("Invalid query: " . mysql_error()); } ?> neyr00n вышеописанный скрипт отработал без ошибок, конечно можно $rw[short_story] заменить $rw['short_story'] а $rw[id] на $rw['id'], но большой разницы нету, кроме полного соблюдения синтаксиса и пары предупреждений, не влияющийх на общую работу скрипта. В данном скрипте 20 строка сместилась на 21, так как я правил алгоритм. Почему тогда выпадала ошибка, я так и не понял. Думаю те кто прикалывались тоже особо не поняли почему, подозревается что в этот момент сайт пирехал на новый сервер и на нем могла стоять сначала очень старая версия PHP и спустя день хостер ее обновил, но точных данных и доказательств что так и было у меня нету. На локал хосте не запускал так как база была на сервере.
При строке $rw[short_story] будет всего лишь предупреждение, а не фатальная ошибка... Скрипт все равно выполнит свою работу. PHP ведь умный... Это кто здесь прикалывался? Прикалывались вы - загружали на один сервер, а запускали со второго...