Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Интернет-языки

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: PHP скрипты Добавлено: 07.06.06 12:58  

Автор вопроса:  Fever

Ответить

  Ответы Всего ответов: 49  

Номер ответа: 16
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #16 Добавлено: 13.06.06 23:08
Не люблю я аську, может человеку некогда, а я его тут буду дергать некстати.
В общем установил Денвер. Сделал простейшую страничку типа Hello World на php - пашет. Теперь такой вопрос: как лучше, сделать каркас сайта и потом его пичкать скриптами, или лучше параллельно двигать html и php?

Ответить

Номер ответа: 17
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #17 Добавлено: 14.06.06 04:12
да как придумаешь, например я так делаю:
есть корневая папка сайта

в ней файлы
index.php - стартовая стр сайта
part.php - какой-то раздел сайта итп...
...
и таких много

и также в корневой файл "сам движёк сайта"
например act.php

в index.php сама разметка хтмл, возможно ещё какие-то фишки выборки информации, ну параметры всякие к индексу index.php?id=1&переменная=зачение... итп

а сама обработка (именно рабочая область скрипта) выносится в act.php...

например в index.php какая-то формочка <form...> в которую что то там вводиш, то что ввёл должно сохранится в файл на сервере... Вот в индекск строишь формочку а action её пишешь на act.php

(ниже содержимое индекс.пхп)
<form action="act.php" method=post>
... вские <input type=text name=file1> для ввода...
</form>

(а в самом act.php уже обработка действия, типа записать в файл)
<?
fopen
fwrite
fclose...
//(всё как в си, только вместо казателей, типов FILE, всё тебе обычные пхп переменные $file например...)
?>

Может пригодится делать обработку нескольких форм в одном act.php... тогда в форме, в action можно задать параметр дополнительный, который потом проверишь, и обработаешь нужную форму...

Например
index.php:

<form action="act.php?id=1" method="post">
...
</form>
и в нём же где-то ещё одна форма...
<form action="act.php?id=2" method="post">
...
</form>
--------------
А в самом act.php потом смотришь эту переменную id
<?
if ($id==1){
 print "Тут что-то делаешь над первой формой";
}elseif ($id==2){
 print "Тут что-то делаешь над второй формой";
}
?>

Хотя лучше конечно читать переменные которые "постились" через переменную окружения (вроде так она называется) $_POST т.е.

if ($_POST['id']==1)... по аналогии дальше...

Это я просто к сведению, что пхп сам преобразет в переменные, то что передавалось в параметрах...

Возможно при организации удобно будет act.php разбить ещё на более мелкие части...
Также продумуй структуру папок, всё по аналогии разработки большого win32 приложения - модули одного типа в одну папку, другого - в другую...

Может так
корневая/user/*.php
корневая/admin/*.php
корневая/modules/*.php

и скрипты и с user, и с admin будут подключать нужные модули из modules...

А кстати, про модули...

include "file.php";
где-то в начале какого-то пхп файла, и все ф-ции и переменные что в file.php будут доступны втом, куда подключил... ну тот же Си! ты быстро врубишся!

Это всё так сказать для разминки, когда выростаешь, набираешь 10 заказов одновременно и нехрена неуспеваешь, хочется уже чего-то продуманного, готового, итп... и выход есть - пхп нюки (PHPNuke, SmallNuke...) это готовые "какасы" для сайтов, уже реализована структура, уже реализовано много функций, много готовых модулей под нюки итп... зачастую создание довольно сложного сайта сводится в "программирование мышкой". Но это уже когда действительно нужна скорость, и неограниченность в росте, групповая разработка итп... По началу я сам всё с нуля...


Ответить

Номер ответа: 18
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #18 Добавлено: 14.06.06 23:48
Спасибо.
Попробую что-нибудь соорудить

Ответить

Номер ответа: 19
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #19 Добавлено: 21.06.06 22:51
Кто тут назвался квалифицированным PHP-программистом? Вроде это был Sharp...

Уже 3 дня(!) пытаюсь сделать такую вещь:
На странице несколько текстовых полей.
Обхожу их в цикле и собираю из них данные, которые суммирую как строку.
Когда результирующая строка собрана, нужно открыть новое окно и передать туда эту строку.

Чтобы открыть новое окно, можно воспользоваться либо document.form2.submit(); либо window.open()
Первый способ без проблем открывает окно и передает строку, которую я могу получить через echo($_POST["senddata"]);
Второй способ без проблем открывает окно нужного размера (400х400).
Но: первый способ не позволяет задать размер окна, а второй способ не позволяет передать данные :(

Как совместить возможности первого и второго способов и передать данные в новое окно произвольного размера? Это в принципе возможно: открытие окна произвольного размера и передача в него параметра-строки???

<script language="javascript">

function pad_string_left(st){
  l=st.length;
  if (l=1) return '00'+st;
  else if (l=2) return '0'+st;
  else return st;
}

function show_form(tov_cnt){
  res_str="";
  for(a=1; a<tov_cnt+1; a++){
    s=pad_string_left(a.toString());
    if (document.form1['count'+s].value !=0){
       res_str = res_str + document.form1['data'+s].value + "###" +
                 document.form1['count'+s].value + '<br>';
    }
  }
  document.form2['senddata'].value = res_str;
  if (res_str!="";){
     document.form2.submit();
     res_str='zakaz.php?senddata='+res_str;
     window.open(res_str, 'subwindow',"height=350,width=400,status=yes,toolbar=no,menubar=no,location=no";);
  }
  else {
     alert(Не выбрано ни одного товара!');
  }
}
</script>

<form name=form2 action="zakaz.php" name="senddata" target="_blank" method="POST">
      <input type="hidden" name="senddata" value="1"></form>

<img src="img/dobasket.gif" class="onbutton"
              onClick="show_form(5)"


в zakaz.php такой код:

<?php
echo($_POST["senddata"];);
?>

Ответить

Номер ответа: 20
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #20 Добавлено: 21.06.06 23:39
<form name=form2 action="zakaz.php" name="senddata" target="_blank" method="POST">
      <input type="hidden" name="senddata" value="1"></form>


лучше имя формы и имя поля сделать разными...

Собери строку, загони её в куки ява скриптом, открой нужную страницу через window.open(), та страница прочитает куки пхп скриптом

В пхп:
запись - SetCookie(имя,знач,время жизни)
чтение - $_COOKIE['имя']

в js:
function printSetcookie(){
print '
function setCookie(name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) +
                ;((expires) ? "; expires=" + expires.toGMTString() : "";) +
                ;((path) ? "; path=" + path : "";) +
                ;((domain) ? "; domain=" + domain : "";) +
                ;((secure) ? "; secure" : "";)
        if ((name + "=" + escape(value)).length <= 4000)
                document.cookie = curCookie
        else
                if (confirm("Cookie превышает 4KB и будет вырезан !";))
                        document.cookie = curCookie
}
';
} //function printSetcookie

Ответить

Номер ответа: 21
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #21 Добавлено: 22.06.06 01:02
Что за параметр expires и в чем измеряется?
И если данные больше 4 кБ, то обрежет?

И как удалить куки из php?

Ответить

Номер ответа: 22
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #22 Добавлено: 22.06.06 13:38
expires - время жизни

оставь пустой, по умолч кука жива в приделах текущей сессии.

>удалить
SetCookie(имя,"";)

т.е. запиши пустую строку

в php > 4.0 если знач пустое - удаляет...


Куки > 4 КБ браузера неглотают

Ответить

Номер ответа: 23
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #23 Добавлено: 22.06.06 14:04
Всё ясно, спасибо.

Ответить

Номер ответа: 24
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #24
Добавлено: 22.06.06 16:29
А если через JS организовать связь между родительским и дочерним
окном?
Либо обратиться из родительского к дочернему как-то так:

myWnd = window.open(...);
myWnd.тут_что-нибудь

Либо из дочернего обратиться к родительскому:

opener.тут_что-нибудь

Второе предпочтительней, т.к. в первом случае если поставить вызов
чего-то-там сразу после открытия окна, то тогда содержимое дочернего
окна еще не бует загружено и получим гемморой синхронизации (ну прямо
многопоточность какая-то :).

Куки я бы не советовал. Во-первых, как-то кривовато это решение
выглядит. Во-вторых немалы шансы, что браузер или прокси-сервер (или
еще какой файрвол) клиента запретил их.

Ответить

Номер ответа: 25
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #25 Добавлено: 22.06.06 23:08
Павел, тут куки (если я правильно понял), не пишутся клиенту, они на сервере остаются, т.к. path и domain пустые.

Можно через window.open, но этот метод вынуждает использовать GET вместо POST, а GET неадекватно реагирует на некоторые символы, которые могут оказаться в передаваемых данных. В частности, символ "#" и всё, что после него, будет обрезано. Так же и последовательностью " &" (пробел+амперсанд) - всё что после - обрезается при использовании GET. POST эти символы передаёт нормально, но с window.open рн не прокатывает.

А с opener я не понял, это что такое?

Ответить

Номер ответа: 26
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #26 Добавлено: 22.06.06 23:29
А вообще насчёт куков ты прав, если установлен высокий уровень конфиденциальности в броузере. Куки не проходят.
Хотя с другой стороны, без куков на такого рода сайте, где нужно собирать и хранить информацию от пользователя, делать нечего. Кстати, vbnet тоже не пускает с таким уровнем конфиденциальности, при котором нельзя писать куки.

Ответить

Номер ответа: 27
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #27 Добавлено: 22.06.06 23:57
Павел, тут куки (если я правильно понял), не пишутся клиенту, они на сервере остаются, т.к. path и domain пустые.


куки будут в браузере, пока этот браузер не откроет новую сессию...

запрещение куков - неправельная работа браузера.

Куки в висте, например, вообще отдельная история, вообем всё чики-пики, типа безопасно...

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

Ответить

Номер ответа: 28
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #28 Добавлено: 23.06.06 00:03
А если через JS организовать связь между родительским и дочерним
окном?


фреймы знаю, окна х.з... окно вроде не имеет никакого манипулятора за который мона было зацыпится...

Ответить

Номер ответа: 29
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #29
Добавлено: 23.06.06 05:33
2 HACKER: странно как-то заявлять, что "не имеет манипулятора", когда приведен пример кода :) екларация метода из MSDN:

oNewWindow = window.open( [sURL] [, sName] [, sFeatures] [, bReplace];)


oNewWindow - как раз ссылка на открытое окно.

А из дочернего к родительскому можно обратиться через opener:

window.opener Property
Sets or retrieves a reference to the window that created the current window.



2 HOOLIGAN: понимаю, что опыт C++ губителен для фантазии, но надо мыслить масштабнее :) Что мешает к примеру сделать так:

Страница 2 (дочерняя):
Содержит форму с method=post и несколько скрытых полей. Ну вроде такого:

<form id="myCoolForm" action="page3.php">
<input type="hidden" id="myField" />
</form>

Далее.. Код при загрузке страницы:

<script type="text/javascript">
function onLoad()
{
  document.getElementById("myField";).value = window.opener.document.getElementById("userName";);
  document.getElementById("myCoolForm";).submit();
}
</script>

Ну для того чтобы повесить эту функцию на событие загрузки, в body прописать:

<body onload="onLoad();">



В странице 1:

Формочка или что-то там еще, куда юзверь данные заносит. Даже по сути <form> не нужен. Ну что-то такое банальное:

Enter UserName: <input type="text" id="userName" /><br/>

И кнопка:

<input type="button" onclick="sendData();" value="Ok" />

Скрипт отправки данных:

<script type="text/javascript">
function sendData()
{
  window.open("page2.php";);
}
</script>


Страница 3:

Тут просто идёт обработка полученных методом POST данных.



Вот. Я эту систему вижу примерно так.

Ответить

Номер ответа: 30
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #30
Добавлено: 23.06.06 05:35
По сути можно даже страницу 2 физически не делать чтобы не увеличивать время ожидания юзера, а сформировать ее HTML-код прямо из скрипта первой старницы.

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам