Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> мой скрипт, вопросы... я наверное всем надоел... 
:(
    Опции темы
Bangladesh
Дата 25.1.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



Я делаю админку для сайта, несмотря на то, что еще мало умею, но те люди, которые заказали её у меня не ограничили меня медленными строками, поэтому я взялся, да тем более практика хорошая  Столкнулся я с проблемой. Хочу сказать сразу, что тот кто это прочитает и поможет лично от меня получит три плюсика, потому что прочитать все это и ответить на кучу вопросов это большой труд, и от меня, соответственно, большая уважуха. Начну рассказывать все по порядку:

Страница входа в админку это admin.php в корневом каталоге. Там есть такая форма:

Код

<table>
       <tr>
        <td width=150 height=100 bgcolor=#151515 style="border: 1px #303030 solid"><br>
      <div align="center"><form  action="apanel.php" method="post">.:log in:.<br>
     <input name="name" class="button" type="text" value=""><br>
     .:password:.<Br>
      <input name="password" class="button" type="password" value=""><br><br>
      <input type="submit" class="button"  value="войти">
        </form></div>

      </td></tr></table>


Она передает переменные в файл apanel.php который все это дело проверяет, и если пароль правильный, вместе и именем, то выводит админку. Скрипт вот такой:

Код

<?

        //Проверка на ошибки
        if($eorogonso=="191435133897832678107389082"){
          require "admin/panel_191435133.tpl";
         }
         else {
         if(empty($name)){
          $error = "<li>Вы не ввели имя<br>";
         }
         if(empty($password)){
          $error = $error."<li>Вы не ввели пароль";
         }

         if(!empty($error)){
          echo "<div align='center'>Вход не прошел успешно:<br><Br>";
          echo "<b>$error</b></div>";
         }

         else {

         //Количество имен - обязательно для заполнения
         $qua = 2;
         //Минимальное количество имен - не для исправления
         $gua_min = 0;

          /*
          КАК ДОБАВЛЯТЬ НОВОГО ПОЛЬЗОВАТЕЛЯ:
          1. Добавить переменную имени в массив "имена"
          2. Добавить переменную пароля в массив "пароли"
          3. Задать им одинаковый индекс (пишется в квадратных скобках, например 2)
          4. Увеличть переменную $qua, что находится ваше на 1 (с каждым новым
          пользователем).

          Удачной работы!
          */

          // Имена
          $nm[0] = "1914351330984939028475653627182078";
          $nm[1] = "user1";
          $nm[2] = "user2";

          // Пароли
          $pwd[0] = "191435133930293013292143578432752";
          $pwd[1] = "user1password";
          $pwd[2] = "user2password";

          //Проверка имени или пароля
           while(++$gua_min <= $qua)
            {
             if($name==$nm[$gua_min]){
              if($password==$pwd[$gua_min]){
               $access = "open";
               }
             }
            }

          //Проверка доступа
           if(!empty($access)){
            echo "<div align='center'>";
            require "admin/panel_191435133.tpl";
            echo "</div>";
           }
           else {
            echo "<div align='center'>Вход не прошел успешно:<br><Br>";
            echo "<b><li> Ошибка. Возможно имя неподходит к вашему паролю, или пароль к имени :)<br>Или они оба неправильные. </b></div>";
           }
          }
        }
       ?>


Если все правильно выводится админка. Пока я сделал только админку для новостей, и выводится она просто:

Код

<?

   if($p=="news"){
           require "admin/news.tpl";
           }

  ?>


Этот файл, news.tpl, имеет вот такой код:

Код

<div align="center"><form action="addnews.php" method="get"><table>
<tr>
<td>Дата новости:</td>
<td><input name="date" type="text" class="button" ></td>
<tr>
<td>Заголовок:</td>
<td><input name="ah" type="text" class="button"></td>
</tr>
<tr>
<td>Сообщение:</td>
</tr>
<td colspan="2">
<textarea class="button" cols="85" rows="15" name="news"></textarea>
</td>
</tr>
</table>
<b>Внимание! Перед тем как нажимать эту кнопку, проверьте всю информацию на ошибки
и на все прочее. Новость вы сможете только добавить, но удалить уже нет! Только
вручную...</b><br>
<input type="submit" value="добавить" class="button">
<br>
</form></div>


Эта форма передает данные в скрипт addnews.php в корневом каталоге. Вот код этого скрипта (он записывает все в БД и считает сколько уже есть новостей:

Код

<?

mysql_connect("localhost");
 mysql_db_name("newosti");

  $query = "INSERT INTO newosti VALUES ('$date','$ah','$news')";
   mysql_query($query);
  $query2 = "INSERT * FROM newosti WHERE choise = 'news'";
   $res = "mysql_query($query2)";
   $numbers = mysql_num_rows($res);
      mysql_close();

      if($numbers=="0") {
      $nume = "0";
      }
      else {
      $nume = $numbers;
      }

  echo "<HTML><HEAD><TITLE>Ошибка</TITLE><META HTTP-EQUIV=REFRESH CONTENT='6; url=/apanel.php?eorogonso=191435133897832678107389082'></head>";
echo "<body>новость добавлена";
echo "вы добавили уже $nume новостей</body></html>";


?>


Теперь со скриптом админки закончено. Переходим к выводу новостей:

Файл index.php находится в корневом каталоге. И вот таки вот несложным скриптом вызывает файл news/news.tpl:
Код

<?
         if(!isset($p)) {
         require "news/news.tpl";
         }
         if($p=="news") {
         $p=htmlspecialchars(stripslashes($p));
         $p=substr($p);
         require "news/news.tpl";
         }

         ?>


А сам файл news.tpl имеет вот такой скрипт для вывода новостей:

Код

<?php

  // Получения новостей
  mysql_connect("localhost") OR DIE ("Ошибка MySQL: ошибка при подключении");
   mysql_select_db("gauntletru") OR DIE ("Ошибка MySQL: ошибка базы, возможно таковой не существует или неправильное имя");
    $query = "SELECT * FROM newosti WHERE choise = 'news'";
     $res = "mysql_query($query) OR DIE ('Ошибка MySQL: ошибка таблицы или запроса.')";
      $number = mysql_num_rows($res);

             // Если в таблице ничего нет
             if($number==0){
               echo "<div align='center'><b>сообщений нет</b><br>Зайдите в <a href='./admin.php'>панель администратора</a> и добавьте их, если нужно.</div>";
               }
             // Если есть
             else {
               while($row=mysql_fetch_array($res)) {
               echo "<b>Дата:".$row['date']." , Заголовок:". $row['ah']."<b><br>";
               echo "<div align='justify'>".$row['news']."</div>";
               echo "<br><br>";
               }
              }
              mysql_close();

            ?>



Теперь вопросы:
- Скрипт который пишет новость в БД не работает и не пишет её, плюс к тому же он не хочет считать сколько новостей уже есть. Как это исправить?
- Как можно облегчить эту систему?
- Как можно сделать её более безопасней? Только не предлагать отмету регистер_глобалс 
- Как можно сделать, чтоб можно было удалять новости?



--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
lovermann
Дата 25.1.2005, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 28.12.2004
Где: Прага

Репутация: 1
Всего: 8



Конечно, у тебя не работает:

$query2 = "INSERT * FROM newosti WHERE choise = 'news'";

Неправильный синтаксис. Смотреть сюда:
http://dev.mysql.com/doc/mysql/en/insert.html

Слушай, и как ты только не запутываешься в этих .tpl-ах. Я бы всё в сами скрипты вогнал да и всё.

Это сообщение отредактировал(а) lovermann - 25.1.2005, 01:25
PM WWW ICQ   Вверх
Bangladesh
Дата 25.1.2005, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



а не мог бы ты мне это показать, я просто на таких сайта пожизни теряюсь... не нашел, чего хотел...


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
lovermann
Дата 25.1.2005, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 28.12.2004
Где: Прага

Репутация: 1
Всего: 8



Давай разберём твой addnews.php.

1)
Код
$query = "INSERT INTO newosti VALUES ('$date','$ah','$news')";

Зачем ты переменные в кавычки? Ты, наверное, хотел сделать это:
Код
$query = "INSERT INTO newosti VALUES ('".$date"','".$ah."','".$news."')";

хотя, я думаю, что вот так:
Код
$query = "INSERT INTO newosti VALUES ($date,$ah,$news)";

тоже будет работать


2) Вместо
Код
mysql_query($query);
я бы сделал
Код
$result = mysql_query($query);


3)
Код
$query2 = "INSERT * FROM newosti WHERE choise = 'news'";

Вместо INSERT ты, наверное, хотел использовать SELECT, раз собираешься что-то считать, да? Что такое choise? Столбец? Если да, тогда в пункте 1) вкладывать значения переменных нужно в определённые столбцы (я не знаю, как они у тебя называютя)
Код
$query = "INSERT INTO newosti (date,heading,message) VALUES ($date,$ah,$news)";


4)
$numbers=="0"
У тебя эта переменная содержит ЧИСЛО строк в результате SELECTa, а ты его сравниваешь со стринговой переменной 0 (она у тебя в кавычках). Тут кавычки, не нужны. Что странно, в файле news.tpl у тебя этой ошибки уже нет.

Это сообщение отредактировал(а) lovermann - 25.1.2005, 03:25
PM WWW ICQ   Вверх
Bangladesh
Дата 25.1.2005, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



млин smile у меня просто аномальное php какое-то, хотя только некудышный мастер винит свой инструмент. лана, я аномальный smile . проблема:

вот в таком случае скрпит пишет, что "новость добавлена" и что "вы добавили 0 новостей", т.е. на самом деле ничгео не добавляется, хотя все переменные есть (GET) вот код который выводит это:

Код

<?

//Настройки
$server = "localhost";
$dbname = "gauntletru";

mysql_connect($server);
  mysql_db_name($dbname);

    $query = "INSERT INTO newosti (date, ah, news) VALUES ($date, $ah, $news)";

  mysql_query($query);

    $query_two = "SELECT * FROM newosti WHERE choise = 'news'";
      $result = mysql_query($query_two);
         $numbers = mysql_num_rows($result);

mysql_close();

if($numbers==0) {
      $nume = 0;
      }

else {
      $nume = $numbers;
      }

echo "<HTML><HEAD><TITLE>Ошибка</TITLE><META HTTP-EQUIV=REFRESH CONTENT='6;
url=/apanel.php?eorogonso=191435133897832678107389082'></head>";
echo "<body><b>новость удачно добавлена</b><br>";
echo "вы добавили уже $nume новостей</body></html>";


?>


но а если написать так, как приведено ниже, то вообще нифига не выводит либо выводит ошибку. че делать? вот код:

Код

<?

//Настройки
$server = "localhost";
$dbname = "gauntletru";

mysql_connect($server) OR DIE(mysql_error());
  mysql_db_name($dbname) OR DIE(mysql_error());

    $query = "INSERT INTO newosti (date, ah, news) VALUES ($date, $ah, $news)";

  mysql_query($query) OR DIE(mysql_error());

    $query_two = "SELECT * FROM newosti WHERE choise = news";
      $result = mysql_query($query_two);
         $numbers = mysql_num_rows($res);

mysql_close();

if($numbers==0) {
      $nume = 0;
      }

else {
      $nume = $numbers;
      }

echo "<HTML><HEAD><TITLE>Ошибка</TITLE><META HTTP-EQUIV=REFRESH CONTENT='6;
url=/apanel.php?eorogonso=191435133897832678107389082'></head>";
echo "<body><b>новость удачно добавлена</b><br>";
echo "вы добавили уже $nume новостей</body></html>";


?>


я бы был бы рад, если бы мне бы указали бы на ошибки бы прямо в скрипте.


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
lovermann
Дата 25.1.2005, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 28.12.2004
Где: Прага

Репутация: 1
Всего: 8



Попробуй POST вместо GET.

Это сообщение отредактировал(а) lovermann - 25.1.2005, 04:05
PM WWW ICQ   Вверх
Bangladesh
Дата 25.1.2005, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



все равно, каким методом. дело в другом. почему когда я добавляю OR DIE у мне ничего не работает, а когда без него вроде работает но не добовляется.

p.s. пробывал методом post тоже самое.


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
lovermann
Дата 25.1.2005, 04:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 28.12.2004
Где: Прага

Репутация: 1
Всего: 8



$query = "INSERT INTO newosti (date, ah, news) VALUES ($_POST['date'], $_POST['ah'], $_POST['news'])";

так делал?
PM WWW ICQ   Вверх
Mont
Дата 25.1.2005, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Vingrad developer
Сообщений: 274
Регистрация: 13.11.2004
Где: Altay

Репутация: 8
Всего: 12



Код

<?

//Настройки
$server = "localhost";
$dbname = "gauntletru";

mysql_connect($server) OR DIE(mysql_error());
  mysql_db_name($dbname) OR DIE(mysql_error());

    $query = "INSERT INTO newosti (date, ah, news)
VALUES ('".mysql_escape_string($_GET['date'])."',
'".mysql_escape_string($_GET['ah'])."',
'".mysql_escape_string($_GET['news'])."')";

  mysql_query($query) OR DIE(mysql_error());

/*     $query_two = "SELECT * FROM newosti WHERE choise = news";
      $result = mysql_query($query_two);
         $numbers = mysql_num_rows($res);
вместо этого попробуй так:
*/
$query_two = "SELECT COUNT(*) FROM newosti WHERE choise = 'news'";
$result = mysql_query($query_two);
mysql_close();
$numbers=mysql_fetch_array($result);
if($numbers[0]==0) {
      $nume = 0;
      }

else {
      $nume = $numbers[0];
      }

echo "<HTML><HEAD><TITLE>Ошибка</TITLE><META HTTP-EQUIV=REFRESH CONTENT='6;
url=/apanel.php?eorogonso=191435133897832678107389082'></head>";
echo "<body><b>новость удачно добавлена</b><br>";
echo "вы добавили уже $nume новостей</body></html>";


?>


а если так?
Цитата

- Как можно сделать её более безопасней? Только не предлагать отмету регистер_глобалс

- Чем тебе так регистер_глобалс не угодили? ИМХО даже в мануале по ПХП их использование не считается безопасным.
- ВСЕГДА не доверяй тому что пришло, даже если это администратор и даже если это только тыsmile
- в скрипте addnews.php ты вообще не проверяешь кто тебе новости заносит?
Цитата

- Как можно сделать, чтоб можно было удалять новости?

тебе код или только идею? smile
выводи все новости на странице удаления с чекбоксами, отмеченные удаляются из базы, запрос "DELETE FROM .... WHERE ...."

если хочешь поподробней не стесняйся smile


--------------------
"Если однажды Вдруг
Меня не окажется вовсе
в заповедной заветной тарелке
Твоего праведного сновидения
Знай - Неуловимые мстители настигли меня."
© Егор Летов
PM MAIL ICQ   Вверх
IZ@TOP
Дата 25.1.2005, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Код
$query = "INSERT INTO newosti (date, ah, news) VALUES ($_POST['date'], $_POST['ah'], $_POST['news'])";


Ну кто так делает?

Код
$query = "INSERT INTO newosti (date, ah, news) VALUES ('".$_POST['date']."','".mysql_escape_string($_POST['ah'])."','".mysql_escape_string($_POST['news'])."')";

Это как минимум. Понимаешь, т не можешь присвоить ячейке в столбце текст не занесенный в кавычки, MySQL почти все слова из текста примет за поля, а посколько такие поля там врядли присутствуют, он врядли что сделает. Еще бы хотелось посмотреть на структуру таблицы, если это не военая тайна.
Добавлено @ 09:59
Удалять новости примерно так:

1) Как сказал монт, выводим в форму заголовки новостей, каждой новости присваивам чекбокс с именем delnews[] и значением (value="") равным $idnowosti, где $idnowosti, уникальный идентификатор новости в таблице.

2) В скрипте перебираем массив delnews и удаляем выбранные новости:

Код
while($v = array_pop($_POST['delnews'])) {
   mysql_query("delete from nowosti where id = ".$v);
}



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Bangladesh
Дата 26.1.2005, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



знаете... а проблема даже не в том, как я написал. сам по себе скрипт работающий. видели ведь тему, про домашнее задание. вот я там сделал опрос и в нем добавление в базу. раньше все работал и считало таким способом, которым я выше считал. сейчас у меня ничего не работает. MySQL вообще молчит. поставил, для проверки, IPB - он тоже отказывается с базой коннектится... наверное все дело в MySQL ... да не наверное а точно. что делать? он вроде работае (зелёный) а вот принимать ничего не хочет...


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
IZ@TOP
Дата 26.1.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



I, GyoZ, если у тебя на локалке стоит, хоттелось бы узнать параметры которые ты прописываешь для доступа.

А отказываться он может по разным причинам. Чтобы их узнать напиши в самом начале своего скрипта error_reporting(E_ALL), и запости сюда что он напишет.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Bangladesh
Дата 27.1.2005, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



IZATOP, спасибо, что помогаешь. но помоги сначала разобраться с проблемой. почему когда я пишу or die в не зависимости со своей ошибкой или стандартной, скрипт вообще не работает - белезна. если без него, то вроде как работает, а ничего не делает... скрипты я выше опубликовал.


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
Mont
Дата 27.1.2005, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Vingrad developer
Сообщений: 274
Регистрация: 13.11.2004
Где: Altay

Репутация: 8
Всего: 12



Цитата
почему когда я пишу or die в не зависимости со своей ошибкой или стандартной, скрипт вообще не работает - белезна. если без него, то вроде как работает, а ничего не делает... скрипты я выше опубликовал.


переведи с английского or die поймешь smile
or die - означает, что в случае ошибки выполнение скрипта прекращается, а в случае когда без него он продолжает работу, но запрос не выполнен и соответственно переменные которые должны содержать результат запроса просто пусты...

Вот так...
И сделай как посоветовал IZ@TOP - включи error_reporting и в die напиши отдельный текст для каждой ошибки + код ошибки.
Так тебе понятнее будет где и что у тебя происходит.


--------------------
"Если однажды Вдруг
Меня не окажется вовсе
в заповедной заветной тарелке
Твоего праведного сновидения
Знай - Неуловимые мстители настигли меня."
© Егор Летов
PM MAIL ICQ   Вверх
Opik
Дата 27.1.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Цитата
Ну кто так делает?


Код 
$query = "INSERT INTO newosti (date, ah, news) VALUES ('".$_POST['date']."','".mysql_escape_string($_POST['ah'])."','".mysql_escape_string($_POST['news'])."')";

а дату проверять не надо?)
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.