#php #mysqli
#php #mysqli
Вопрос:
В настоящее время я работаю над CMS, и у меня работает галерея, и конечный пользователь может загружать свои фотографии, и они появляются прямо в Интернете. Теперь я хочу создать опцию / функцию, чтобы конечный пользователь мог выбрать, какая фотография будет размещена в Интернете, а какая нет. Я нашел скрипт под названием update_multiple.php и это работает нормально, но я использую MySQLi. Я внес некоторые изменения, чтобы он использовал MySQLi, но теперь скрипт не работает, и я не знаю почему. Я не получаю никаких ошибок. Мой текст не добавляется в мою базу данных.
Надеюсь, кто-нибудь может помочь мне, что я делаю неправильно.
Мой код;
<?php
ob_start();
require('../../lib/dbconnection.php');
$query = "SELECT * FROM gallery";
$result=$conn->query($query) or die(mysqli_error($conn));
$count=$result->num_rows;
?>
<form name="form1" method="post" action="">
<table class="OnlineImages">
....
<?php
/* fetch associative array */
while ($rows = $result->fetch_array(MYSQLI_ASSOC)) {
?>
<tr>
<td><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>
<td align="center"><input name="filename[]" type="text" id="filename" value="<?php echo $rows['filename']; ?>"></td>
<td><input type="text" name="title[]" id="title" value="<?php echo $rows['title'];?>"></td>
<td><input type="text" name="caption[]" id="caption" value="<?php echo $rows['caption'];?>"></td>
<td><input type="text" name="home[]" id="home" value="<?php echo $rows['home'];?>"></td>
<td><input type="text" name="photobook[]" id="photobook" value="<?php echo $rows['photobook'];?>"></td><br>
</tr>
<?php
}
?>
<input type="submit" name="submit" value="Submit">
</form>
</table>
<?php
// Check if button name "Submit" is active, do this
if(isset($_POST['submit'])){
$title = $_POST['title'];
$caption = $_POST['caption'];
$home = $_POST['home'];
$photobook = $_POST['photobook'];
for($i=0;$i<$count;$i ){
$sql1 = " UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$home[$i],photobook='$photobook[$i]' WHERE id='$id[$i]' ";
$result1=$conn->query($sql1);
}
}
if(isset($result1)){
header("location:foto-admin.php");
}
?>
Комментарии:
1. Используйте var_dump($mysqli-> ошибка); после каждого запроса, иначе мы будем стрелять в темноте.
2. Я получаю сообщение об ошибке: пытаюсь получить свойство не-объекта
Ответ №1:
Ваши переменные должны быть идентифицированы как таковые в строке.
Вам нужно сделать:
" UPDATE gallery SET title='{$title[$i]}', caption='{$caption[$i]}', home='{$home[$i]}',photobook='{$photobook[$i]}' WHERE id='$id[$i]' "
Также вам не хватало ‘ после дома.
Пожалуйста, имейте в виду, что это приводит к sql-инъекциям и вместо этого должно выполняться с помощью подготовленного оператора.
Редактировать:
Также передайте идентификатор. Изменить
<td><?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>
Для
<td><input type="hidden" name="id[]" value="<?php echo $rows['id'] ?>" />
<?php $id[]=$rows['id']; ?><?php echo $rows['id']; ?></td>
И добавить
$id = $_POST['id'];
перед
$title = $_POST['title'];
Комментарии:
1. Я действительно хочу использовать подготовленные операторы, но это еще один шаг. сначала основы и как это работает
2. Я сделал это, но это не помогло. Когда я перехожу с mysql на mysqli со всем остальным тем же, я получаю ошибки в своем журнале; [Ср. 18 июня 06:46:40 2014] [ошибка] [клиент 127.0.0.1] Уведомление PHP: неопределенная переменная: идентификатор в /Users/davegreebe/Development/ClassicNails-Studio/public_html/admin/foto-admin.php в строке 31, реферер: ontwikkel.classicnails-studio.nl/admin/foto-admin.php Это всего лишькогда я что-то отправляю.
3. Обновил мой ответ, чтобы учесть это.
Ответ №2:
Насколько мне известно, несколько месяцев назад я работал в этой области и написал код для обновления нескольких строк / столбцов, надеюсь, этот код поможет вам получить представление по-другому.
$group_sql = $db->prepare("UPDATE `groups` SET `group`=? WHERE `group_id`=?;");
foreach($_POST['groups'] as $id => $group)
{
$group_sql->execute(array($group, $id));
}
И многократное обновление:
$query = array();
foreach($_POST['groups'] as $id => $group)
{
$query[] = "WHEN {$id} THEN {$db->quote($group)}";
}
$query = "
UPDATE `groups`
SET `group` = CASE `group_id`
" . implode("rn", $query) . "
END
WHERE `group_id` IN (" . implode(',', array_keys($_POST['groups'])) . ");
";
Который в конечном итоге сгенерирует:
UPDATE `groups`
SET `group` = CASE `group_id`
WHEN 3054 THEN 'moteris savo vaikams'
WHEN 3055 THEN 'bičių šeimoje'
END
WHERE `group_id` IN (3054,3055)
UPDATE `groups`
SET `group` = CASE `group_id`
WHEN 3054 THEN 'moteris savo vaikams'
WHEN 3055 THEN 'bičių šeimoje'
END,
SET `description` = CASE `group_id`
WHEN 3054 THEN 'foo'
WHEN 3055 THEN 'bar'
END
WHERE `group_id` IN (3054,3055)