Я понятия не имею, почему это не работает вот back end php:
include_once 'dbh-inc.php';
if (isset($_POST['edit'])) {
$first = mysqli_real_escape_string( $conn , $_POST['first']);
$last = mysqli_real_escape_string( $conn , $_POST['last']);
$uid = mysqli_real_escape_string( $conn , $_POST['uid']);
$city = mysqli_real_escape_string( $conn , $_POST['city']);
$region = mysqli_real_escape_string( $conn , $_POST['region']);
$country = mysqli_real_escape_string( $conn , $_POST['country']);
$id = $_SESSION['u_id'];
mysqli_query($conn, "UPDATE users SET user_first = '$first', user_last =
'$last', user_uid = '$uid', user_city = '$city', user_region = '$region',
user_country = '$country' WHERE user_id = $id");
}
header("Location: ../my-profile-edit.php");
?>
когда я помещаю: mysqli_error () под запрос, он говорит, что $ id не определен, что вне меня, потому что эта переменная работает на всех других страницах для получения идентификатора текущего сеанса пользователя. это доказательство кода на странице входа:
$_SESSION['u_id'] =$row['user_id'];
вот HTML-код для страницы профиля обновления:
<?php include_once 'Header.php';
$uid = ucfirst($_SESSION['u_uid']);
//THIS CODE ONLY EDITS THE VISIBLE PORTION OF A USERS PROFILE//
?>
<form class = "edit-profile" action = "includes/edit-profile-inc.php"
method = "POST">
<table width = "398" border = "0" align = "center" cellpadding = "0">
<tr>
<td width = "82" valign = "top"><div align = "left"> <?php echo $uid ?> </div>
</td>
<td height = "26" colspan = "2"><input type = "text" name = "uid"
placeholder = "New Username"></td>
<td><div align = "right"><a href = "index.php">logout</a></div></td>
</tr>
<tr>
<td width = "129" rowspan = "5"><img src = "<?php echo $picture ?>" width = "129"
height = "129" alt = "no image found"/></td>
<td width = "82" valign = "top"><div align = "left">FirstName:</div></td>
<td width = "165" valign = "top"><input type = "text" name = "first"
placeholder = "New First name"></td>
</tr>
<tr>
<td valign = "top"><div align = "left">LastName:</div></td>
<td valign = "top"><input type = "text" name = "last" placeholder = "New Last
Name"></td>
</tr>
<tr>
<tr>
<td valign = "top"><div align = "left">City:</div></td>
<td valign = "top"><input type = "text" name = "city" placeholder = "New City">
</td>
</tr>
<tr>
<tr>
<td valign = "top"><div align = "left">Region: </div></td>
<td valign = "top"><input type = "text" name = "region" placeholder = "New
Region"></td>
</tr>
<tr>
<td valign = "top"><div align = "left">Country:</div></td>
<td valign = "top"><input type = "text" name = "country" placeholder = "New
Country"></td>
</tr>
<tr>
<td valign = "top"><div align = "left">About me: </div></td>
<td valign = "top">
<input type = "text" name = "about" placeholder = "About me">
</td>
</tr>
<tr>
<td><button type = "submit" name = "edit">Update profile</button></td>
</tr>
</table>
</form>
<p align = "center"><a href = "index.php"></a></p>
<?php
include_once 'Footer.php';
?>
так что да, я не согласен с тем, почему это не работает, любая помощь будет очень признательна!
к сожалению не работает :(
Также совет по отладке запросов: попробуйте отправить запрос через mysql workbench, phpMyAdmin или что-то еще, что вы используете. Когда вы отправляете запрос, замените переменные PHP на образцы данных, чтобы увидеть, какие ошибки он вызывает. Обычно это проясняет для меня.
Проверьте, начата ли ваша сессия. Возможно, вы пропустили session_start до вставки. Если сеанс запущен, бросьте туда var_dump($_SESSION);, чтобы посмотреть, что доступно.
Чтобы прояснить комментарий Ховарда, вы пытались заключить $ id в одинарные кавычки, верно? ...WHERE user_id = '$id'");
mopsyd, вы были правы, глупая ошибка, я думал, что он будет включен, потому что он был на главной странице. Большое спасибо, ребята!
mysqli вы должны использовать параметризованные запросы и bind_param для добавления пользовательских данных в свой запрос. НЕ использует экранирование вручную и интерполяцию или конкатенацию строк для достижения этой цели, потому что вы создадите серьезный Ошибки внедрения SQL. Случайно неэкранированные данные представляют собой серьезный риск. Использование связанных параметров менее подробно, и их легче проверить, чтобы убедиться, что вы все делаете правильно.
Если вы только начинаете работать с PHP и хотите создавать приложения, я также настоятельно рекомендую посмотреть различные рамки разработки, чтобы узнать, сможете ли вы найти тот, который соответствует вашему стилю и потребностям. Они бывают разных видов, от легких, таких как Обезжиренный фреймворк, до гораздо более всеобъемлющих, таких как Laravel. Это дает вам конкретные примеры для работы и гораздо более подробное руководство по написанию кода и организации файлов.
// ПОДГОТОВЛЕННЫЕ ЗАЯВЛЕНИЯ // $ sql = "INSERT INTO users ('user_first, user_last, user_uid, user_city, user_region, user_country') VALUES (?,?,?,?,?,?);"; $ stmt = mysqli_stmt_init ($ conn); if (! mysqli_stmt_prepare ($ stmt, $ sql)) {echo "Ошибка SQL"; } else {mysqli_stmt_bind_param ($ stmt, "sssss", $ first, $ last, $ uid, $ city, $ region, $ country); mysqli_stmt_execute ($ stmt); } .... добавляет это, что вы имеете в виду, чтобы я защищался от инъекции?






Длинный выстрел, но попробуйте заключить идентификатор в одинарные кавычки. пример:
'$id'