Проверка наличия договора в базе данных

fiter

Здравствуйте! Я только начал изучать php и mysql, поэтому сори за такую тупую задачу )Суть такова: пользователь вводит в форму информацию о договоре, если договор с такими параметрами существует в базе данных, то ему выводится сообщение что "договор существует". А если договора с такими параметрами не существует, выводится сообщение "не существует"Может есть у кого готовый php код для такого запроса?Я пока в инете нарыл select sign(count(*)) , но как правильно с его помощью сделать запрос - пока не втыкаю ((Код формы такой -
<form <span>action</span><span>=</span><span>"dogovor.php"</span> <span>method</span><span>=</span><span>"post"</span> <span>name</span><span>=</span><span>"dogovor"</span> <span>target</span><span>=</span><span>"_self"</span>> <input <span>name</span><span>=</span><span>"agent"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>"Агент"</span>> <input <span>name</span><span>=</span><span>"summa"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>"Сумма договора"</span>> <input <span>name</span><span>=</span><span>"number"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>"Номер договора"</span>> <input <span>type</span><span>=</span><span>"submit"</span> <span>value</span><span>=</span><span>"Проверить"</span> <span>/</span>> <<span>/</span>form>
20 ответов

fiter

Akina, выдаёт SELECT id FROM table WHERE agent ='agent1' AND summa = '100500' AND number = 'dogovor1' И Ругается Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in $res= "Договора нет!"; Я ж говорю, что только начал изучать php, поэтому ещё не знаю как правильно запросы к базе составлять... Имя базы baza, таблица dogovor, эту инфу тоже в код нужно засунуть ?


fiter

fiter,А mysql_select_db() кто будет делать? Пушкин?Если имя таблицы "договор", так зачем в селекте `table` написал? Голова где?


fiter

Я ж говорю, что только начал изучать php, поэтому ещё не знаю как правильно запросы к базе составлять...
А какая связь? можно быть корифеем в PHP и в принципе не понимать, как составляются запросы. Это- MySQL. Другой сервер и другой язык.


fiter

Сейчас код такой -
<form action="dogovor.php" method="post" name="dogovor" target="_self"> <input name="agent" type="text" size="20" maxlength="15" value=""> <input name="summa" type="text" size="20" maxlength="15" value=""> <input name="number" type="text" size="20" maxlength="15" value=""> <input type="submit" value="Проверить" /> </form>	<p>	<?php $link = mysql_connect('localhost', 'root', '');
if (!$link) { die('Не удалось соединиться : ' . mysql_error());
}
$db_selected = mysql_select_db('baza', $link);
if (!$db_selected) { die ('Не удалось выбрать базу: ' . mysql_error());
} $sql = "SELECT id FROM 'dogovor' WHERE agent ='".$_POST['agent']."' AND summa = '".$_POST['summa']."' AND number = '".$_POST['number']."' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0){ $res= "Договора нет!";
}else{ $res= "Договор есть!";
} if (isset($res)) { echo $res; }
?>	</p>
Но видимо ещё что-то нужно поправить, всё ту же ошибку про $res= "Договора нет!"; пишет


fiter

Поменял id на *, заработало! ))) А может кто ни будь подсказать, что нужно прописать что бы не выводилось "Договора нет" до нажатия на кнопку "проверить" ?
<form action="dogovor.php" method="post" name="dogovor" target="_self"> <input name="agent" type="text" size="20" maxlength="15" value=""> <input name="summa" type="text" size="20" maxlength="15" value=""> <input name="number" type="text" size="20" maxlength="15" value=""> <input type="submit" value="Проверить" /> </form> <p> <?php $link = mysql_connect('localhost', 'root', '') or die('Не удалось соединиться: ' . mysql_error());
mysql_select_db('baza') or die('Не удалось выбрать базу данных'); $sql = "SELECT * FROM dogovor WHERE agent ='".$_POST['agent']."' AND summa = '".$_POST['summa']."' AND number = '".$_POST['number']."' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0){ $res= "Договора нет!";
}else{ $res= "Договор есть!";
} if (isset($res)) { echo $res; }
mysql_close($link);
?>


fiter

Поменял id на *, заработало! ))) А может кто ни будь подсказать, что нужно прописать что бы не выводилось "Договора нет" до нажатия на кнопку "проверить" ?
<form action="dogovor.php" method="post" name="dogovor" target="_self"> <input name="agent" type="text" size="20" maxlength="15" value=""> <input name="summa" type="text" size="20" maxlength="15" value=""> <input name="number" type="text" size="20" maxlength="15" value=""> <input type="submit" value="Проверить" /> </form> <p> <?php $link = mysql_connect('localhost', 'root', '') or die('Не удалось соединиться: ' . mysql_error());
mysql_select_db('baza') or die('Не удалось выбрать базу данных'); $sql = "SELECT * FROM dogovor WHERE agent ='".$_POST['agent']."' AND summa = '".$_POST['summa']."' AND number = '".$_POST['number']."' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0){ $res= "Договора нет!";
}else{ $res= "Договор есть!";
} if (isset($res)) { echo $res; }
mysql_close($link);
?>
замени на и перед $sql = "SELECT * FROM ... вставь if (isset ($_POST['submit'])) { тут делаем запрос и выводим результат }А вообще обработчик лучше в другом файле делай, а не в этом, либо используй ajax


fiter

И еще делай проверку $_POST данных, перед тем как вставлять их в запрос.
$agent = stip_tags(htmlspecialschars(stripslahes(trim($_POST['agent']))));
например так и в запрос вставляешь уже $agent


fiter

stip_tags(htmlspecialschars(stripslahes
3 ошибки в одной строке - это сурово. И вообще не надо "склеивать" строку запроса, откройте для себя параметризованные запросы.


fiter

Спасибо за помощь! Сейчас только после обновления страницы сразу выводится то, что в последний раз выводилось... Нужно наверное отчистить что-то, но что именно, где и чем ?Или это связано с тем, что скрипт не в отдельном файле? А как его вынести в отдельный файл, и подключить так, что бы при нажатии на "отправить" не было перехода на другую страницу ?
<form action="<?=$res['PHP_SELF']?>" method="post" name="dogovor"> <input name="agent" type="text" size="20" maxlength="15" onclick="this.value='';" onfocus="if(this.value=='Введите имя агента')this.value='';" onblur="if(this.value=='')this.value='Введите имя агента';" value="Введите имя агента" > <input name="summa" type="text" size="20" maxlength="15" onclick="this.value='';" onfocus="if(this.value=='Введите сумму договора')this.value='';" onblur="if(this.value=='')this.value='Введите сумму договора';" value="Введите сумму договора" > <input name="number" type="text" size="20" maxlength="15" onclick="this.value='';" onfocus="if(this.value=='Введите номер договора')this.value='';" onblur="if(this.value=='')this.value='Введите номер договора';" value="Введите номер договора" > <input type="submit" name="submit" value="Проверить" /> </form> <p> <?php $link = mysql_connect('localhost', 'root', '') or die('Не удалось соединиться: ' . mysql_error());
mysql_select_db('kliff-sk') or die('Не удалось выбрать базу данных'); if (isset ($_POST['submit'])) { $agent = strip_tags(htmlspecialchars(stripslashes(trim($_POST['agent'])))); $summa = strip_tags(htmlspecialchars(stripslashes(trim($_POST['summa'])))); $number = strip_tags(htmlspecialchars(stripslashes(trim($_POST['number'])))); $sql = "SELECT * FROM dogovor WHERE agent ='".$agent."' AND summa = '".$summa."' AND number = '".$number."' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0){ $res= "Договора нет!";
}else{ $res= "Договор есть!";
} echo $res;
}
pg_free_result($res);
?> </p>


fiter

Спасибо за помощь! Сейчас только после обновления страницы сразу выводится то, что в последний раз выводилось... Нужно наверное отчистить что-то, но что именно, где и чем ?Или это связано с тем, что скрипт не в отдельном файле? А как его вынести в отдельный файл, и подключить так, что бы при нажатии на "отправить" не было перехода на другую страницу ?
<form action="<?=$res['PHP_SELF']?>" method="post" name="dogovor"> <input name="agent" type="text" size="20" maxlength="15" onclick="this.value='';" onfocus="if(this.value=='Введите имя агента')this.value='';" onblur="if(this.value=='')this.value='Введите имя агента';" value="Введите имя агента" > <input name="summa" type="text" size="20" maxlength="15" onclick="this.value='';" onfocus="if(this.value=='Введите сумму договора')this.value='';" onblur="if(this.value=='')this.value='Введите сумму договора';" value="Введите сумму договора" > <input name="number" type="text" size="20" maxlength="15" onclick="this.value='';" onfocus="if(this.value=='Введите номер договора')this.value='';" onblur="if(this.value=='')this.value='Введите номер договора';" value="Введите номер договора" > <input type="submit" name="submit" value="Проверить" /> </form> <p> <?php $link = mysql_connect('localhost', 'root', '') or die('Не удалось соединиться: ' . mysql_error());
mysql_select_db('kliff-sk') or die('Не удалось выбрать базу данных'); if (isset ($_POST['submit'])) { $agent = strip_tags(htmlspecialchars(stripslashes(trim($_POST['agent'])))); $summa = strip_tags(htmlspecialchars(stripslashes(trim($_POST['summa'])))); $number = strip_tags(htmlspecialchars(stripslashes(trim($_POST['number'])))); $sql = "SELECT * FROM dogovor WHERE agent ='".$agent."' AND summa = '".$summa."' AND number = '".$number."' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0){ $res= "Договора нет!";
}else{ $res= "Договор есть!";
} echo $res;
}
pg_free_result($res);
?> </p>
Попробуй сделать unset ($_POST['submit']) после if (isset ($_POST['submit'])) { но не уверен, что поможет.
А как его вынести в отдельный файл, и подключить так, что бы при нажатии на "отправить" не было перехода на другую страницу ?
Так не получится. Только если через ajax делать...


fiter

Попробуй сделать unset ($_POST['submit'])
Не помогло ( И просто unset ($_POST); в конце кода не помогает (((


fiter

Не помогло ( И просто unset ($_POST); в конце кода не помогает (((
Делай через ajax будет без перезагрузки работать и вообще все круто и красиво


fiter

Делай через ajax будет без перезагрузки работать и вообще все круто и красиво
А можно ссылочку на нужный материал ?


fiter

А можно ссылочку на нужный материал ?
jquery post на русском jquery post на англ. как работать с jquery forms страница самого плагина jquery formsТам и примеры кода есть.


fiter

fiter,
$sql = "SELECT id FROM table WHERE agent ='".$_POST['agent']."' AND summa = '".$_POST['summa']."' AND number = '".$_POST['number']."' ";
$result = mysql_query($sql);
if(mysql_num_rows($result)==0){ echo "Договора нет!";
}else{ echo "Договор есть!";
}
Примерно так. Может кто что лучше посоветует


fiter

Спасибо за быстрый отклик!Вставил скрипт в код, вставил картинку результат.(271 строка - echo "Договора нет!"; )Что я сделал не так ?
<div <span>class</span><span>=</span><span>"section"</span>> <form <span>action</span><span>=</span><span>"dogovor.php"</span> <span>method</span><span>=</span><span>"post"</span> <span>name</span><span>=</span><span>"dogovor"</span> <span>target</span><span>=</span><span>"_self"</span>> <input <span>name</span><span>=</span><span>"agent"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>"agent1"</span>> <input <span>name</span><span>=</span><span>"summa"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>"100500"</span>> <input <span>name</span><span>=</span><span>"number"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>"dogovor1"</span>> <input <span>type</span><span>=</span><span>"submit"</span> <span>value</span><span>=</span><span>"Проверить"</span> <span>/</span>> <<span>/</span>form>	<p>	<?php $<span>link</span> <span>=</span> mysql_connect(<span>"localhost"</span>, <span>"root"</span>, <span>""</span>)	or die(<span>"Could not connect"</span>); $<span>sql</span> <span>=</span> <span>"SELECT id FROM table WHERE agent ='"</span>.$_POST[<span>'agent'</span>].<span>"' AND summa = '"</span>.$_POST[<span>'summa'</span>].<span>"' AND number = '"</span>.$_POST[<span>'number'</span>].<span>"' "</span>;
$<span>result</span> <span>=</span> mysql_query($sql);
if(mysql_num_rows($result)<span>==</span><span>0</span>){ echo <span>"Договора нет!"</span>;
}else{ echo <span>"Договор есть!"</span>;
}
?>	<<span>/</span>p>
<<span>/</span>div>


fiter

Покажите соответствующее введённому значение $sql


fiter

Покажите соответствующее введённому значение $sql
Что-то я не понял что и как мне показать Сейчас код выглядит так -
<form <span>action</span><span>=</span><span>"dogovor.php"</span> <span>method</span><span>=</span><span>"post"</span> <span>name</span><span>=</span><span>"dogovor"</span> <span>target</span><span>=</span><span>"_self"</span>> <input <span>name</span><span>=</span><span>"agent"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>""</span>> <input <span>name</span><span>=</span><span>"summa"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>""</span>> <input <span>name</span><span>=</span><span>"number"</span> <span>type</span><span>=</span><span>"text"</span> <span>size</span><span>=</span><span>"20"</span> <span>maxlength</span><span>=</span><span>"15"</span> <span>value</span><span>=</span><span>""</span>> <input <span>type</span><span>=</span><span>"submit"</span> <span>value</span><span>=</span><span>"Проверить"</span> <span>/</span>> <<span>/</span>form> <p> <?php $<span>link</span> <span>=</span> mysql_connect(<span>"localhost"</span>, <span>"root"</span>, <span>""</span>) or die(<span>"Could not connect"</span>); $<span>sql</span> <span>=</span> <span>"SELECT id FROM table WHERE agent ='"</span>.$_POST[<span>'agent'</span>].<span>"' AND summa = '"</span>.$_POST[<span>'summa'</span>].<span>"' AND number = '"</span>.$_POST[<span>'number'</span>].<span>"' "</span>;
$<span>result</span> <span>=</span> mysql_query($sql);
if(mysql_num_rows($result)<span>==</span><span>0</span>){ $<span>res</span><span>=</span> <span>"Договора нет!"</span>;
}else{ $<span>res</span><span>=</span> <span>"Договор есть!"</span>;
} if (isset($res)) { echo $res; }
?>
Но и при открытии страницы, и при отправки формы с любыми значениями выдаёт одно и то же


fiter

$sql = "SELECT id FROM table WHERE agent ='".$_POST['agent']."' AND summa = '".$_POST['summa']."' AND number = '".$_POST['number']."' ";echo $sql;$result = mysql_query($sql);


fiter

Это первое. И второе - вернее, нулевое.Почему надо было тупо, не думая, копипастить то, что было отвечено первым ответом? хоть бы свои имя таблицы и полей подставил...