Вопрос № 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