#php #mysql #database
#php #mysql #База данных
Вопрос:
Я хочу вставить данные только в текущую таблицу (которые уже созданы администратором и являются пустыми), а не во все таблицы при нажатии кнопки «Применить». Но этот код вставляет одни и те же данные во все таблицы. Вот мой код. Как это исправить?
<?php
//Setting up Database connection
$con=mysqli_connect("localhost","root","","bhc-tpd-db");
//Check Connection
if(mysqli_connect_errno())
{
echo "<script>alert('Database connection failed')</script>";
}
//Query to fetch records from the table
$query="SELECT * FROM event";
//Execute the query and store the result set
if ($result = $con->query($query))
{
//output data of each row
$row="";
global $cname;
while ($row=mysqli_fetch_array($result))
{
$cname=$row['cname'];
echo "<center><table>
<tr><th>Company Name</th><td>".$cname."</td></tr>
<tr><th>Job Title</th><td>".$row["job_title"]."</td></tr>
<tr><th>Job Description</th><td>".$row["job_desc"]."</td></tr>
<tr><th>Preferred Candidates</th><td>".$row["candidates"]."</td></tr>
<tr><th>Eligibility</th><td>".$row["eligibility"]."</td></tr>
<tr><th>Salary Package/CTC</th><td>".$row["salary"]."</td></tr>
<tr><th>Job Location</th><td>".$row["job_location"]."</td></tr>
<tr><th>Selection Process</th><td>".$row["sel_procs"]."</td></tr>
<tr><th>Venue</th><td>".$row["venue"]."</td></tr>
<tr><th>Event Date</th><td>".$row["event_date"]."</td></tr>
<tr><th>Event Time</th><td>".$row["event_time"]."</td></tr>
<tr><th>Comment</th><td>".$row["comment"]."</td></tr>
<tr><td colspan='2' style='text-align:right;'><button name='apply'>Apply</button></td></tr>
</table></center>";
echo "<hr>";
if (isset($_POST['apply']))
{
$username=$_SESSION['username'];
//$tablename[$row]=$row["cname"];
$query="INSERT INTO $cname SELECT * FROM stu_reg WHERE email='$username' IF NOT EXISTS";
if ($row=mysqli_fetch_array($result))
{
echo "<script>alert('".$cname ." Registered successfully');</script>";
}
else
{
echo "<script>alert('".$cname ." ERROR / Already Registered');</script>";
}
}
}//while ending
}
else
{
echo "0 events";
}
?>
Ответ №1:
Я предполагаю, что вокруг этой части скрипта есть какой-то html. Поскольку у вас есть несколько кнопок с одинаковым именем (‘apply’), он найдет $ POST[‘apply’] для всех строк, и это объясняет ваше текущее поведение. Если вы введете значение в каждую кнопку:
<button name='apply' value='$cname'>...</button>
И вы делаете что-то вроде:
if (isset($_POST['apply']) amp;amp; $_POST['apply'] == $cname)
Вероятно, это будет работать правильно.
Не забудьте экранировать весь пользовательский ввод, чтобы защитить себя от SQL-инъекции.
Также экранируйте $cname, на случай, если в имени есть апострофы.
В запросе mysql вы должны поместить имя таблицы в обратном порядке, например:
INSERT INTO `$cname`
Поскольку $cname является командой или свойством из mysql (например, USER или DATA или TABLE), ваш скрипт в противном случае завершится сбоем.
Комментарии:
1. Velthius : Большое вам спасибо за это решение. У меня это работает. Но, к сожалению, это приводит меня к другой ошибке, которая выглядит следующим образом: «Предупреждение: mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, bool, указанный в C:xampphtdocsBHC-TPDview_events.php в строке 95»
2. Вы никогда не выполняете свой запрос INSERT. После $query=»ВСТАВИТЬ В строку у вас должна быть строка типа: if ($result = $con->query($query)){ //последняя часть с зарегистрированным / уже зарегистрированным }