[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проверка всех ид в базе implode()
agentor
приветствую..не знаю ли правилно но вот такой запрос мне не много не понятен, и незнаю ли работает он или нет.

нужно что бы через implode() проверит все Ид в базе которые запрашиваются ,если таких нет ид в базе то вернуть false and exit();

вот собственно сам запрос...вот что сумел набросать
заранее благодарен..
PHP
$wahl_ids = htmlspecialchars(implode(", ", array_map('sqlesc', $_POST["bearbfotos"])));
        $res = mysql_query ("SELECT id FROM user_fotos WHERE id IN (".$wahl_ids.")")or die("Fehler 23");
        $arr1 = mysql_fetch_assoc($res);
        $getid[] = $arr1["id"];
        if (!array($getid)){
        footer();
        exit();
        }




Спустя 7 часов, 12 минут, 58 секунд (28.08.2009 - 05:37) agentor написал(а):
также не понятно как можно вывести весь список ИД( имлоде в while(), что бы не повторялось тоже самое.
Я вывел но покатывает одну и ту же фотку

PHP
echo "<a href=fotos/a_".$getid[]."_b.jpg?t=".time()." rel=facebox><img src=fotos/a_".$getid[]."_m.jpg?t=".time();

Спустя 33 минуты, 51 секунда (28.08.2009 - 06:11) hara_ написал(а):
PHP
htmlspecialchars(implode(", ", array_map('sqlesc', $_POST["bearbfotos"])));

- зачем вот это всё? что делат функция sqlesc? и главное если там только цифры то нафига htmlspecialchars ? - по привычке?
ну на самом деле если в итоге в $wahl_ids строка вида 1,2,3,4,5 и т.д. то запрос верный.

PHP
while($arr1 = mysql_fetch_assoc($res)){
        $getid[] = $arr1["id"];
}


фотки выводите тоже в цикле и (о новость!) нужно указывать индекс массива.

Спустя 1 час, 12 минут, 15 секунд (28.08.2009 - 07:23) twin написал(а):
Судя по названию функции (sqlesc()), это какое то экранирование. Если так, то как минимум нужно обрмить поля апострофами, и, как верно замечено, htmlspecialchars() тут явно не к месту:
PHP
$res = mysql_query ("SELECT `id`
                    FROM `user_fotos` 
                    WHERE id IN ('"
. implode("', '", array_map('sqlesc', $_POST["bearbfotos"])."')
                    "
)or die("Fehler 23");

Однако, с вероятностью 99% можно так же предположить, что id все таки имеет числовой формат, а не строковый Тогда тут на много уместнее функция intval() и без апострофов:
PHP
$res = mysql_query ("SELECT `id`
                    FROM `user_fotos` 
                    WHERE id IN ("
. implode(", ", array_map('intval', $_POST["bearbfotos"])."')
                    "
)or die("Fehler 23");

А вот собирать значения в массив, чтоб потом опять его разбирать в цикле, тут явный перебор. Достаточно простой конкатенации:
PHP
while($arr1 = mysql_fetch_assoc($res))
$photos .= "<a href=fotos/a_". $arr1['id'] ."_b.jpg?t=".time()." rel=facebox><img src=fotos/a_". $arr1['id'] ."_m.jpg?t=".time();

Спустя 8 часов, 23 минуты, 54 секунды (28.08.2009 - 15:47) agentor написал(а):
спасибо вам обоим огромное...вроде помогло,. но главное я всё таки НЕ УЗНАЛ
Как проверить?
если через implode() из базы хоть какого нибудь ID нету вывести Error?

примерно так

PHP
if (!array($arr1)){
        echo"Error";
        exit();
        }

Спустя 53 минуты, 47 секунд (28.08.2009 - 16:41) hara_ написал(а):
нельзя же быть таким ленивым что бы не заглянуть
на эту страницу http://www.php.net/manual/en/book.mysql.php

найдите функцию которая подсчитывает количество результатов, -
список не такой уж и большой

Спустя 2 часа, 21 минута, 13 секунд (28.08.2009 - 19:02) Michael написал(а):
Используй
PHP
$res mysql_query ("SELECT count(`id`)
                    FROM `user_fotos` 
                    WHERE id IN ('"
implode("', '"array_map('sqlesc'$_POST["bearbfotos"])."')
                    "
)or die("Fehler 23");
$row=mysql_fetch_row($res);
$kol=$row[0];// Количество записей
if ($kol==0) {
        echo
"Error";
        exit();
}


Спустя 1 минута, 53 секунды (28.08.2009 - 19:04) Гость_hara написал(а):
Michael
а как потом после этого начинать цикл если $kol > 0 ?

Спустя 5 минут, 59 секунд (28.08.2009 - 19:10) Michael написал(а):
Код автора:
PHP
$wahl_ids htmlspecialchars(implode(", "array_map('sqlesc'$_POST["bearbfotos"])));
        
$res mysql_query ("SELECT id FROM user_fotos WHERE id IN (".$wahl_ids.")")or die("Fehler 23");
        
$arr1 mysql_fetch_assoc($res);
        
$getid[] = $arr1["id"];
        if (!array(
$getid)){
        
footer();
        exit();
        }

Где у нас тут цикл? blink.gif
Если данные хочешь обрабатывать в цикле то select id, а количество проверять по mysql_num_rows($res);

Спустя 23 секунды (28.08.2009 - 19:11) agentor написал(а):
Цитата (hara_ @ 28.08.2009 - 13:41)
нельзя же быть таким ленивым что бы не заглянуть
на эту страницу http://www.php.net/manual/en/book.mysql.php

найдите функцию которая подсчитывает количество результатов, -
список не такой уж и большой


эта? mysql_fetch_row
и пручём тут леновисть? не говорите загадками..
я спрашивал о проверки ид из базы а не о количетсве реультатах..

Спустя 6 минут, 13 секунд (28.08.2009 - 19:17) Гость_hara написал(а):
Michael
Где цикл ? а код дальше ? как выводить результаты?

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

agentor
как уже сказал Michael mysql_num_rows, - жаль конечно что сказал, - было бы лучше если бы вы догадались сами.
вы просто проверяете если запрос вернуль ноль рядов(строк) - значит id нет

Спустя 1 минута, 36 секунд (28.08.2009 - 19:18) Гость_hara написал(а):
PS да про шанс по поводу нуля, это сразу говорю тупанул, - ибо такого id никогда не будет,
а в остальном вопрос остаётся в силе

Спустя 5 минут, 46 секунд (28.08.2009 - 19:24) Michael написал(а):
Гость_hara кинь уже agentorу код, будь человеком smile.gif .

Р.S.
Опередил на долю секунды ты меня, хотел сказать про "пусто".

Спустя 6 минут (28.08.2009 - 19:30) Гость_hara написал(а):
ну а чего
agentor берёте вот это
PHP
if (!array($getid)){
        
footer();
        exit();
        }

и меняете первую строку
что вам нужно для этого знать:

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

Спустя 8 минут, 42 секунды (28.08.2009 - 19:39) agentor написал(а):
так что ли? не совсем понял

PHP
$num_rows mysql_num_rows($res);

        if (!
$num_rows){
        
header("location: index.php?d=benutzerdaten&action=fotos");
        
footer();
        exit();
        }

Спустя 2 минуты, 52 секунды (28.08.2009 - 19:42) twin написал(а):
Цитата
так что ли? не совсем понял

Вот лично я вообще ничего не понял Из вопросов имею ввиду. Можно как то обозначить свои желания? Что нужно получить и из чего?

Спустя 2 минуты, 14 секунд (28.08.2009 - 19:44) Гость_hara написал(а):
можно только компактнее
if!(mysql_num_rows($res))... и т.д.

а вот насчёт header поподробнее
header - а зачем он нужен? - ну или если нужен, - то не нужно тогда footer()

ну а в целом верно

Спустя 6 минут, 31 секунда (28.08.2009 - 19:50) agentor написал(а):
Цитата (twin @ 28.08.2009 - 16:42)
Цитата
так что ли? не совсем понял

Вот лично я вообще ничего не понял Из вопросов имею ввиду. Можно как то обозначить свои желания? Что нужно получить и из чего?

я просил в помощи проверки всех ИД из базы которые были получены через implode(),
если какого либо ИД не существует,(хоть одного) выдать Ошибку.

Вы мне указали путь вывода ошибки при количестве результатов.
т е если результов вобще нету, то выводится Ошибка..но может быть 1 Ид верный а другой неверный и что тогда?

Спустя 7 минут, 17 секунд (28.08.2009 - 19:58) Гость_hara написал(а):
нуу приехали.. да вопрос twina оказался очень нужен )

если id уникальное значение и не повторяется то
if(mysql_num_rows($res) == count(тот массив который в IN лежит)){
//выводим результаты
}else{
//ошибка
}

Спустя 21 час, 37 минут, 56 секунд (29.08.2009 - 17:36) agentor написал(а):
спасибо огромное за некоторые разяснения..
у меня тут ещё возник вопрос по поводу имплоде.

Пример; имеется 2 текстовых поля в котором разные тексты.

1 текст: Маша (1 поле) принадлежит к Ид= 10

2й текст: Коля (2 поле) принадлежит к ИД = 20

каким образом можно сделать так или возможно что бы при изминение текста в поле изминялся текст именно в том ИД к которому он принадлежит.
Я делал так к примеру

PHP
$f_titel = implode(",",array_map('sqlesc',array($_POST["fototitel"])));


<
input type=text name=fototitel[] style=width:400px value="".htmlspecialchars($arr3['fototitel']).



далее совсем сложно с запросом обновления именно определённого текста к ид которому он принадлежит


у меня не получается составить верный запрос.. sad.gif

вобще верно ли я всё записал в том числе и самой форме ввода текста?
все переменныэ с того же запроса что выклал в первых постах

PHP
while ($arr4 = mysql_fetch_assoc($res)){
            mysql_query ("UPDATE user_fotos SET fototitel = ".$f_titel." WHERE id IN (".$wahl_ids.")");
}


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

Спустя 2 часа, 57 минут, 42 секунды (29.08.2009 - 20:33) Гость_hara написал(а):
PHP
...    where `id`=$arr4['id'];

Одно хорошее правило
часть первая:
-> всегда все значения в формах должны быть в кавычках
неверно:
HTML
<input type=text name=fototitel[] style=width:400px ///

верно:
HTML
<input type="text" name="fototitel[]" style="width:400px" ///

часть вторая:
-> всегда и все имена столбцов и таблиц в SQL запросах должны быть в обратных кавычках
неверно:
SQL
mysql_query ("UPDATE user_fotos SET fototitel = .........

верно:
SQL
mysql_query ("UPDATE `user_fotos` SET `fototitel` = ...........

Спустя 34 минуты, 44 секунды (29.08.2009 - 21:08) twin написал(а):
Цитата
быходит 2 имплоде для текста, и для ид...как всё йто добро можно довести до ума?

Ты редактируешь одну запись, а в условие запроса ставишь несколько. Так не бывает. Если редактировать несколько записей одним действием, то нужно несколько запроов, по одному на каждую редактируемую запись. В цикле. Так же точно разбирается массив из формы, как при выборке, и вместо вывода подставляется запрос.

Спустя 3 дня, 17 минут, 55 секунд (2.09.2009 - 21:26) agentor написал(а):
извините что не ответил .был в больнице 3 дня..не до кода было..
То что вы описали , ув ТВИН именно мне так и необходимо, что бы можно было редактировать несколько текстов и сохранять их одним действием.
Уважаемый твин немогли бы вы поробнее изложить как мне такое мозжно сделать.

Спустя 1 день, 15 часов, 4 минуты, 8 секунд (4.09.2009 - 12:30) twin написал(а):
Ну самый простой вариант разобрать массив $_POST['fototitel'] и сделать по запросу в каждой интерации:


PHP
echo  '<input type=text name=fototitel['.$id.'] style=width:400px value="'.htmlspecialchars($arr3['fototitel']).'" />';

foreach(
$_POST['fototitel'] as $id => $f_titel)
mysql_query ("UPDATE user_fotos SET fototitel = ".$f_titel." WHERE id = ".(int)$id);

Как то так примерно.

Спустя 29 минут, 35 секунд (4.09.2009 - 13:00) agentor написал(а):
twin - ты гений..вроде немного заработало в ту сторону.
пока разбираю понемного..
Возник вопрос с данной функцией.
У меня также кнопка имеется удаления фото, и использую функцию такую

PHP
<input type=hidden name="fotolosch[]\" value=\"".$arr2['id'].



PHP
$losch_ids implode(", "array_map('sqlesc'$_POST["fotolosch"]));

                
$res22 mysql_query ("SELECT id FROM user_fotos WHERE id IN (".$losch_ids.")")or die("Fehler 2");


                while (
$arr3 mysql_fetch_assoc($res22)){
                
do_mysql_query("DELETE FROM user_fotos WHERE id = ".sqlesc($arr3["id"]))or die ("Fehler 3");

                if(
is_file("fotos/a_".$arr3["id"]."_b.jpg")) {
                
unlink("fotos/a_".$arr3["id"]."_b.jpg");
                }
                if(
is_file("fotos/a_".$arr3["id"]."_m.jpg")) {
                
unlink("fotos/a_".$arr3["id"]."_m.jpg");
                }
                if(
is_file("fotos/a_".$arr3["id"]."_b.png")) {
                
unlink("fotos/a_".$arr3["id"]."_b.jpg");
                }
                if(
is_file("fotos/a_".$arr3["id"]."_m.png")) {
                
unlink("fotos/a_".$arr3["id"]."_m.jpg");
                }
                echo 
"<br>".genMsg('03/16/02','Das Foto/s  wurde/n erfolgreich gelцscht.')."";
                
print_r("".$losch_ids."");
                
footer();
                
header("Refresh: 5; url=index.php?d=benutzerdaten&action=fotos");
                exit();
                }


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

Спустя 8 минут, 36 секунд (4.09.2009 - 13:08) twin написал(а):
Удалять можно так же как и при выборке, то есть `id` IN ('.implode(',',$id).')

Спустя 54 минуты, 35 секунд (4.09.2009 - 14:03) agentor написал(а):
хм..странно но у меня передаются в форме только числовые значения.
Тесктовые значения не работают.
только цифры...если ранее заданые были цифры и я задаю буквы то их не обновляет..

вот как на данный момент
PHP
@$f_titel implode(", "array_map('sqlesc'$_POST["fototitel"]));
 @
$f_beschr implode(", "array_map('sqlesc'$_POST["fotobeschr"]));


PHP
while($arr3 mysql_fetch_assoc($res2)){
$id $arr3['id'];
$id2 $arr3['id'];
echo
"<input type=\"text\" name=fototitel[".$id."] style=width:400px value=\"".htmlspecialchars($arr3['fototitel'])."\" maxlength=40>
<textarea cols=\"50\" rows=\"4\" name=\"fotobeschr["
.$id2."]\">".htmlspecialchars($arr3['fotobeschr'])."</textarea>";
}


PHP
if($button!=""){

                
header("location: index.php?d=benutzerdaten&action=fotos");
                exit();
                }else {

                foreach(
$_POST['fototitel'] as $id => $f_titel){
                
mysql_query ("UPDATE user_fotos SET fototitel = ".$f_titel." WHERE id = ".(int)$id);
                }

                foreach(
$_POST['fotobeschr'] as $id2 => $f_beschr){
                
mysql_query ("UPDATE user_fotos SET fotobeschr = ".$f_beschr." WHERE id = ".(int)$id2);
                }
            }



Спустя 12 минут, 59 секунд (4.09.2009 - 14:16) twin написал(а):
А разве id может быть строковым? Вообще (int) для того и стоит, чтобы ничего кроме цифр не пустить. Это для безопасности.
И зачем тут разные?
PHP
$id $arr3['id'];
$id2 $arr3['id'];

Спустя 5 минут, 53 секунды (4.09.2009 - 14:22) agentor написал(а):
А разве id может быть строковым? Вообще (int) для того и стоит, чтобы ничего кроме цифр не пустить. Это для безопасности.
И зачем тут разные?
PHP
$id = $arr3['id'];
$id2 = $arr3['id'];


один для заголовка другой для описания - на всякий случай сделал разные для примера.
Так как мне тогда текст менять? если тока числовые значения можно сменить?

Спустя 31 минута, 52 секунды (4.09.2009 - 14:54) twin написал(а):
Я ничё не понял. Меняешь знчение поля в строке, которую выбираешь по идентификатору... Какие проблемы... В id толькол цифры, а в поле все что хочешь.

Спустя 38 минут, 55 секунд (4.09.2009 - 15:33) agentor написал(а):
как? как я могу передать текст? я совсем запутался что то..в том то и дело что в поле я вожу текст а передаётся тока ИД

Спустя 3 часа, 57 минут, 35 секунд (4.09.2009 - 19:30) twin написал(а):
Сделай так в начале скрипта:
PHP
<pre>
<?
php
print_r
($_POST);
?>
</pre>

и посмотри, что в массиве POST. Тогда наверное станет яснее.

Спустя 4 часа, 42 минуты, 5 секунд (5.09.2009 - 00:12) agentor написал(а):
как можно это разобрать? тест не изменяется в базе данных,тока числовые значения..

PHP
Array
(
    [d] => benutzerdaten
    
[action] => fotos
    
[type] => fotoedit
    
[bearbfotos] => Array
        
(
            [0] => 84
            
[1] => 83
            
[2] => 82
        
)

    [button_edit] => Andern
)



PHP
Array
(
    [
d] => benutzerdaten
    
[action] => fotos
    
[type] => fotoedit
    
[button_edit] => edit
    
[bearbfotos] => Array
        (
            [
0] => 83
            
[1] => 84
            
[2] => 82
        
)

    [
sure] => enteredit
    
[fototitel] => Array
        (
            [
83] => test1
            
[84] => test2
            
[82] => test3
        
)

    [
fotobeschr] => Array
        (
            [
83] => test11
            
[84] => test22
            
[82] => test33
        
)

    [
enteredit] => Speichern
)

Спустя 7 часов, 57 минут, 25 секунд (5.09.2009 - 08:10) twin написал(а):
Структуру таблицы предъявите, гражданин))

Спустя 1 час, 37 минут, 7 секунд (5.09.2009 - 09:47) agentor написал(а):
PHP
CREATE TABLE `user_fotos` (
  `
idbigint(20NOT NULL auto_increment,
  `
userbigint(20NOT NULL,
  `
datumbigint(20NOT NULL,
  `
fototitelvarchar(200collate latin1_general_ci NOT NULL,
  `
fotobeschrvarchar(400collate latin1_general_ci NOT NULL,
  
PRIMARY KEY  (`id`)
)
 ENGINE=MyISAM AUTO_INCREMENT=6;



я в растройстве...у меня ничего так и не вышло unsure.gif

Спустя 1 час, 59 минут, 33 секунды (5.09.2009 - 11:46) twin написал(а):
Как то так:
PHP
<form action="" method="post">
<?
php
if(isset($_POST['save']))
{
    foreach($_POST['fototitel'] as $id => $f_titel)
    mysql_query ("UPDATE user_fotos 
                  SET `fototitel` = '"
. sqlesc($f_titel) ."', 
                  `fotobeschr` = '"
. sqlesc($_POST['fotobeschr'][$id]) ."'
                  WHERE id = "
.(int)$id);
}



$res = mysql_query("SELECT * FROM `user_fotos`");

while(
$row = mysql_fetch_assoc($res))
echo '<input type="text" name=fototitel['. $row['id'] .'] style="width:400px" value="'. htmlspecialchars($row['fototitel']) .'" maxlength="40" /><br>
<textarea cols="50" rows="4" name="fotobeschr['
. $row['id'] .']" >'. htmlspecialchars($row['fotobeschr']) .'</textarea><br>';
?>
<br />
<input name="save" type="submit" />
</form>

Спустя 15 часов, 20 минут, 24 секунды (6.09.2009 - 03:07) agentor написал(а):
спасибо..вроде разобрался...слава богу.я в пронципе таким построением обработки данных ещё никогда не занимался тока по отдельности,пойтому так сложно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.