Автор Тема: MCF- администрация част 2  (Прочетена 24380 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: MCF- администрация част 2
« Отговор #30 -: 17 Ноември 2011, 20:41:39 »
Ако са с едно и също съдържание не би трябвало да е проблем..

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: MCF- администрация част 2
« Отговор #31 -: 17 Ноември 2011, 22:08:22 »
Цитат
Поредица от смехотии, - не иска да направи запис на латиница, пиша запис на киририлица - приема го, след него вече започва да приема и записи на латиница отново..

Казваш, че първият запис в базата не се записва на латиница, така ли ?
Ако това е така, опитай се да направиш записа през конзолата на mysql или през phpmyadmin и кажи резултата, след това ще умуваме по останалите проблеми
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

ashaman

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 76
Re: MCF- администрация част 2
« Отговор #32 -: 18 Ноември 2011, 17:28:18 »
Цитат
Поредица от смехотии, - не иска да направи запис на латиница, пиша запис на киририлица - приема го, след него вече започва да приема и записи на латиница отново..

Казваш, че първият запис в базата не се записва на латиница, така ли ?
Ако това е така, опитай се да направиш записа през конзолата на mysql или през phpmyadmin и кажи резултата, след това ще умуваме по останалите проблеми
Сега пускам ксампа и проекта, сега е ок, направих няколко теста, какво е било незнам, нищо не съм променял от вчера.

По другия проблем - еми той си стои, независимо дали въвеждам текст във текстареа-та на Описание, описанието получава текста от Име, същото е и ако опитам Редакция на описанието- получавам ехото за успешно обновяване, но описанието си взема отновно текста от Име. Съответно ако редактирам Име, описанието си взема новото име от Име за описание. Т.е. каквото и име да сложа и както и да го сложа ( нов запис, или редакция ) през файла описанието си взема името от Име и това е всичко.
През конзолата, обаче не така, оттам си слагам описание, различно от името без проблем, обаче какво става, ако опитам да редактирам пак през файла - веднага отново описанието си взема текста от името, така и се презаписва в базата данни.

ReDBuLL

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 36
Re: MCF- администрация част 2
« Отговор #33 -: 18 Ноември 2011, 17:48:41 »
Да неси обърка в СКЮ-ела нещо ето ти кода виж при мен работи
if($_POST['ng']==1)
{
$name=addslashes(trim($_POST['group_name']));
$desc=addslashes(trim($_POST['desc']));
if(strlen($name)>2)
{
$id=(int)$_POST['edit_id'];
$rs=run_q('SELECT * FROM group_cat WHERE name="'.$name.'" AND group_cat_id!='.$id);
echo mysql_error();
if(!mysql_numrows($rs)>0)
{
if($id>0)
{
run_q('UPDATE group_cat SET name="'.$name.'",`desc`="'.$desc.'" WHERE group_cat_id='.$id);
echo '<h1>Групата е обновена успешно</h1>';
}
else
{
run_q('INSERT INTO group_cat (name,date_added,`desc`) VALUES ("'.$name.'","'.time().'","'.$desc.'")');
echo '<h1>Групата е добавена успешно</h1>';
}
}
else
{
//error
echo '<h1>Името съществува!</h1>';
}
}
}

ashaman

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 76
Re: MCF- администрация част 2
« Отговор #34 -: 18 Ноември 2011, 17:58:46 »
Незнам, не са ми толкова ясни нещата от конзолата като дам на sql ми дава това SELECT * FROM `group_cat` WHERE 1
но кода е същия, аз пробвах и твоите, също и направих проверка. Просто при мен не работи, ако не е във файла, да е във връзката с деск от базата тогава, това е логичното за мен, но тъй като не съм мн наясно..
Ще взема да направя едни клипче.

ashaman

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 76
Re: MCF- администрация част 2
« Отговор #35 -: 18 Ноември 2011, 18:41:50 »
Ето я цялата операция...
http://www.youtube.com/watch?v=g-nux1t7oHc

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: MCF- администрация част 2
« Отговор #36 -: 18 Ноември 2011, 21:34:39 »
Ето я цялата операция...
http://www.youtube.com/watch?v=g-nux1t7oHc

@ashaman, искам да знам дали кода който ползваш е от пост 29 ?

1. Дай да разгледам и скрипта от functions.php

2. И бих искал да знам, какъв е този код в двата тага, в value атрибута и в textContent  ? PhP, html, javascript или някакъв друг:
Код: HTML
  1. Име на група:<input type="text" name="group_name" value="' . $ed_info['name'] . '"><br/>
  2. Описание:<textarea name="desc" rows="5" cols="50">' . $ed_info['desc'] . '</textarea><br/>
  3.  
  4.  
« Последна редакция: 18 Ноември 2011, 22:07:29 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

ashaman

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 76
Re: MCF- администрация част 2
« Отговор #37 -: 19 Ноември 2011, 13:08:01 »
Аз го разгадах проблема...много много тъп  ::) Оставил съм стария  grops.php в общата, а в него имах $name=addslashes(trim($_POST['group_name']));
$desc=addslashes(trim($_POST['group_name']));
и някакво преплитане е станало. Сега го изтрих и всичко е ОК.  >:( ;D

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: MCF- администрация част 2
« Отговор #38 -: 19 Ноември 2011, 16:59:56 »
Първото нещо което трябваше да направиш в тази ситуация, е да провериш изходите от полетата преди да бъдат пуснати като заявки към базата.
По-този начин щеше да видиш, че пишеш едно а излиза друго, да не говорим че това другото всеки път е едно и също  ;)

Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

infinity1305

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 55
Re: MCF- администрация част 2
« Отговор #39 -: 26 Ноември 2011, 13:36:21 »
Здравейте отново

С първите редове искам да изкажа лични благодарности на Иван. Уроците за форума осветлиха тънкости кое как работи и смятам зелената точка за недостатъчна награда, за което поощрявам с почетна титла PHP-Ninja.

В момента стигнах тази глава от уроците, гледам/уча и зациклих в буквалния смисъл. Всичко повторено от мен работи. Всичко е ОК, но има нещо което не схванах, а това ме изнервя. Връщах записа отначало и не ме светна защо е така.Обръщам се за помощ. Това е кода. Публикувам за общо удобство.

Код: PHP
  1. <?php
  2. include'../function.php';
  3. db_init();
  4. my_adminheader('Групи форуми');
  5.  
  6. if($_POST['ng']==1)
  7. {
  8.     $name=addslashes(trim($_POST['group_name']));
  9.     $desc=addslashes(trim($_POST['desc']));
  10.     $id = (int)$_POST['edit_id'];
  11.     print_r($id);
  12.     echo '<br />';
  13.    
  14.     $rs=mysql_query('SELECT * FROM group_cat WHERE name="'.$name.'" AND group_cat_id!="'.$id.'"');
  15.     //echo mysql_error()
  16.     //print_r(mysql_num_rows($rs));
  17.    
  18.     if(!mysql_num_rows($rs)>0)//опит за въвеждане на инфо 
  19.     {
  20.        
  21.         if($id>0)
  22.         {
  23.             //обновяване на инфо
  24.             mysql_query('UPDATE group_cat SET name="'.$name.'",`desc`="'.$desc.'" WHERE group_cat_id="'.$id.'"');
  25.             echo '<p>успешно обновление</p>';
  26.         }
  27.         else
  28.         {
  29.             //въвеждане на ново инфо
  30.             mysql_query('INSERT INTO group_cat (name, date_added,`desc`) VALUES("'.$name.'", "'.time().'", "'.$desc.'")');
  31.             echo '<p>успешен запис</p>';
  32.         }
  33.     }
  34.     else
  35.     {
  36.         echo '<p>името съществува</p>';
  37.     }
  38. }
  39.  
  40. $rs = mysql_query('SELECT * FROM group_cat');
  41.  
  42. echo '<table border="1"><tr><td>Name</td><td>Desc</td><td>Edit</td></tr>';
  43.  
  44.     while($row = mysql_fetch_assoc($rs))
  45.  
  46.     {
  47.         echo '<tr><td>'.$row['name'].'</td><td>'.$row['desc'].'</td><td><a href="groups.php?mode=edit&id='.$row['group_cat_id'].'">Edit</a></tr>';
  48.     }
  49.    
  50. echo '</table>';
  51.  
  52. if($_GET['mode']=='edit') //имаме избор за редакция
  53. {
  54.     $id = (int)$_GET['id'];
  55.    
  56.     if($_GET['id']>0) //реален избор
  57.     {
  58.          $rs = mysql_query('SELECT * FROM group_cat WHERE group_cat_id='.$id);
  59.          $ed_info = mysql_fetch_assoc($rs);
  60.     }
  61. }
  62. ?>
  63.  
  64. <form method="POST" action="groups.php">
  65.     <p><input type="text" name="group_name" value="<?=$ed_info['name'] ?>"> name group</p>
  66.     <p><textarea name="desc" rows="5" cols="50"><?=$ed_info['desc'] ?></textarea></p>
  67.     <p><input type="submit" value="Запиши"></p>
  68.     <input type="hidden" name="ng" value="1">
  69.     <?php
  70.     if($_GET['mode']=='edit')//добавяме скрито поле за избор на редакция
  71.     {
  72.         echo '<input type="hidden" name="edit_id" value="'.$id.'">';
  73.     }
  74.     ?>
  75.    
  76. </form>
  77.  
  78. <?php
  79. footer();

Kaмъка о когото ударих е този ред
    $rs=mysql_query('SELECT * FROM group_cat WHERE name="'.$name.'" AND group_cat_id!="'.$id.'"');

Защо отрицанието на group_cat_id!="'.$id.'"' сработи. За да схванете какво питам трябва да гледате първите 3 минути на видеоурока. Да, там Иван обяснява, но на мен ми изглежда нелогично това условие, макар че работи. Иван обяснява така "ние трябва да проверим, дали името съществува само в записите с различно ID". В този момент се вижда таблица от БД и аз определено не виждам имена с различни ID. ID-то от формата е същото от БД, но въведеното отрицание кара нещата да работят, а когато се добавя нова група, то ID-то от формата е =0 и тогава ми става пълна мъгла с това неравенство.

Обяснете ми и не забравяйте, че всеки печели подарък от Африка.
« Последна редакция: 26 Ноември 2011, 14:04:22 от infinity1305 »

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: MCF- администрация част 2
« Отговор #40 -: 26 Ноември 2011, 14:58:52 »
Да и аз преди няколко месеца като го правих трудно схванах тази логика.Ще се опитам да ти я обясня със следния пример - категорията "php" с id=1.В първия случай имаме заявката SELECT * FROM group_cat WHERE name=php.В този случай ние не позволяваме редактирането на всички групи, чието име съвпада с "php" - независимо дали е групата, която редактираме или друга и проблема идва точно от това - искаме да редактираме само група "php" по съдържание без да и променяме името и като тръгне заявката тя вижда,че вече имаме група с такова име и ни съобщава.Трябва ни заявка, която да не се интересува от името на редактиращата се от нас групa , а такава която да търси за съвпадение по име в останалите групи.Целта в крайна сметка е да нямаме две или повече групи с едно и също име.Обаче как да разграничим редактиращата се от нас група с всички останали? - ми много просто по id-то.В случая ни трябва следната заявка: SELECT * FROM group_cat WHERE name=php AND group_cat_id!=1 - с нея казваме: виж сега търси във всички останали групи, в които имаме съвпадение по име "php" като не се интересуваш от тази която аз редактирам(group_cat_id!=редактиращата(моята)).Резултата: ако намери поле следователно резултат по-голям от 0 то имаме друга група с такова име и ни съобщава,ако ли не си редактираме групата, която искаме без да се съобразяваме от това дали я редактираме само по съдържание или по име и съдържание.Надявам се да си схванала логиката ;)
« Последна редакция: 26 Ноември 2011, 15:22:46 от abcd »

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: MCF- администрация част 2
« Отговор #41 -: 26 Ноември 2011, 15:11:58 »
Объркваш се от този ред:
Код: PHP
  1. if(!mysql_num_rows($rs)>0)

което всъщност е едно към едно с
Код: PHP
  1. if(mysql_num_rows($rs)==0)

Идеята е да няма дублиране. Преди да почне урока, Иван проверява кой запис редактира, като го търси по име. Като променяш заглавието, заявката минава, защото вече си променила името и то в действителност несъществува (туко що е било променено). Но ако тръгнеш да променяш само описанието, заглавието си остава същото и при въпросната проверка кода гърми. Затова той добавя в заявката ID-то. Затова винаги (или в повечето случай) проверката се прави на ID поле, не случайно се казва IDENTIFICATOR.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

infinity1305

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 55
Re: MCF- администрация част 2
« Отговор #42 -: 26 Ноември 2011, 15:55:27 »
След един час нищене разгадах логиката на Иван.

$id е число вследствие събмит на формата от скрито поле name="edit_id" value="'.$id.'".
SELECT * FROM group_cat WHERE name="'.$name.'" AND group_cat_id!="'.$id.'"' е условието

Случай на създаване на нова "Групи форуми" наблюдаваме следни отговори:
$id = 0
mysql_num_rows($rs) = 0
масив от mysql_fetch_assoc($rs) е празен, защото условието не връща нищо. Няма намерено име И неговото group_cat_id да не е равно на $id. Това кара кода да изпълнява заявка за въвеждане на нова група.

Опит за повторение на горното. Имаме създадена група и се опитваме да я пресъздадем. Например php с group_cat_id = 2. Наблюдаваме опита:
$id = 0
Отново е 0, защото не минава условието на $_GET за създаване на скрито поле в формата.
mysql_num_rows($rs) = 1 вече, защото условието връща един намерен отговор: php = php AND 2!=0, а щом е така влизат в сила IF-вете и логично съобщение за името съществува.

Опит за обновяване.
Избирам произволна група, да речем php с id = 2. Пиша обновленията и наблюдавам. Tогава:
$id = 2
mysql_num_rows($rs) = 0
Връща нула, защото условието не минава php = php AND 2!=2
Това кара кода да се подчини на поредното условие if($id>0). Проверката за съществуване на името не минава  и настъпва обновяването на същото име според условието на заявката - UPDATE group_cat SET name= бля бля бля.

Е много е засукано и това ми струваше над час химичене...и признавам, че такава машинация бе далеч от острия ми ум.

И раздвам награди
зелена точка за Avalanche
зелена точка за abcd

и признавам, че тъпках яко Донка сюджуци по този начин:
Код: PHP
  1. $rs=mysql_query('SELECT * FROM group_cat WHERE name="'.$name.'" AND group_cat_id!="'.$id.'"');
  2.     echo 'mysql_num_rows($rs) = ';print_r(mysql_num_rows($rs));
  3.     echo '<pre>';
  4.     echo '</pre>';
  5.     echo '<br />';
  6.    
  7.     if(mysql_num_rows($rs)>0) //опит за въвеждане на инфо 
  8.     {
  9.         echo '<p>името съществува</p>';
  10.     }
  11.     else
  12.     {
  13.         if($id>0)
  14.         {
  15.             //обновяване на инфо
  16.             mysql_query('UPDATE group_cat SET name="'.$name.'",`desc`="'.$desc.'" WHERE group_cat_id="'.$id.'"');
  17.             echo '<p>успешно обновление</p>';
  18.         }
  19.         else
  20.         {
  21.             //въвеждане на ново инфо
  22.             mysql_query('INSERT INTO group_cat (name, date_added,`desc`) VALUES("'.$name.'", "'.time().'", "'.$desc.'")');
  23.             echo '<p>успешен запис</p>';
  24.         }
  25.     }

Oх, отивам да се изрусявам, че ми побеля косата от мътене на мозък.

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: MCF- администрация част 2
« Отговор #43 -: 26 Ноември 2011, 17:23:02 »
Хубаво е, че осмисляш нещата и си задаваш въпроса "защо това е така?" ,а не просто да преписваш кода, както правят мн други,които питат в тези теми. :)

borisov87

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 40
Re: MCF- администрация част 2
« Отговор #44 -: 10 Октомври 2012, 16:48:09 »
На 7,8 и 37 ред добавих малко код , целта е да трия групите но нещо не се получава като щракна на изтрий групата си остава моля за помощ
Код: PHP
  1. <?php
  2.  
  3. include '../functions.php';
  4. my_admin_header('Групи форуми');
  5. db_init();
  6. if ($_GET['mode'] == "delete" && $_GET['id'] > 0) {
  7.  run_q('DELETE * FROM group_cat WHERE group_cat_id=' . $id);  
  8. }
  9. else {
  10. if ($_POST['ng'] == 1) {
  11.     $name = addslashes(trim($_POST['group_name']));
  12.     $desc = addslashes(trim($_POST['desc']));
  13.     if (strlen($name) < 4) {
  14.         echo '<h1>Кратко име</h1>';
  15.     } else {
  16.         $id = (int) $_POST['edit_id'];
  17.         $rs = run_q('SELECT * FROM group_cat WHERE name="' . $name . '" AND group_cat_id!=' . $id);
  18.         if (!mysql_num_rows($rs) > 0) {
  19.             if ($id > 0) {
  20.                 run_q('UPDATE group_cat SET name="' . $name . '", `desc`="' . $desc . '" WHERE group_cat_id=' . $id);
  21.                 echo '<h1>Успешно обновяване</h1>';
  22.             } else {
  23.                 run_q('INSERT INTO group_cat (name,date_added,`desc`) VALUES("' . $name . '",' . time() . ',"' . $desc . '")');
  24.                 echo '<h1>Успешен запис</h1>';
  25.             }
  26.         } else {
  27.             echo '<h1>Името съществува</h1>';
  28.         }
  29.     }
  30. }}
  31. $rs = run_q('SELECT * FROM group_cat');
  32. echo '<table border="1"><tr><td>Име</td><td>Описание</td><td>Редактирай</td><td>Изтрий</td></tr>';
  33. while ($row = mysql_fetch_assoc($rs)) {
  34.     echo '<tr><td>' . $row['name'] . '</td><td>' . $row['desc'] . '</td>
  35.   <td><a href="groups.php?mode=edit&id=' . $row['group_cat_id'] . '">Редактирай</a></td>
  36.   <td><a href="groups.php?mode=delete&id=' . $row['group_cat_id'] . '">Изтрий</a></td></tr>';
  37. }
  38. echo '</table>';
  39. if ($_GET['mode'] == "edit" && $_GET['id'] > 0) {
  40.     $id = (int) $_GET['id'];
  41.     $rs = run_q('SELECT * FROM group_cat WHERE group_cat_id=' . $id);
  42.     $ed_info = mysql_fetch_assoc($rs);
  43. }
  44.  
  45. echo '<form action="groups.php" method="POST">
  46.    Име на групата:<input type="text" name="group_name" value="' . $ed_info['name'] . '" /><br />
  47.    Описание:<textarea name="desc" rows="5" cols="50">' . $ed_info['desc'] . '</textarea><br />
  48.    <input type="hidden" name="ng" value="1" />
  49.    <input type="submit" value="Запиши" />';
  50. if ($_GET['mode'] == "edit") {
  51.     echo '<input type="hidden" name="edit_id" value="' . $_GET['id'] . '" />';
  52. }
  53. echo '</form>';
  54. footer();
  55.