php для доступа к базе данных

  • Автор темы Support ProfitLead
  • 41
  • Обновлено
  • 17, May 2024
  • #1
моя цель - выбрать записи из базы данных, чтобы запомнить информацию, щелкнуть и перейти к цели и

обновите дату последнего использования, количество посещений, время посещения и, если информация не была сохранена, сохраните ее.

Я делаю это в html, вижу записи, нажимаю кнопку и перехожу к интересующей цели.

с помощью Xampp сервер с базами данных и доступ через PHP, который я могу обновить (crud).

Мой Xammp работает, моя база данных подтверждена, мой php, похоже, не работает при доступе к записям. Пробовал другие форумы, безрезультатно. Ниже моя последняя слабая попытка.

Надеюсь на совет, у меня есть скриншот результата дисплей, любая помощь? давай, есть место. =========================================================== вот мой код — эй, я чувствую смех ---------------------------------------
 

<!DOCTYPE html><html>

<head></head>

<BODY><center>

<?php

echo "<center>";echo $date->format('d-m-Y H:i:s a');echo "</center>";

$id="''";

$con=mysqli_connect("localhost","root","","homedb");

// ============== check connection

if(mysqli_errno($con))

{echo "Can't Connect to mySQL:".mysqli_connect_error();}

else

{echo "</br>";}

// ==========This creates the drop down box using records in the table

echo "<select name= 'target'>";

echo '<option value="">'.'---select email account ---'.'</option>';

$query = mysqli_query($con,"SELECT target FROM lookuptbl");

$query_display = mysqli_query($con,"SELECT * FROM lookuptbl");

while($row=mysqli_fetch_array($query))

{ echo "<option class=highlight value='". $row['target']."'>".$row['target']

.'</option>';}

echo '</select>';

?>

<input type="submit" name="submit" value="Submit"/>

</form></body></html>

<?php

error_reporting(E_ALL ^ E_NOTICE);

// error_reporting(0);

$con=mysqli_connect("localhost","root","","homedb");

if(mysqli_errno($con))

{echo "Can't Connect to mySQL:".mysqli_connect_error();}

if(isset($_POST['target']))

{

$id = $_POST['id'];

$name = $_POST['target'];

$fetch="SELECT target, purpose, username, password, emailused, visits, lastdate, lasttime, saved

FROM lookuptbl WHERE target = '".$name."'";

$result = mysqli_query($con,$fetch);

if(!$result)

{echo "Error:".(mysqli_error($con));}

// =============================== this displays the table

echo '<table border="1">'.'<tr>'.'<td bgcolor="#FFD47F" align="center">'. 'email menu'. '</td>

'.'</tr>';

echo '<tr>'.'<td>'.'<table border="1">'.'<tr bgcolor="#ccffff">'.'<td>'.'target'.'</td>'.'

<td>'.'purpose'.'</td>' '<td>'.'username'.'</td>'.'<td>'.'password'.'</td>'.'

<td>'.'emailused'.'</td>'.'<td>'.'lastdate'.'</td>'.'<td>'.'lasttime'.'</td>'.'<td>'.'saved'.'</td>'.'</tr>';

// while($data = mysqli_fetch_row($fetch))

while($data=mysqli_fetch_row($result))

{echo ("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td><td>$data[4]</td>

<td>$data[5]</td><td>$data[6]</td><td>$data[7]</td><td>$data[8]</td></tr>");}

echo '</table>'.'</td>'.'</tr>'.'</table>';

}

?>

</body></html>

Код (разметка):

Support ProfitLead


Рег
05 Nov, 2013

Тем
1

Постов
3

Баллов
13
  • 21, May 2024
  • #2
Привет, есть ли ошибки/предупреждения в системном журнале? Кроме того, эта переменная, похоже, не используется:
 $query_display = mysqli_query($con,"SELECT * FROM lookuptbl");
PHP:
 

Evgenij118


Рег
19 Dec, 2015

Тем
0

Постов
3

Баллов
3
  • 07, Jun 2024
  • #3
Я думаю, ваша проблема заключается в отсутствующем html-теге «».

Затем на второй странице вы используете «$_POST» для сбора переменных.

Ваш скрипт не будет работать, поскольку переменная php $_POST пуста.

Добавьте тег «» непосредственно перед этой строкой:

echo "";

echo ""; Не забудьте часть «method='post'». В настоящее время приведенный ниже запрос отправляет в базу данных пустое «$name», что означает, что ни одна запись не соответствует, в результате ничего не отображается.

$name = $_POST['цель']; //в $_POST ничего нет, поэтому в "$name" тоже ничего нет.



$fetch="ВЫБЕРИТЕ цель, цель, имя пользователя, пароль, используемый адрес электронной почты, посещения, последнюю дату, последнее время, сохраненные FROM Lookuptbl WHERE target = '".$name."'"; Необработанный запрос, поступающий в базу данных, выглядит следующим образом: выберите * из поиска, где target='' Добавьте строку « Кроме того, не выполняйте такого рода кодирование на рабочем сервере.



Храните функции базы данных отдельно в файле PHP, не смешивайте их напрямую с HTML-кодом и PHP.

Кроме того, сбор переменных из $_POST или $_GET и т. д., а затем отправка их непосредственно в базу данных без проверки или экранирования представляет собой огромный риск.

Используйте операторы PDO, как объяснил DeathShadow, или, по крайней мере, избегайте собранных переменных.
 

piciolog


Рег
04 Jun, 2012

Тем
2

Постов
3

Баллов
23
  • 09, Jun 2024
  • #4
Просто чтобы подробнее остановиться на этом, никогда не доверяйте никаким предоставленным данным, независимо от источника.

Всегда старайтесь и подтверждайте это везде, где это возможно.

Всегда используйте подготовленные операторы при использовании любой переменной в запросе.

Лично я использую подготовленные операторы, даже если источник данных не является внешним по отношению к приложению/скрипту.

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

2mx


Рег
01 Jan, 2011

Тем
1

Постов
2

Баллов
12
  • 09, Jun 2024
  • #5
Хорошим началом было бы перенести свой набор навыков и кодовую базу из 1990-х годов. Вы не просто используете теги и атрибуты, такие как CENTER, BORDER и BGCOLOR, которые имеют НЕТ является действительным HTML с 1998 года, ваша методология PHP/SQL в равной степени отстает от времени, если не является полной тарабарщиной.



От использования добавления строк, когда в этом нет необходимости, до нескольких эхо, выполняющих работу одного эха, до включения переменных в строки запроса, разрушая всю причину, по которой старые функции mysql_ пошли по пути додо, и почему следует использовать mysqli или, что еще лучше, PDO .

Становится хуже, если копнуть глубже с такими вещами, как таблицы бесплатно, таблицы-обертки таблиц, без THEAD/TBODY, TH или SCOPE с TR + TD, выполняющим работу CAPTION, (есть теги, отличные от TR и TH, которые входят в таблицу), причудливые дополнения к струнам на Рождество, только знает что... Я имею в виду серьезно, виски-танго-фокстрот:
 <?php

// set this FIRST!

error_reporting(E_ALL ^ E_NOTICE);

// error_reporting(0);

echo '<!DOCTYPE html><html><head><meta charset="utf-8">

<title>Describe this Page</title>

</head><body>

<time>', $date->format('d-m-Y H:i:s a'), '</time>';

try {

$db = new PDO(

'mysql:host=localhost;dbname=homedb', // DSN

'root', // username

'' // password

);

} catch (PDOException $e) {

die('Connection failed:' . $e->getMessage());

}

echo '

<form>

<fieldset>

<select name="target">

<option value="">---select email account ---</option>';

$stmt = $db->query('

SELECT target

FROM lookuptbl

');

// if value is same as content of an OPTION, you don't need to say value=""

while ($target = $stmt->fetchColumn()) echo '

<option>', $target, '</option>';

echo '

</select>

<button>Submit</button>

</fieldset>

</form>';

// wasn't sure why you checked target, you don't use it...

if (!empty($_POST['target'])) {

$stmt = $db->prepare('

SELECT target, purpose, username, password, emailused, visits, lastdate, lasttime, saved

FROM lookuptbl

WHERE target = ?

');

$stmt->execute([$_POST['target']]);

if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

echo '

<table class="eMailMenu">

<caption>E-Mail Menu</caption>

<thead>

<tr>

<th scope="col">target</th>

<th scope="col">purpose</th>

<th scope="col">username</th>

<th scope="col">password'</th>

<th scope="col">emailused</th>

<th scope="col">lastdate</th>

<th scope="col">lasttime</th>

<th scope="col">saved</th>

</tr>

</thead><tbody>';

do {

echo '

<tr>

<th scope="row">', $row['target'], '</th>

<td>', $row['purpose'], '</td>

<td>', $row['username'], '</td>

<td>', $row['password'], '</td><!-- REALLY?!? Security, what's that? -->

<td>', $row['emailused'], '</td>

<td>', $row['lastdate'], '</td>

<td>', $row['lasttime'], '</td>

<td>', $row['saved'], '</td>

</tr>';

} while ($row = $stmt->fetch(PDO::FETCH_ASSOC));

echo '

</tbody>

</table>';

} else echo '

<div class="error">No matching records found</div>';

} else {

// should something be done if target and id are empty?

}

echo '

</body></html>';
Код (разметка): Тот, кто это написал, должен знать, как работает эхо и для чего оно нужно.

Тогда это:
  $fetch="SELECT target, purpose, username, password, emailused, visits, lastdate, lasttime, saved FROM lookuptbl WHERE target = '".$name."'";
Код (разметка): На дворе 2020 год, вы НЕ ВСТАВЛЯЙТЕ ПЕРЕМЕННЫЕ В СТРОКИ ЗАПРОСОВ! ОСОБЕННО, если источником значения является $_POST! Небезопасная, устаревшая, вышедшая из моды чушь.

Готовь/исполняй! .. и действительно переменные ни за что вам тоже не помогут. Здесь ДИКИЕ догадки, но если бы я сделал это первым, я бы переключился на использование PDO, поскольку с ним ваш доступ к данным будет более естественным.

Затем очищаем все остальное:
 echo '<tr>'.'<td>'.'<table border="1">'.'<tr bgcolor="#ccffff">'.'<td>'.'target'.'</td>'.' <td>'.'purpose'.'</td>' '<td>'.'username'.'</td>'.'<td>'.'password'.'</td>'.' <td>'.'emailused'.'</td>'.'<td>'.'lastdate'.'</td>'.'<td>'.'lasttime'.'</td>'.'<td>'.'saved'.'</td>'.'</tr>';
Код (разметка): все остальное, что вы пытаетесь сделать, находится во внешней таблице стилей, а не попадает в HTML волей-неволей.

Опять же, сейчас не 1997 год, и вы не пишете HTML 3.2. Предупреждение, промежуточный пост, чтобы в коде могли быть некоторые опечатки, но он должен дать вам общее представление о том, как действовать.

Также обратите внимание, что пробелы и единообразное форматирование — ваши друзья.
 

ErikPshat


Рег
19 Jun, 2012

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно