У меня есть приложение выбора спортивных игр, которое идет неделями. Прямо сейчас, если вы выберете неделю, которую вы уже выбрали, я получаю ошибку php. Вместо этого я хотел бы просто показать пользователю сообщение о том, что вы уже выбрали эту неделю.
Вот ошибка, которую я получаю, когда выбираю за ту же неделю
ERROR: duplicate key value violates unique constraint "user_record_pkey"DETAIL: Key (username, week_no)=(john, 1) already exists
Вот мой код
<?php
session_start();
require_once("dbconnect.php");
$flag = 0;
$row = 1;
// $weekest = $_POST['weekNum'];
$result3 = pg_query($conn, 'INSERT INTO demo.user_record VALUES (\''.$_SESSION['username'].'\','.$_POST['weekNum'].',0,0)') or die(pg_last_error());
//echo $_POST['picks0'];
//echo $_POST['picks1'];
for($row=1;$row<=$_POST['numPicks'];$row++){$pickName = "picks" . $row;
echo $pickName;
if($_POST[$pickName] == "picks$row")
{
$pick = $_POST['Tname'.$flag];
$flag+=2;
}
else
{
$flag++;
$pick = $_POST['Tname' . $flag];
$flag++;
}
//echo "error2";
$result2 = pg_prepare($conn, "myquery".$row, 'INSERT INTO demo.user_picks VALUES ($1,$2,$3,$4)') or die(pg_last_error());
$result2 = pg_execute($conn, "myquery".$row, array($_SESSION['username'],$_POST['weekNum'], $row, $pick)) or die(pg_last_error());
echo "finished";
}
?>
Во-первых, функция pg_query () возвращает FALSE при ошибке. Вы должны проверить это. В связанной документации есть примеры кода.
Во-вторых, ваш код подвержен внедрению SQL. Вы не должны использовать pg_query () для такого рода проблем. Вместо этого вы должны использовать pg_query_params (). (Та же ссылка. Поиск «Строковая интерполяция предоставленных пользователем данных чрезвычайно опасна».)
Других решений пока нет …