Как вставить данные в таблицу, в которой tablename является переменной php, которая изменяется на основе нажатия кнопки?

#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)){ //последняя часть с зарегистрированным / уже зарегистрированным }