Есть бд. Допустим actor. Нам нужно проверить, тот пост, что пришёл из формы. Если такое значение в поле есть ничего не выполняется. Если нет, то заносится новая запись. Код (Text): if (!empty($_POST['actors'])) { $res = $this->admin->sqlSelect('*', $db_pre.'actors', "name='{$_POST['actors']}'", '', 0, 1); $result = mysql_result($res); if(!isset($result)){ $this->admin->sqlInsert($db_pre.'actors', 'name', "'{$_POST['actors']}'"); } } Что я не так делаю?
mysql_num_rows И вы наверника не понимаете, для чего нужен isset, у вас всегда будет true =))) даже если пустота придет... Вернет false только тогда, когда переменная не будет за ранее определена. Код (PHP): if(!empty($_POST['actors'])) { $res=$this->admin->sqlSelect('*', $db_pre.'actors', "name='{$_POST['actors']}'", '', 0, 1); if(!mysql_num_rows($res)){ $this->admin->sqlInsert($db_pre.'actors', 'name', "'{$_POST['actors']}'"); } }
И не говорите. Ну или попробуйте обойти кавычки. Они есть. ТС: Это делается без всяких скриптов на уровне СУБД. Варианты INSERT IGNORE... или ON DUPLICATE KEY UPDATE. Но второй вариант сложнее, поскольку кей должен быть unique. Боюсь что в рамках вашего прелестного фреймворка не светит ни один. Код (Text): if(!isset($result)){ Оно всегда isset. В случае облома is set to false, в случае успеха - true. Что не свидетельствует об отсутствии записей, а только показывает как прошел сам запрос. Чтобы проверить сколько записей пришло - см выше. Добавлено спустя 4 минуты 35 секунд: А, да, там же опять этот милый класс. Короче, вам надо узнать где у него кнопка - которая вернет количество записей. Это просто потрясающе как народ умудряется бегать за какими-то чудесными обхектами, изучение и запоминание свойств и методов которых заменяет изучение и запоминание свойств и методов первоисточника.
Your, спасибо, я поняла, вы как всегда мне помогли, дав короткий, но информативный ответ =) deblogger, много информации, заставили задуматься, почитать про INSERT IGNORE и ON DUPLICATE KEY UPDATE, в целом тоже полезно, благодарю. igordata справедливое замечание, буду думать. Добавлено спустя 12 минут 1 секунду: igordata Хотя нет, чего это я... Не справедливое и думать я не буду, у меня проверка происходит в пхп. Код (Text): public function preString($str, $specchars=0, $del_bad_ascii=1, $slashes=1) { if (!empty($str)) { if (get_magic_quotes_gpc()) $str = stripslashes($str); if ($specchars) $str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); if (!is_int($str) && $slashes) $str = str_replace(array("'"), array("\'"), $str); if ($del_bad_ascii) { $str = str_replace(array("\r\n", "\r", "\n", "\t"), ' ', $str); $str = trim($str); } return $str; } } Код (Text): public function addMovie() { global $db_pre, $lang_admin, $allowed_extensions, $time, $lang_id, $hash; $this->checkCSRF(); $text_fields = array('descr'); foreach ($text_fields as $field_name) { $value[$field_name] = $this->utils->unescapeTagInnerHTML($_POST[$field_name]); $value[$field_name] = $this->utils->preString($value[$field_name], false, false); $value[$field_name] = ((substr($value[$field_name], -6)=='<br />')? substr($value[$field_name], 0, -6): $value[$field_name]); } if (empty($_POST['original_title'])) { $error[] = $lang_admin['name_err']; } else { $value['original_title'] = $this->utils->preString($_POST['original_title'], true); } $value['ru_title'] = $this->utils->preString($_POST['ru_title'], true); $value['en_title'] = $this->utils->preString($_POST['en_title'], true); $value['az_title'] = $this->utils->preString($_POST['az_title'], true); if (empty($_POST['descr'])) {$error[] = $lang_admin['short_err'];} $value['link'] = $this->utils->preString($_POST['link'], true); $value['three_d'] = (empty($_POST['three_d'])? '0': '1'); if (!is_array($_POST['cid']) || !$this->utils->checkId($_POST['cid'])) $error[] = $lang_admin['cid_err']; else $value['cid'] = $_POST['cid']; $value['show_date'] = strtotime($_POST['show_date']); $value['movie_year'] = $this->utils->preString($_POST['movie_year'], true); $value['az_country'] = strtotime($_POST['az_country']); $value['ru_country'] = strtotime($_POST['ru_country']); $value['usa_country'] = strtotime($_POST['usa_country']); $value['status'] = (empty($_POST['status'])? '0': '1'); $value['ordering'] = $this->maxValue($db_pre.'movie')+1; $value['add_by'] = $_SESSION[$hash]['sess_id']; $value['add_date'] = $time; if (is_array(@$error)) { $this->utils->showNotice('error', $error); $value['error'] = true; return $value; } else { foreach ($_FILES as $input=>$file) { if (!empty($file['name'])) { $value[$input] = $this->utils->fileUpload($_FILES[$input]['name'], $_FILES[$input]['tmp_name'], '../'.$this->upload.'/category/thumbs', $allowed_extensions['images'], 'move'); } } foreach ($value as $f => $v) { if (!in_array($f, array('cid'))) { if (!empty($fields)) { $fields.=','; $values.=','; } $fields.='`'.$f.'`'; $values.=(($v==='NULL')? $v: "'$v'"); } } // $id = $this->admin->sqlInsert($db_pre.'movie', $fields, $values); if ($id) { $cats_num = count($value['cid']); for ($i=0; $i<$cats_num; $i++) { $add_arr[] = $value['cid'][$i].','.$id; } // $this->admin->sqlInsert($db_pre.'category_article', '', $add_arr); /* сижу на работе и мне так хреново, пытаюсь писать, всё это не ново, к тому же коллеги с работы съебали, останусь одна, упорюсь я грибами */ /* ACTORS*/ $mystring = $_POST['actors']; $findme = ','; $pos = strpos($mystring, $findme); if ($pos === false) { if(!empty($_POST['actors'])) { $res=$this->admin->sqlSelect('*', $db_pre.'actors', "name='{$_POST['actors']}'", '', 0, 1); if(!mysql_num_rows($res)){ $id_act = $this->admin->sqlInsert($db_pre.'actors', 'name', "'{$_POST['actors']}'"); $this->admin->sqlInsert($db_pre.'bunch_movie', 'mid, act_id, type', "'{$id}', '{$id_act}', 'actor'"); } } } else { $str = $_POST['actors']; $actors_array = explode(',', $str); foreach ($actors_array as $key => $value){ if(!empty($value)) { $res=$this->admin->sqlSelect('*', $db_pre.'actors', "name='{$value}'", '', 0, 1); if(!mysql_num_rows($res)){ $id_act = $this->admin->sqlInsert($db_pre.'actors', 'name', "'{$value}'"); $this->admin->sqlInsert($db_pre.'bunch_movie', 'mid, act_id, type', "'{$id}', '{$id_act}', 'actor'"); } } } } /* DIRECTOR*/ $mystring_dir = $_POST['director']; $findme_dir = ','; $pos_dir = strpos($mystring_dir, $findme_dir); if ($pos_dir === false) { if(!empty($_POST['director'])) { $res=$this->admin->sqlSelect('*', $db_pre.'actors', "name='{$_POST['director']}'", '', 0, 1); if(!mysql_num_rows($res)){ $id_act = $this->admin->sqlInsert($db_pre.'actors', 'name', "'{$_POST['director']}'"); $this->admin->sqlInsert($db_pre.'bunch_movie', 'mid, act_id, type', "'{$id}', '{$id_act}', 'director'"); } } } else { $str = $_POST['director']; $actors_array = explode(',', $str); foreach ($actors_array as $key => $value){ if(!empty($value)) { $res=$this->admin->sqlSelect('*', $db_pre.'actors', "name='{$value}'", '', 0, 1); if(!mysql_num_rows($res)){ $id_act = $this->admin->sqlInsert($db_pre.'actors', 'name', "'{$value}'"); $this->admin->sqlInsert($db_pre.'bunch_movie', 'mid, act_id, type', "'{$id}', '{$id_act}', 'director'"); } } } } $this->addToSearch('a', $lang_id[$this->deflang], $id, $value['title'].' '.$value['descr'], $value['status'], $value['show_date']); $this->utils->showNotice('success', $lang_admin['add_suc']); // $this->utils->redirect('?action=edit_movie&'.time()); print_r($actors_array); } else { return false; } } }
Пост обрабатывается функцией preString(), разве не достаточно? Нет, ну может я конечно и не права, я только начинаю...
Ой ну я прям нимагу у тебя талант к поэзии.Не обращай внимание на этих программистов Девушка а что вы скажете если я приглашу вас на чашечку кофе По теме: нет не достаточно
[pandora], еще такой вопрос зачем вы используете ООП и GLOBAL ? Вижу как хочется тебе программировать, но ты не успела освоиться-это нормально, умница, что познаешь функционал, только вот нужно использовать его разумнее, в практике ты научишься, но не сразу, так не бывает.) Но советую лишнего не выдумывать, а понять более глубже реализацию. И не писать ничего непригодного. Внимательно изучить обработку строк при записи в базу данных и вывода из нее.
А теперь серьезно: Почитай здесь php.net/manual/ru/function.get-magic-quotes-gpc.php в частности список изменений. Скажи откуда этот код? Обычно маг. кавычки отключают что бы не мешали и разрабатывают приложение.Для защиты от sql injection используется mysql_real_escape_string или ей подобные в зависимости от используемого интерфейса. Что это? Про глобалс Your написал... Добавлено спустя 9 минут 20 секунд: Мда... как насчет кофе?