Jump to content
  • 0

Подключение php к Б/Д


vitaxastifler
 Share

Question

Та я всё по тихоньку,вот не могу никак разобраться как правильно подк к б/д

Задача такова,мы пытаемся угадать число которое занесено в б/д (80)

Вот скрин sql: http://hostingkartinok.com/show-image.php?id=5f195fb5519b526b2288db7d66ffbca9

Если число меньше 80,то пишет что слишко маленькое,если больше 80,то соответственно большое.

 

В папке есть у меня 3-и файла это "index.php"

<html><head><title>Число</title></head><body><?phpif (isset($_POST["submit"])) {include("connect.php");$query_number = "SELECT * FROM 'number'" ;$request_number = mysql_query($query_number);$number=mysql_fetch_array($request_number);echo $number['value'];}?><?phpif (isset($_POST['posted'])) {if (($_POST['guess']) ==($number['value'])) {echo "Угадали";}else if (($_POST['guess']) <($number['value'])) {echo "Не угадали,слишком большое число";}else if (($_POST['guess']) > ($number['value'])) {echo "Не угадали,слишком маленькое число";}}?><form method="POST" action="index.php"><input type="hidden" name="posted" value="true">Угадайте число от 1 до 100<input name="guess" type="text"><br><br><input type="submit" value="Отправить"></form></body></html>

connect.php

<?phpinclude("config.inc.php");$link = mysql_connect($host, $user, $password);if (!$link) {die('Connection error: ' . mysql_error());}$db_selected = mysql_select_db($db, $link);if (!$db_selected) {die ("Can't select database: " . mysql_error());}

И config.inc.php

<?php$host = "localhost";$user = "root";$password = "";$db = "qqq";

Когда я в браузере пишу какое то число,то получаю ошибки (скрин)

 

http://hostingkartinok.com/show-image.php?id=6285cb2aa95e1ebe1b0d5393096a3973

 

 

Я думаю что ошибка моя в index.php 

<?phpif (isset($_POST["submit"])) {include("connect.php");$query_number = "SELECT * FROM 'number'" ;$request_number = mysql_query($query_number);$number=mysql_fetch_array($request_number);echo $number['value'];}?>

Я вас очень прошу,научите меня правильно подключаться к sql.

Зарание спасибо!!!

Link to comment
Share on other sites

22 answers to this question

Recommended Posts

  • 0

1) Зачем вы проверяете на существование $_POST["submit"] ?? Это же не то значение которое вас интересует, вас интересует $_POST['guess']

2) У вас на скрине ошибка что не найден $number. Так он у вас и не объявлен! он объявляется только если выполняется условие if (isset($_POST["submit"])) как вариант добавьте в конец else

3) У вас страдает логика, вы создали лишние элементы "<input type="hidden" name="posted" value="true">" и устраиваете не нужные проверки

 

 

Щас через минуту напишу как я бы решил данную задачу

  • Like 1
Link to comment
Share on other sites

  • 0

<?php// Проверяем есть ли переменная $_POST['guess'] если ее нету то нам и число не нужно ибо сравнивать не с чемif (isset($_POST['guess'])) {// Подключаемся к базе, если не удачно выводим ошибку (я бы честно говоря ее и не выводил это нужно только для проверки соединения, но не для работы...)	$link = mysql_connect('localhost', 'root', 'root');	if (!$link) die('Connection error: ' . mysql_error());// Выберем базу данных, если не удачно выводим ошибку (Опять таки ошибку можно не выводить лишняя это проверка)	$db_selected = mysql_select_db('qqq', $link);	if (!$db_selected) die ("Can't select database: " . mysql_error());// Выполним запрос я предпочитаю запрос писать сразу в функцию зачем объявлять лишние переменные и тратить память, если наглядности это не прибавляет?// Заметьте строка у нас одна значение одно это все надо указать в запросе, для данного случая это не критично но в нормальных проектах где базы большие так работает быстрее.	$request_number = mysql_query('SELECT `value` FROM `number` LIMIT 1');	$number = mysql_fetch_array($request_number);}?><html><head><title>Число</title></head><body><?php// проверяем есть ли у нас переменная $number['value'] ведь если она есть то и $_POST['guess'] есть! А значит нам нужно сравнить их // Далее можно устроить цепочку if () {} elseif () {}, заметь что именно elseif а не if if if зачем нам делать 2 и 3 if если уже сработает первый? Я предпочитаю для простых действий пользоваться упрощенным синтаксисом:	if (isset($number['value']))		echo ($_POST['guess'] == $number['value']) ? 'Угадали' : (($_POST['guess'] < $number['value']) ? 'Не угадали,слишком маленькое число' : 'Не угадали,слишком большое число');?>	<form method="POST" action="">		<label>			Угадайте число от 1 до 100			<input name="guess" type="text">		</label>		<input type="submit" value="Отправить">	</form></body>

собственно комментарии в коде...

Я вас очень прошу,научите меня правильно подключаться к sql.

 

Я бы посоветовал использовать mysqli а не  mysql как у вас в примере, причин на то много лучше вам ознакомится с документаций и думаю сами поймете... почитать можно тут www.php.net/manual/ru/intro.mysqli.php

  • Like 1
Link to comment
Share on other sites

  • 0

Ну что началось-то? Давайте вы не будете давать плохие советы, ок? Расширение mysql для PHP устарело. Так что функции типа mysql_connect, mysql_query, mysql_fetch_array устарели и использовать их нельзя. Максимум — для поддержки старого движка, в котором используется старая версия PHP (4 ветка, например).

Можно использовать MySQLi http://us1.php.net/manual/ru/book.mysqli.php

А ещё лучше PDO http://us1.php.net/manual/ru/book.pdo.php

Link to comment
Share on other sites

  • 0

Но чтобы PDO пользоваться, нужно хоть какие-то представления об ООП, чтобы понимать как он работает!

А без этого нельзя приступать к программированию на PHP вообще. На ассемблере можно программировать ничего не понимая в ООП. На похапе нельзя.

Link to comment
Share on other sites

  • 0

Ну что началось-то? Давайте вы не будете давать плохие советы, ок? Расширение mysql для PHP устарело. Так что функции типа mysql_connect, mysql_query, mysql_fetch_array устарели и использовать их нельзя. Максимум — для поддержки старого движка, в котором используется старая версия PHP (4 ветка, например).

Можно использовать MySQLi http://us1.php.net/manual/ru/book.mysqli.php

А ещё лучше PDO http://us1.php.net/manual/ru/book.pdo.php

 

Ну не знаю, мы в институте частенько писали на устаревших библиотеках и не чего... Суть ведь не в создании веб портала, суть в получении знаний и навыков, а логической разницы между mysql и mysqli практически нету pdo xpdo это лишь обертки даже тот же mysqlnd отличается от mysqli по суте набором функций но не подключением и взаимодействием с базой данных... Вот для примера у mysqli есть подготавливаемые запросы, но зачем человека сходу нагружать знаниями которые могут ему не пригодится(как часто используют люди в проектах партификацию таблиц sql?), возможно он приобретет базовые знания, а после уйдет в работу с фреймворком тот же YII и будет пользоваться только activerecord + doa и не каких mysql mysqli он в глаза не увидит, будет посуте использовать pdo и даже не задумываться об этом...

Link to comment
Share on other sites

  • 0

Воу воу воу,парни,полегче)

 

Я так понял,что сейчас все юзают новые технологии под названием "PDO"??!! 

Если да,подскажите где кроме http://us1.php.net/manual/ru/book.pdo.php можно в нём разобраться,желательно на примерах!

Link to comment
Share on other sites

  • 0

Воу воу воу,парни,полегче)

 

Я так понял,что сейчас все юзают новые технологии под названием "PDO"??!! 

Если да,подскажите где кроме http://us1.php.net/manual/ru/book.pdo.php можно в нём разобраться,желательно на примерах!

 

http://labdes.ru/php-pdo-mysql-examples

Ваш скрипт будет выглядеть примерно так:

 

<?php$db = new PDO('mysql:host=localhost;dbname=qqq', 'root', 'root');$data = $db->query('SELECT `value` FROM `number` LIMIT 1')->fetch();echo $data['value'];
Link to comment
Share on other sites

  • 0

При таком коде

<?php$db = new PDO('mysql:host=localhost;dbname=qqq', 'root', '');$data = $db->query('SELECT `value` FROM `number` LIMIT 1')->fetch();?><html><head><title>Число</title></head><body><?php	if (isset($number['value']))		echo ($_POST['guess'] == $number['value']) ? 'Угадали' : (($_POST['guess'] < $number['value']) ? 'Не угадали,слишком маленькое число' : 'Не угадали,слишком большое число');?>	<form method="POST" action="">		<label>			Угадайте число от 1 до 100			<input name="guess" type="text">		</label>		<input type="submit" value="Отправить">	</form></body>

Вот такая ошибка(

Fatal error: Call to a member function fetch() on a non-object in D:\xampp\htdocs\test\number\index.php on line 3]
Edited by vitaxastifler
Link to comment
Share on other sites

  • 0

шо ж вы, Т.С. нагуглить пример не можете?

в примере выше указывает на отсутствие ф-ции\объекта fetch() и правильно, ибо он в этом примере не описан.

вот ссылки с примерами, если сами не можете искать:

http://www.php.net/manual/ru/pdo.connections.php

http://proft.me/2008/11/28/primery-ispolzovaniya-pdo/

Link to comment
Share on other sites

  • 0

1) Вам нужно проверить установлено ли у вас в PHP расширение PDO.

2) Попробуйте отловить ошибку спомощью try catch

try {    $db = new PDO('mysql:host=localhost;dbname=qqq', 'root', '');    $data = $db->query('SELECT `value` FROM `number` LIMIT 1')->fetch();}catch(PDOException $e) {    echo $e->getMessage();}

3) А к вашей ошибке, это не относится но, Вы по всей видимости просто скопировали часть кода не вдаваясь, так вот даже поправив ошибку скрипт работать не будет потому что вы получаете данные в переменную $data, а ниже обращаетесь к $number


Начинайте читать документацию, все равно далеко без нее вы не уедите.

Link to comment
Share on other sites

  • 0

Ребята,а где можно почитать про вот это 

"$data = $db->query('SELECT `value` FROM `number` LIMIT 1')->fetch();"

Вот как понять что делает к примеру " * ", "ASC" , "ORDER BY","WHERE","INSERT INTO".....

Как разобраться что правильно указывать в скобках,вот это я не могу понять...

Link to comment
Share on other sites

  • 0

ASC - делает сортировку по возрастанию и DESC - по убыванию.

значением сортировки может быть любая колонка таблицы, как то: id, name, title, product и т.д...

ORDER BY - как раз говорит по какой колонке сортировать.

WHERE - дословно "где", т.е.:

select

(выбрать)

*

(все поля)

или только какое-то, например id

from product

(из таблицы продукт)

where

(где)

id = $_GET['id']

(id - колонки соответствует id пришедшему из гет запроса в браузере)

order by id asc

(отсортировать по колонке id в порядке возрастания)

полный запрос:

SELECT * FROM `product` WHERE `id` = $_GET['id'] ORDER BY `id` ASC

  • Like 1
Link to comment
Share on other sites

  • 0

это сокращенная запись, с помощью тернарных операторов.

если это код перефразировать, то будет что-то вроде:

if(isset($_REQUEST["id"])) {  $id = int($_REQUEST["id"]);} else {  $id = null;}

означает примерно следущее:

если в ассоциативном массиве $_REQUEST существует id, то присваиваем ее значение переменной $id и приводим к целочисленному типу данных (int).

иначе, (т.е. если условие не соотв.) присваиваем переменной $id пустое значение.

почитайте про:

а) типы данных - их там не много

б) тернарные операторы

в) ассоциативные массивы $_GET, $_POST, $_REQUEST и т.д...

г) условия if ... else...

  • Like 1
Link to comment
Share on other sites

  • 0

все зависит от того, что вы хотите получить на выходе...

я включу немного телепатию и предположу, что по клику на пункт меню (например "серии"), вы попадаете в раздел, где нужно вывести эти самые серии?

если так, то:

"SELECT * FROM `serii` WHERE `id` = $_GET['id']"

но этот запрос чреват sql-инъекцией, так что id всегда нужно проверять на наличие таковой и удалять все не нужное из запроса.

есть вот такая простенькая ф-ция на проверку некоторых вещей:

	// Функция экранирования переменных	function quote_smart($value) {    // если magic_quotes_gpc включена - используем stripslashes    	if (get_magic_quotes_gpc()) {			$value = stripslashes($value);    	}    // Если переменная - число, то экранировать её не нужно    // если нет - то окружем её кавычками, и экранируем    	if (!is_numeric($value)) {			$value =mysql_real_escape_string($value);    	}   		return $value;	}

применять ее можно вот так:

$id =$this->quote_smart($_GET['id']);
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy