Рекомендованные сообщения

точка с запятой может и не обязательна, но никто ж не знает, что у него там после идет <_< и дабы перестраховаться - пусчай поставит... верно? :huh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

народ,как думаете,что лучьше на PHP5

1-делать общий объект сайты,под ним объекты функционала (подключаются в зависиомости от потребностей),доступ через parent указатель (объекты между собой взаимодействуют)

2-делать синглтоны объектов функционала

3-как то ещё

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть инет магазин

на движке Shop-Script PREMIUM.

На сайте есть поиск, ищет норм, но надо сделать так, чтобы поиск научился искать товары по артикулу.

Подскажите, как это сделать?

 

-----------------------------------------------

уже не надо, всё сделал сам :rolleyes:

спс

Изменено пользователем x_Edgar_Davids

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Суть вопроса:

вывод имеющейся в базе таблицы с товарами (картинка, цена, название - это несущественно) в виде таблицы по три элемента в ряд. Принцип генерации html-кода я представляю (php только начал изучать), а конкретно как это собрать дабы было по три td'шки в tr'е - не очень. Т.е. вопрос в ориентировании по массиву - делать по счетчику echo "</tr><tr>..и.т.п." для начала новой строки таблицы или еще как-то.. заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

примерно так:

 

$query = mysql_query($query_str);
print '<table>';
while( $product = mysql_fetch_array($query) )
{
  print '<tr>';
  print '<td>'. $product['title'] .'</td>';
  print '<td>'. $product['price'] .'</td>';
  print '<td><img src="'. $product['img_src'] .'" alt="'. $product['title'] .'" /></td>';
  print '</tr>';
}
print '</table>';

где $query_str - твой запрос, а ля "SELECT * FROM table ORDER by title ASC"

сопсно эдакий топорный вариантик )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо) на первое время подойдет) засунуть <tr> в цикл я почему-то не догадался))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос)

Загрузка файла (картинки, например) в некую папку img/upload через input типа file.

Грубо говоря это добавление элемента в прайс (для примера) : название, цена, ссылка на картинку (это представление в БД)

  <form enctype="multipart/form-data" action = "admin.php" method = "POST">
<select name="cat" style="width:180px;" >

// селект заполняется выборкой из БД, вырезал чтоб не мешалось

  </select><br> 

// тут некоторое кол-во инпутов с данными, которые будут внесены в базу наравне со ссылкой на загруженную картинку, опять же вырезал

  <input type="file" name="ufile" \><br> <br>
  <input type="hidden" name="go" value = "writeToBase"><br> 
  <input name="add_" type="submit">
  <br>
  </form>

 

и вот, собственно, по submit'у запускается такая шляпа (пример из IBM'овского журнала)

 

<?php
if ($_POST['go'] == "writeToBase")
{

if(isset($_FILES['ufile']['name']))
{
  echo "Uploading: ".$_FILES['ufile']['name']."<br />";
}
else
{
  echo "You need to select a file.  Please try again.";
}
define(UPLOADEDFILES, "/var/www/img/upload/");

if(isset($_FILES['ufile']['name']))
{
   echo "Uploading: ".$_FILES['ufile']['name']."<br>";

   $tmpName = $_FILES['ufile']['tmp_name']; 
   $newName = UPLOADEDFILES . $_FILES['ufile']['name'];  

   if(!is_uploaded_file($tmpName) || !move_uploaded_file($tmpName, $newName))
   {
		echo "FAILED TO UPLOAD " . $_FILES['ufile']['name'] .
			 "<br>Temporary Name: $tmpName <br>";
   } 
   else {
		echo "File uploaded.  Thank you!";
		} 

} 
else {
 echo "You need to select a file.  Please try again.";
 }

 

Вопрос в том. где тут, на первый взгляд, вкралась очепятка. Права на папке стоят 711, файл не заливается, максимум, что получаю - ссылку на временный файл в php-директории сервера. Define для директории аплоада неправильный, но как он в идеале должен выглядеть, я не вполне понял. На сервере структура выглядит как abc/img/upload

Изменено пользователем funtych

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

логи глянуть надо... а вообще я пользую следующий define:

 

define( 'ROOT_PATH' , $_SERVER['DOCUMENT_ROOT'] . '/' );

 

покажет полный путь включая твой www... т.е. что-то типа: /home/domain.ru/www/

а дальше уже варируешь, в какую папку чо те пихать надо...

 

и тогда $newName = UPLOADEDFILES . $_FILES['ufile']['name']; будет выглядеть так:

$newName = ROOT_PATH . 'img/upload/' . $_FILES['ufile']['name'];

 

и удали к черту всё, что между

if ($_POST['go'] == "writeToBase")
{

и дефайном.... это повторение того, что после него...

 

либо вообще вот так сделай:

if ($_POST['go'] == "writeToBase")
{
  define( 'ROOT_PATH' , $_SERVER['DOCUMENT_ROOT'] . '/' );

  if ( !empty($_FILES['ufile']['tmp_name']) )
  {
   $newPath = 'img/upload/' . $_FILES['ufile']['name'];
   if( !copy($_FILES['ufile']['tmp_name'], ROOT_PATH . $newPath ) )
   {
	   print 'Ошибка при загрузке файла';
   }
   else
   {
	   print 'Вуаля! Файл загружен...';
	   // ну и дальше делаешь что надо...
   }
   unlink($_FILES['photo']['tmp_name']);
  }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В define указана папка, в которую надо заливать файлы. Оканчиваться должна слешем. Что-то вроде /home/user/http/htdocs/cms/smth/images/

Права на папку должны быть 777.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

777 это, простите, лол, а насчет папки заливания - в вышеприведенном_ex_'ом коде так и получается в конечном счете:

ROOT_PATH . $newPath

Другое дело, что файловая структура на хостинге мне неизвестна, кроме как сам факт, что папка для загрузки для моего фтп-аккаунта выглядит как abc/img/upload

 

собственно, пока сделать не удалось, где-то косяк и, как следствие, белый лист вместо содержимого страницы. Ща поковыряюсь..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

chmod 755 ../upld/

Warning: move_uploaded_file(/блабла/upld/screenshot.png) [function.move-uploaded-file]: failed to open stream: Permission denied in /блабла/upld/admin.php on line 22

 

chmod 777 ../upld/

Uploading: screenshot.png

File uploaded. Thank you!

 

Прощаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток..

Суть проблемы:

Есть скрипт, который получает информацию из БД (MySql) и инициализирует ею поля формы (select, например)

кодировка в файле admin.php - windows-1251

в БД стоит cp1251_general_ci

Выбираем данные и вместо русских слов имеем "??????????". Точно эта же база (импортировалась из sql файлика) на двух других хостах (локальном и hoster.ru) работает идеально.

В самой базе все нормально, читаемый русский текст, а уже в процессе передачи все корёжит.

Вдруг кто сталкивался.. Точно знаю, что на стороне скуль сервера есть проблемы с кодировками (русскоязычный сайт там вообще под шведскими кодировками крутится).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

если не ошибаюсь - перед запросом надо указать нужную кодировку. вспомню как - напишу.

 

(ставил скрипт как то на литовский хостинг).

 

примерно вот такое ставить перед запросом, каждый раз (так наверное и делал, дописывал в скрипты)

 

SET NAMES cp1251

SET CHARACTER SET cp1251

SET CHARSET cp1251

 

что именно помогало - не помню :angry: но можно по этому погуглить.

Изменено пользователем tommy-kun

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, уже к этому моменту решил вопрос)

mysql_query('SET NAMES cp1251');

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вопрос состоит в следующем

 

Имеются разные значения в таблице. В том числе `id`, `ocenka`, `raz`

 

Необходимо что бы переодически(буду запускать по крону), происходило следующее

 

Забирались эти значения из таблицы

 

$sql = mysql_query("SELECT * FROM katalog");

 

Далее вывожу их для себя(необязательно)

 

echo "<table border ='1'>";
while ($tablerows = mysql_fetch_array($sql))
{
	 echo "<tr>";
	 echo "<td>".$tablerows['id'];"</td>";
	 echo "<td>".$tablerows['ocenka']."</td>";
	 echo "<td>".$tablerows['raz']."</td></tr>";
}
echo "</table>";

 

Так вот нужно что бы происходило деление `ocenka` на `raz`

И вставлялось опять в базу, к тому же `id` , с которого и взялось.

 

Всё равно как сделать в php или mysql(если такое можно в нём сделать) , но не представляю как. Помогите пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм. Не очень понятно. Но запрос типа того я так понимаю

 

UPDATE katalog SET <UNKNOWN_FIELD> = ocenka/raz

 

И собственно всё. Поле в той же таблице находится? Если да то мой запрос просто обновит всю таблицу. То есть для всех записей будет пересчитано значение поля <UNKNOWN_FIELD> и станет равным ocenka/raz. Это как самый простой способ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, все поля в одной таблице. Но несколько строк. То есть надо ещё как то привзяать к id?

 

UPDATE katalog SET reit = ocenka/raz where id = $id

 

Что то наподобие этого? Попробую так сделать, спасибо. Но остаётся вопрос, как привязать к нужному id. Что бы именно в нужной строке обновилось значение., и так для каждой строки )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если тебе надо чтобы во всех строках обновилось а не для выбранных то можешь просто написать UPDATE katalog SET reit = ocenka/raz. Если для выбранных то обязательно where id in <множество какое-то>. Либо where (id=...) or (id=...) or (id=...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

echo "<table border ='1'>";
while ($tablerows = mysql_fetch_array($sql))
{
	 echo "<tr>";
	 echo "<td>".$tablerows['id'];"</td>";
	 echo "<td>".$tablerows['ocenka']."</td>";
	 echo "<td>".$tablerows['raz']."</td></tr>";
}
echo "</table>";

 

в цикл вставляешь:

mysql_query( 'UPDATE katalog SET reit = '.$tablerows['ocenka']/$tablerows['raz'].' where id = '. $tablerows['id'] );

 

но это жесть получается если честно =)

 

where id in <множество какое-то>. Либо where (id=...) or (id=...) or (id=...)

это всё можно заменить следующим:

WHERE id IN(1,2,3,4,5,6,7,8,9)

Изменено пользователем _ex_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mysql_query( 'UPDATE katalog SET reit = '.$tablerows['ocenka']/$tablerows['raz'].' where id = '. $tablerows['id'] );

Ну раз надо обновить всю таблицу то проще сделать просто update всего что есть одной строчкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

IRQ, согласен ) но я просто не вычитал, что надо обновить одним значением поле во всей таблице =)

вот и подумал, что надо обновлять значение для каждой строки...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

большое спасибо. Всё получилось.

 

 

2_ex_ Всё верно, нужно обновлять значение для каждой строки во все таблице, строк около 200.

 

 

Вот это помогло :

 

$up = mysql_query("UPDATE `games_katalog` SET `reiting` = `ocenka`/`raz` where id = `id`");

Изменено пользователем Призрак тьмы

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я ж говорил что если тебе надо обновить всю таблицу сразу то не надо писать WHERE. Или это не сработало?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

если он не напишет WHERE то у него в каждой строке в поле "reaiting" будет одно значение, к примеру равное `1`

а ему надо менять для каждой строки значение во всей таблицы.. WHERE просто неизбежен... другое дело, что у него всего 200 строк... если б было больше - такой подход, какой ему помог - не подошёл бы.... пришлось бы либо порциями апдейтить, либо думать как сделать апдейт исключительно на уровне mysql...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
если он не напишет WHERE то у него в каждой строке в поле "reaiting" будет одно значение, к примеру равное `1`

а ему надо менять для каждой строки значение во всей таблицы.. WHERE просто неизбежен... другое дело, что у него всего 200 строк... если б было больше - такой подход, какой ему помог - не подошёл бы.... пришлось бы либо порциями апдейтить, либо думать как сделать апдейт исключительно на уровне mysql...

Если не писать WHERE вообще то таблица будет обновлена для каждой строки отдельно. И не надо писать WHERE. Вот если писать UPDATE SET=1 то да. Тогда везде будут 1. Если писать UPDATE SET=<столбец из той же таблицы>/<столбец из то же таблицы> то для каждой строки будет посчитано своё значение по отдельности а не одно для всех. Это проверено мной по крайней мере на T-SQL (MS SQL Server). И готов поспорить MySQL работает точно так же. Вряд-ли это особенность диалекта T-SQL.

Изменено пользователем IRQ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

IRQ, может быть... сейчас нет возможности проверить... а особенности диалекта вполне быть могут... я тоже не ожидал, что в postgresql нету авто_инкремента... для меня это было дикой новостью )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IRQ, может быть... сейчас нет возможности проверить... а особенности диалекта вполне быть могут... я тоже не ожидал, что в postgresql нету авто_инкремента... для меня это было дикой новостью )

Ну инкремент это особенность архитектуры СУБД. И здесь каждый волен по-своему делать. А вот стандарт языка SQL он один для всех и я не верю что такое поведение это особенность T-SQL. Вот доказательство. Быстренько сваял простую табличку:

post-36929-1228912723_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кхм =) возник ещё один вопрос...

 

Пишу авторизацию на php+mysql , через сессии. (кстати может кто нибудь подскажет что - нибудь другое? Более интересный способ)

 

С этим всё ок, не думаю что возникнут проблемы.

 

Но возник вопрос. Как сделать отправку письма на e-mail, со строкой подтверждения(активации) аккаунта. Может у кого нибудь есть подобный скрипт. Покопался бы в нём, разобрался.

 

Не хочу разбираться в форумных скриптах. ПОтому что там много всего лишнего, что сбивает с толку.

 

ЗЫ. Гуглил )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Пишу авторизацию на php+mysql , через сессии. (кстати может кто нибудь подскажет что - нибудь другое? Более интересный способ)

зачем? шило в жопе и большое желание придумать велосипед? )

 

Как сделать отправку письма на e-mail, со строкой подтверждения(активации) аккаунта.

пользователь заполняет анкету, при нажатии "активировать" кидаешь в БД инфомрацию, где есть доп поле типа uid, которое генерируется как те хочется... хоть в md5(), crypt() вобщем любой набор строк генерируешь кидаешь в к его строке в БД... при этом генерируешь ему в письме ссылку типа: www.domain.ru/?key=youruniquestring

по нажатии которой ему есть счастье...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас