Всем привет, у меня возникла проблема с этим кодом: Код (Text): $proverka = mysqli_query($conDB, 'SELECT * FROM `buy` WHERE `name` = "'.$name.'" AND `data` = "n1"'); if(mysqli_num_rows($proverka) < 1) { echo '<a>Купите N1 для покупки N2</a>'; } else { if ($groups != 'n2'); if ($price > 0) { $url = 'https://выпилено.нафиг/pay/здесь есть ключ?sum='.$price.'&account='.$_POST['nickname'].'.'.$groups.'&signature='.getFormSignature(($_POST['nickname'].'.'.$groups), 'Покупка '.$name, $price, 'и здесь ключ').'&desc=Покупка '.$name; echo '<input type="submit" value="Купить за '.$price.' руб." class="btn bnt-new btn-lg btn-block">'; } else { echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">Слишком низкая цена</button>'; //header('Location: /'); } } } При покупке у игрока должна выполняться проверка по нику, если он покупает привилегию N2, то для этого ему нужно купить привилегию N1, но почему-то все время показывает Код (Text): Купите N1 для покупки N2 А нужно чтобы если он не покупает привилегию N2 то ему просто пишет "купить за", а если покупает N2 и его нет в базе покупателей с такой группой, то ему должно писаться "Купите N1 для покупки N2"
Что ты хотел выразить вот этим запросом? Код (Text): SELECT * FROM `buy` WHERE `name` = "'.$name.'" AND `data` = "n1" и чему равен $name? Не зная этого хз что тебе посоветовать. Я вижу косяки по коду, но давай сначала в логику нырнём.
Вот весь код $name = ник игрока вводимый в строку при покупке привилегии Если игрок до этого покупал HYDRA то он может покупать OVERLORD Но если нет, то не может и ему пишет типо купите Все эти данные есть в бд Код (Text): <?php include "../lib/configbg.php"; if (isset($_POST['group']) && isset($_POST['nickname']) && $_POST['nickname'] != '' && isset($_REQUEST['checkprice'])) { $promo = 0; if (isset($_POST['promocode'])) { $promos = mysqli_query($conDB, 'SELECT * FROM `promo` WHERE `promo`="'.$_POST['promocode'].'"'); while ($p = mysqli_fetch_assoc($promos)) { $promo = $p['sale']; } } if (isset($_POST['group'])) { $groups = $_POST['group']; $adds = mysqli_query($conDB, 'SELECT * FROM `donate` WHERE `group`="'.$groups.'"'); while ($row = mysqli_fetch_assoc($adds)) { $type = $row['type']; $price = $row['price']; $name = $row['name']; if ($type == 'perm') { $sumAdds = mysqli_query($conDB, 'SELECT * FROM `buy` WHERE `type`="perm" AND `name`="'.$_POST['nickname'].'"'); while ($rowSum = mysqli_fetch_assoc($sumAdds)) { $price = $row['price']; $price = $row['price'] - $rowSum['sum']; if ($price < 1) { $price = $row['price']; } } } } if ($promo != 0) { $price = $price - (($promo * $price) / 100); } $proverka = mysqli_query($conDB, 'SELECT * FROM `buy` WHERE `name` = "'.$name.'" AND `data` = "hydra"'); if(mysqli_num_rows($proverka) < 1) { echo '<a>Приобретите HYDRA для покупки OVERLORD</a>'; } else { if($groups != 'overlord'); if($price > 0) { $url = 'https://выпилено.нафиг/pay/ключ?sum='.$price.'&account='.$_POST['nickname'].'.'.$groups.'&signature='.getFormSignature(($_POST['nickname'].'.'.$groups), 'Покупка '.$name, $price, 'ключ2').'&desc=Покупка '.$name; echo '<input type="submit" value="Купить за '.$price.' руб." class="btn bnt-new btn-lg btn-block">'; } else { echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">Слишком низкая цена</button>'; //header('Location: /'); } } } } else { //echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">Заполните данные</button>'; //echo '<button type="submit" class="btn bnt-new btn-lg btn-block disabled">'.$_POST['checkprice'].'</button>'; //header('Location: /'); $promo = 0; if (isset($_POST['promocode'])) { $promos = mysqli_query($conDB, 'SELECT * FROM `promo` WHERE `promo`="'.$_POST['promocode'].'"'); while ($p = mysqli_fetch_assoc($promos)) { $promo = $p['sale']; } } if (isset($_POST['groupsoup'])) { $groups = $_POST['group']; $adds = mysqli_query($conDB, 'SELECT * FROM `donate` WHERE `group`="'.$groups.'"'); while ($row = mysqli_fetch_assoc($adds)) { $type = $row['type']; $price = $row['price']; $name = $row['name']; if ($type == 'perm') { $sumAdds = mysqli_query($conDB, 'SELECT * FROM `buy` WHERE `type`="perm" AND `name`="'.$_POST['nickname'].'"'); while ($rowSum = mysqli_fetch_assoc($sumAdds)) { $price = $row['price']; $price = $row['price'] - $rowSum['sum']; if ($price < 1) { $price = $row['price']; } } } } if ($promo != 0) { $price = $price - (($promo * $price) / 100); } if ($price > 0) { header('Location: https://выпилено.нафиг/pay/ключ1?sum='.$price.'&account='.$_POST['nickname'].'.'.$groups.'&signature='.getFormSignature(($_POST['nickname'].'.'.$groups), 'Покупка "'.$name.'"', $price, 'ключ2').'&desc=Покупка "'.$name.'"'); } else { header('Location: /'); } } } function getFormSignature($account, $desc, $sum, $secretKey) { $hashStr = $account.'{up}'.$desc.'{up}'.$sum.'{up}'.$secretKey; return hash('sha256', $hashStr); }
Если я понял правильно, то твой запрос вызывается N раз в цикле. Переменная $name ищется в цикле. И если есть кто-то, не обязательно текущий пользователь, кто как-то относится к группе из $_POST['group'] и хотябы раз покупал 'hydra', то ты возможно увидишь ссылку на покупку 'overloard'. $name при выходе из цикла содержит имя из последней найденной записи. Последней из нескольких. Ведь там же цикл, Карл! Логика странная. Попутно косяки: - твоя $name может быть пустой, если в цикле не оказалось записей. Этот случай потенциально может привести к ошибке undefined variable, а может без ошибки интерпретироваться как пустая строка и тоже привести к неожиданному результату. сделай так, чтобы если ничего не найдено для $name, то и ничего дальше не проверялось. выпрямляй логику! - считать количество записей в таблице, удовлетворяющих условие надо через SELECT COUNT(*), а не через mysqli_num_rows(). - строковые литералы в sql надо окружать одинарными кавычками. Лучше используй двойные кавычки чтобы окружить весь текст запроса, а внутри его везде одинарные. - никогда не подставляй значения из $_POST или $_GET просто как WHERE `group`='".$groups."', это уязвимость. используй подготовленные выражения.
Как сделать чтобы нормально заработал скрипт? Где ошибка? Почему высвечивает только Купите HYDRA...? Помогите пожалуйста
Ошибка в mysqli _num_rows? Её нужно заменить на SELECT COUNT(*) ? Если да, то как? Как я понял, то нужно вместо SELECT * Код (Text): $proverka = mysqli_query($conDB, 'SELECT COUNT()* FROM `buy` WHERE `name` = "'.$name.'" AND `data` = "hydra"'); if(mysqli_num_rows($proverka) < 1) { echo '<a>Купите HYDRA для покупки OVERLORD</a>'; } Что делать с mysqli_num_rows? --- Добавлено --- Код (Text): $proverka = mysqli_query($conDB, 'SELECT COUNT()* FROM `buy` WHERE `name` = "'.$name.'" AND `data` = "hydra"'); $rowsone = mysql_fetch_row($proverka) $totals = $row[0] { echo '<a>Купите HYDRA для покупки OVERLORD</a>'; } так?
что у тебя на 49 строке (модератор: в этой теме это строка 40) в $name? завардампи, проверь. Мне кажется $proverka у тебя пустая получается