помогите с циклом... Цикл надо выполнять до тех пор пока $chars[$i] не станет равной пустой записи. Какой вариант правильный, первый или второй?
1.
while ($chars[$i]='');
2.
while ($chars[$i]!='');
п.с. заранее спасибо...
п.с.с. мне кажется что первый вариант правильный... но т.к. не сплю уже 2 день, голова не варит и начали терзать сомнения :/
Спустя 2 минуты, 5 секунд (12.02.2012 - 21:06) inpost написал(а):
= - это присваивание(!).
while - выполняется, пока TRUE
while - выполняется, пока TRUE
Спустя 1 минута, 41 секунда (12.02.2012 - 21:07) php-down написал(а):
может NULL лучше исользнуть ?
Спустя 3 минуты, 21 секунда (12.02.2012 - 21:11) inpost написал(а):
0 is null
Спустя 2 минуты, 19 секунд (12.02.2012 - 21:13) opalaman написал(а):
Цитата (inpost @ 12.02.2012 - 18:06) |
= - это присваивание(!). smile.gif while - выполняется, пока TRUE smile.gif |
а кодом не поможете, как лучше это отобразить?
мб так:
while ($chars[$i]=='');
Спустя 4 минуты, 53 секунды (12.02.2012 - 21:18) inpost написал(а):
а смысл прогонять цикл в пустую?
Спустя 2 минуты, 11 секунд (12.02.2012 - 21:20) walerus написал(а):
while ( trim( $chars[$i] ) == '' )
{
// Выполнять пока $chars[$i] равно пустоте и остановиться когда в $chars[$i] хоть что то будет
}
while ( trim( $chars[$i] ) != '' )
{
// Выполнять пока в $chars[$i] хоть что то есть, и остановиться когда $chars[$i] пусто
}
Спустя 4 минуты, 4 секунды (12.02.2012 - 21:24) opalaman написал(а):
Цитата (inpost @ 12.02.2012 - 18:18) |
а смысл прогонять цикл в пустую? smile.gif |
Вы наверное думаете что это весь код?) Если да, то это не так...)
Вот весь код:
if (isset($_REQUEST["tags"]))
{
$tags = $_REQUEST["tags"];
$chars = explode(",", $tags);
$i=0;
do
{
$result_chars = trim($chars[$i]);
$result_choice_up = mysql_query("SELECT tag_name, count
FROM tags WHERE tag_name='$result_chars'");
if (mysql_num_rows($result_choice_up)>0)
{
$myrow_choice_up = mysql_fetch_assoc($result_choice_up);
$new_count = $myrow_choice_up['count']+1;
$result = mysql_query ("UPDATE tags SET count='$new_count'
WHERE tag_name='$result_chars'");
$i++;
}
else
{
$result = mysql_query("INSERT INTO tags (tag_name, count)
VALUES ('$result_chars', 1)",$db);
$i++;
}
}
while ($chars[$i]!='');
}
else $tags = '';
Всё вроде хорошо, даже работает... но выдает "Notice: Undefined offset: 1 in D:\www\site\add_article.php on line 100". Line 100 это вот эта строчка "while ($chars[$i]!='');" Вот и решил спросить совета как лучше завершить цикл.
Спустя 20 минут, 47 секунд (12.02.2012 - 21:45) walerus написал(а):
while (isset( $chars[$i] ) && $chars[$i] != '' );
Спустя 3 минуты, 40 секунд (12.02.2012 - 21:49) opalaman написал(а):
Цитата (walerus @ 12.02.2012 - 18:45) |
while (isset( $chars[$i] ) && $chars[$i] != '' ); |
разве это и будет означать "цикл выполняем до тех пор пока $chars[$i] не станет равной пустой записи"?
Спустя 3 минуты (12.02.2012 - 21:52) walerus написал(а):
while ( isset( $chars[$i] ) || $chars[$i] != '' );- вот так вернее
Спустя 2 минуты, 42 секунды (12.02.2012 - 21:54) opalaman написал(а):
С этим вариантом не выдает "Notice: Undefined offset: 1 in D:\www\site\add_article.php on line 100"
а с этим:
while (isset( $chars[$i] ) && $chars[$i] != '' );
а с этим:
while ( isset( $chars[$i] ) || $chars[$i] != '' );выдает... :(
Спустя 6 минут, 38 секунд (12.02.2012 - 22:01) walerus написал(а):
Перед do поставить
вместо while ()...
$update_table = true;
вместо while ()...
if ( isset( $chars[$i] ) )
{
if ( trim( $chars[$i] ) == '' )
$update_table = false;
}
else
$update_table = false;
while ($update_table);
Спустя 59 минут, 43 секунды (12.02.2012 - 23:01) opalaman написал(а):
Цитата (walerus @ 12.02.2012 - 19:01) |
Перед do поставить $update_table = true; вместо while ()... if ( isset( $chars[$i] ) ) { if ( trim( $chars[$i] ) == '' ) $update_table = false; } else $update_table = false; while ($update_table); |
что-то не то... сплошные ошибки пошли.
Спустя 1 час, 33 минуты, 55 секунд (13.02.2012 - 00:34) walerus написал(а):
opalaman покажи полностью код, как ты исправил.
Спустя 11 минут, 37 секунд (13.02.2012 - 00:46) walerus написал(а):
Вообще перепиши так
<?php
if ( isset( $_REQUEST["tags"] ) )
{
$tags = $_REQUEST["tags"];
$chars = explode(",", $tags);
$i = 0;
$update_or_insert = true; // По умолчанию запускаем обновление или добавление
while( $update_or_insert )
{
$result_chars = trim( $chars[$i] );
$result_choice_up = mysql_query( "SELECT tag_name, count FROM tags WHERE tag_name='$result_chars'" );
if ( mysql_num_rows( $result_choice_up ) > 0 )
{
$myrow_choice_up = mysql_fetch_assoc( $result_choice_up );
$new_count = $myrow_choice_up['count']+1;
$result = mysql_query ( "UPDATE tags SET count='$new_count' WHERE tag_name='$result_chars'" );
$i++;
}
else
{
$result = mysql_query( "INSERT INTO tags (tag_name, count) VALUES ('$result_chars', 1)", $db );
$i++;
}
if ( isset( $chars[$i] ) ) // Если $chars[$i] существует, переходим к проверке - "что внутри"
{
if ( trim( $chars[$i] ) == '' )
$update_or_insert = false; // Если внутри пусто, то заканчиваем цикл
}
else
$update_or_insert = false;// Если $chars[$i] НЕ существует, то заканчиваем цикл
}
else $tags = '';
}
else
echo "Теги не введены.";
Спустя 25 минут, 58 секунд (13.02.2012 - 01:12) opalaman написал(а):
Цитата (walerus @ 12.02.2012 - 21:34) |
opalaman покажи полностью код, как ты исправил. |
заработало =) не там скобку закрыл... получалось что DO закончилася и начался сразу IF...
а можешь в кратце объяснить что за манипуляции мы сделали?
Спустя 2 минуты, 36 секунд (13.02.2012 - 01:15) opalaman написал(а):
walerus
Спасибо за помощь.
Спасибо за помощь.
Спустя 10 часов, 11 минут, 46 секунд (13.02.2012 - 11:26) walerus написал(а):
opalaman - Ну я как бы подробно оставил комментарии по коду, что именно тебе непонятно ? )