Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 793
от 18.10.2007, 19:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 444, Экспертов: 40
В номере:Вопросов: 1, Ответов: 4


Вопрос № 105318: Здравствуйте ! Я не понимаю почему почему не работает мой код : <? $link=mysql_connect("localhost","root","mypass") or die("Could not connect to localhost"); print ("Connected successfully...

Вопрос № 105.318
Здравствуйте ! Я не понимаю почему почему не работает мой код :
<?
$link=mysql_connect("localhost","root","mypass") or die("Could not connect to localhost");
print ("Connected successfully<br>");
mysql_select_db("debya") or die("Cant open database");
for($i=1;$i<50;$i++)
{
$hr='<a href="fotos/image1.jpg">lalala</a>';
$sql ="insert into fotos values($i,$i+1,'lalala',$hr);";
$res = mysql_query($sql);
if(!$res)
die("Cant write $i foto");
}
mysql_close($link);
?>
Просто пытаюсь сделать 50 записей в таблице. Если убрать переменную hr и написать вот так :
$sql ="insert into fotos values($i,$i+1,'lalala','<a href="fotos/image1.jpg">lalala</a>');";
то все будет работать. Странно почему он не хочет записывать. Еще мне интересно почему не получается произвести конкатенацию:
'<a href="fotos/image'.$i.'.jpg">lalala</a>'
не работает в обоих случаях.
если вывести на экран эту переменную , то там все как надо , но записывать в бд mysql он не хочет. Заранее спасибо.
Отправлен: 13.10.2007, 16:10
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Yurio
Здравствуйте, Whiteman!
Не записывается, так как 4-е поле у Вас строковое, а запрос генерируется без кавычек. То есть генерируется примерно следующее:
insert into fotos values(1,2,'lalala',<a href="fotos/image1.jpg">lalala</a>);
Для того, чтобы этого избкжать, небходимо поставить эти самые кавычки:
$sql ="insert into fotos values(".$i.",".$i+1.",'lalala','".$hr."');";
Да и кроме того, в Вашем примере можно было вообще без переменной $hr:
...
for($i=1;$i<50;$i++)
{
$sql ="insert into fotos values(".$i.",".$i+1.",'lalala','<a href="fotos/image".$i.".jpg">lalala</a>');";
$res = mysql_query($sql);
...
Ответ отправил: Yurio (статус: 3-ий класс)
Ответ отправлен: 13.10.2007, 16:31
Оценка за ответ: 5

Отвечает: GINes
Здравствуйте, Whiteman!

Ошибка в том, что Вы не поставили кавычки:
$sql ="insert into fotos values($i,$i+1,'lalala','$hr');";
И ещё, если Вы используете одинарные кавычки:
$hr='<a href="fotos/image1.jpg">lalala</a>';
то экранировать двойные кавычки внутри нет необходимости, это даже ошибка, т.к. Ваш слеш также запишется в базу. Кстати, Вы недеюсь сохраняете результаты конкантенации ('<a href="fotos/image'.$i.'.jpg">lalala</a>'), т.к. вроде всё нормально,если:
$hr='<a href="fotos/image'.$i.'.jpg">lalala</a>';
Но можно и по-другому:
$hr="<a href="fotos/image".$i.".jpg">lalala</a>";
Ответ отправил: GINes (статус: 7-ой класс)
Ответ отправлен: 13.10.2007, 16:40
Оценка за ответ: 5
Комментарий оценки:
Отлично , спасибо .Все ок теперь

Отвечает: K0rvin
Здравствуйте, Whiteman!
Переменную в запросе тоже нужно заключать в кавычки:
$sql ="insert into fotos values($i,$i+1,'lalala','$hr')";
иначе, при ее раскрытии Ваш запрос приобретает вид:
insert into fotos values($i,$i+1,'lalala',<a href="fotos/image1.jpg">lalala</a>)
что синтаксически неправильно.
По-поводу второй части вопроса - та же причина.
Ответ отправил: K0rvin (статус: 3-ий класс)
Ответ отправлен: 13.10.2007, 20:04
Оценка за ответ: 5

Отвечает: PM_pilot
Здравствуйте, Whiteman!
Здравствуйте, Whiteman!
Ну для начала, я не стал бы хранить весь HTML тег в базе, IMHO достаточно только хранить путь а потом вставлять его в HTML. <a href="$imagePath">lalala</a> - например.
Относительно $sql ="insert into fotos values($i,$i+1,'lalala',$hr);"; Вам необходимо поставить кавычки до и после $hr
тоесть так : $sql ="insert into fotos values($i, $i+1, 'lalala', '$hr');"; иначе sql не будет считать это строкой.
Вообще неплохо использовать кавычки всегда для всех данных которые передаються в базу IMHO.
Относительно '<a href="fotos/image'.$i.'.jpg">lalala</a>' про один случай я уже написал, также рекомендую Вам всю предварительную роботу делать до запроса :
$imagePath = "fotos/image".$i.".jpg";
$var = $i+1;
$imageText = "lalala";
$sql ="insert into fotos values($i, $var, $imageText, '$imagePath');";
Ответ отправил: PM_pilot (статус: 1-ый класс)
Ответ отправлен: 15.10.2007, 17:57
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное