Jump to content
  • 0

mysql основы


IceBars
 Share

Question

вы конечно извините за такой вопрос но:

как пшп + бд работает? У меня денвер -- как добавить базу данных удалить ее добавить таблицу добавить строку? Я из документации код вставлял мне ошибку выдовало:)

Link to comment
Share on other sites

  • Answers 77
  • Created
  • Last Reply

Top Posters For This Question

Recommended Posts

  • 0
Эта переменная по идее означает имя хоста ведь.

mysql_connect(); - это функция РНР принимающая значения (см. мануал РНР): адрес на котором висит сервер баз данных, имя пользователя на этом сервере, пароль для этого пользователя.

обычно, как и отметил Dimitry Wolotko, адрес на котором висит сервер баз данных - это localhost (127.0.0.1). Делается так в целях безопасности и ограничения возможности атак из интернета, с удаленного компьютера

Теперь про хостера. Хостер дает пользователю (тебе) пароль и имя юзера MySQL. Обычно по этому юзернейм хостер дает неограниченный доступ только к определенным базам данных (например user_bd1, user_bd2 и т.д., где user имя выданное хостером). Потому чтобы не париться с переделыванием когда, лучше предварительно получить эти данные от хостера (логин, пароль, имя базы данных), и соэдать такую же БД на локальном компе.

Второй нюанс: обычно програмисты создают отдельные конфиг-файлы с паролями и явками и ограничивают к ним доступ. Еще лучше когда для скриптов на сайте используется пользователь БД с еще более ограниченными правами (например не может создавать/удалять таблицы, менять их структуру - все зависит от потребности сервиса, ессно дело).

Про базы. построение, оптимизация и планирование баз данных отдельный вопрос, широко освещенный в литературе и интернете. MySQL реализует алгоритмы работы с реляционными базами данных. Примерная общая логика этих алгоритмов такова: запрос - вычисления сервера БД - ответ. РНР вообще никак не принимает участия в промежеточной стадии. Его задача отправить запрос получить ответ. Задача программиста правильно поставить запрос, правильно отработать ответ. MySQL использует "свой собственный" язык запросов, отличный от языка программирования РНР - это SQL (SQL так же с вариациями используется и другими серверами баз данных, зависит от функционала заложенного в сервер баз данных)

Совет: чтобы правильно составить запрос, надо сначала попрактиковаться в SQL языке (через тот же phpMyAdmin): составить SQL-запрос, выполнить его, отладить если надо, а уж затем оптимизировать как текстовую переменную в РНР.

:)

Link to comment
Share on other sites

  • 0

Здравствуйте. Подскажите пожалуйста. У меня есть таблица с данными количества кликов по ссылке.

id | url | clicks | date

Нужно значение количества кликов определенного урл, или id (разницы нет) присвоить переменной. Как это сделать?

У меня на сайте рекламные банеры, и хочу сделать для рекламодателей небольшую статистику. Вывод количества кликов предусмотрен скриптом, а я хочу сделать ещё среднее значение кликов за сутки. Даты вычитать научился. Осталось разделить количество кликов на количество дней размещения. Вот только как эту количество кликов вывести в формулу деления, не пойму. Подставлял этот код для вывода количества кликов на страницу - не получается. Что то другое надо.

<?php
$seconds = -strtotime('2009-12-10 00:00:00')+time(); // вычитаем даты в секундах
$sec = $seconds/86400; //переводим в дни
$sql = нужно как то вытащить значение и бд
$sred =$sql /$sec; // находим среднее значение
printf("%.0f",$sred); // выводим на экран округленное число
?>

Link to comment
Share on other sites

  • 0

Никто не знает?

ну вот допустим я подключаюсь к бд

$host="localhost";
$user="user";
$pwd="pass";
$db=mysql_connect($host,$user,$pwd);
mysql_select_db("name_bd",$db);

Дальше выбираем таблицу и как понимаю урл, для которого нужно выбрать число кликов

$query="SELECT * FROM `ecount` WHERE `url`='http://www.ru';";

Хотя честно сказать ничего не понимаю после WHERE правильно или неправильно там записал? И что ещё дописать, что бы выбралась именно число кликов по этому урл?

Link to comment
Share on other sites

  • 0

У меня вопрос. Добавление данных в таблицу, в данном мне случае, заголовок статьи, дата, текст и всё такое. Как реализовать, что бы автоматически при добавлении данных создавалась страница и отображалось, то что я добавил, по шаблону, которой я ей задам. А пока только получается создать страницу, в ней подключаемся к базе данных, пишем "select * from articles where id = 'номер последней статьи'". Думаю, что должно быть решение как я выше написал. Натолкните в нужном направлении plz =)

Link to comment
Share on other sites

  • 0

Допустим есть таблица

$query = "CREATE TABLE articles (
id int(10) unsigned NOT NULL auto_increment,
title VARCHAR(30) NOT NULL,
link VARCHAR(40) NOT NULL,
date VARCHAR(20) NOT NULL,
preview TEXT NOT NULL,
text TEXT NOT NULL
)";

Потом мы её заполним одной статьёй

$preview = "Текст вступления";
$text = "Большой текст статьи на HTML языке";

$query = "INSERT INTO articles (title, link, date, comment, preview, text)
VALUES ('Заголовок статьи', '$link','дата публикации', '$preview','$text')";

Теперь, чтобы высветить статью мне надо создать новый файл и написать там

$query = "SELECT * FROM articles WHERE id = '0'";
$result = mysql_query ($query) or die ("Ошибка при выполнение запроса: ".mysql_error());
$row = mysql_fetch_array ($result);

и

<div id="exelent-mainContent" class="hentry" xmlns:dc="http://purl.org/dc/elements/1.1/">
<h1 id="start" property="dc:title" class="entry-title single-entry-title"><?php echo "",$row['title'], "";?></h1>
<div class="post-meta">
<p class="post-time published">Опубликовано <?php echo "",$row['date'], "";?></p>
</div>
<div class="post-content entry-content">
<?php echo "",$row['text'],"";?>
</div>
</div>

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

Edited by Yahoo!
Link to comment
Share on other sites

  • 0

я так понял что вам нужно что бы появлялся новый пункт в меню (ссылка на вновь созданную страницу)?

Veseloff - привел правильный пример, но в этом случае все же будет лучше сделать чпу преобразование ссылок, либо защититься от возможных sql инъекций.

Link to comment
Share on other sites

  • 0

Чтобы появлялась новая статья по шаблону

<div id="exelent-mainContent" class="hentry" xmlns:dc="http://purl.org/dc/elements/1.1/">
<h1 id="start" property="dc:title" class="entry-title single-entry-title"><?php echo "",$row['title'], "";?></h1>
<div class="post-meta">
<p class="post-time published">Опубликовано <?php echo "",$row['date'], "";?></p>
</div>
<div class="post-content entry-content">
<?php echo "",$row['text'],"";?>
</div>
</div>

и она имела название допустим article_ID.php .

А пока надо самому каждый раз создавать код выше написанный и сохранять вручную article_ID.

Link to comment
Share on other sites

  • 0

Спасибо большое, разобрался. Но появилась другая проблема. Пытаюсь записывать в БД через текстовые поля, а потом выводить. При загрузке страницы выскакивает строка Ошибка при выполнение запроса: Query was empty. Помогите пожалуйста.

Запись в БД(Если удалить этот кусок, то страница загружается.)

if ($send)
$sql = mysql_query("INSERT into comments (title, text) values ('".$_POST['Name']."', '".$_POST['Comment']."');");
$result = mysql_query ($query) or die ("Ошибка при выполнение запроса: ".mysql_error());

Вывод из БД

<table>
<?php

$sql = mysql_query("SELECT*FROM comments");
while($row = mysql_fetch_array($sql))
{
print '<tr><td>'.$row['title'].'</td>
<td>'.$row['text'].'</td></tr>';
}
?>
</table>

Форма полей:

<form method="post" action="ссылка оной страницы">
<div><label for="Name">Введите Ваше имя</label>
<input name="Name" type="text" class="text" /></div>
<div><textarea name="Comment"></textarea></div>
<input type="submit" name="send" value="Ok" />
</form>

Edited by Yahoo!
Link to comment
Share on other sites

  • 0

Переправил на

$result = mysql_query ($sql)

а где вывод:

$sq = mysql_query("SELECT * FROM 'comments'");
$res = mysql_query ($sq) or die ("Ошибка при выполнение запроса: ".mysql_error());
while($row = mysql_fetch_array($result))

И пишет тоже самое, где ошибка?

Link to comment
Share on other sites

  • 0
Переправил на

$result = mysql_query ($sql)

а где вывод:

$sq = mysql_query("SELECT * FROM 'comments'");
$res = mysql_query ($sq) or die ("Ошибка при выполнение запроса: ".mysql_error());
while($row = mysql_fetch_array($result))

И пишет тоже самое, где ошибка?

Вы слепы:

$res = mysql_query ($sq) or die ("Ошибка при выполнение запроса: ".mysql_error());

while($row = mysql_fetch_array($result));

Link to comment
Share on other sites

  • 0
не помогает

Я рад за вас, но если хотите чтоб помогало, вы должны писать, что вы сделали и какую ошибку выдаёт. В противном случае отсюда помощь не придёт.

Link to comment
Share on other sites

  • 0

Новая проблемка. Всё выводится хорошо, но происходит зацикливание как бэ и после перезагрузки страницы, снова добавляется.

<?php	
if (isset($_POST['name']))
{
$name = $_POST['name'];
}

if (isset($_POST['comment']))
{
$comment = $_POST['comment'];
}

if (isset($_POST['send']))
{
$send = $_POST['send'];
}

$sql = mysql_query("INSERT into comments (author, text) values ('$name', '$comment');",$db);
?>
<ul class="exelent-listComments">
<?php
$sq = mysql_query("SELECT * FROM comments",$db) or die ("Ошибка при выполнение запроса: ".mysql_error());

while ($row = mysql_fetch_array ($sq))
{
echo "<li>";
echo "<div class='meta'>";
echo "<span class='comment-author vcard'><span class='fn nickname'>",$row['author'],"</span></span>";
echo "</div>";
echo "<div class='comment-content'>";
echo $row['text'];
echo "</div>";
echo "</li>";
}
?>
</ul>

<form method="post" action="/comment.php">
<div><label for="name">Введите Ваше имя</label>
<input name="name" type="text" class="text" /></div>
<div><textarea name="comment"></textarea></div>
<input type="submit" name="send" value="Ok" />
</form>

Как остановить??

Edited by Yahoo!
Link to comment
Share on other sites

  • 0

Делаем что-то типа

<form method="post" action="/comment.php?action=send">

Ну и после добавления в базу делать

header("Location: /comment.php");

Это решит проблему повторной отправки значений массива $_POST при обновлении страницы. Ну а что касается добавления вообще, то я не вижу никакой проверки на отправку сообщения. Делайте хотя бы

if(!empty($_POST))

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