Автоматическое срабатывание переключателя

Я пытаюсь выполнять операции CRUD с использованием ООП и AJAX, и у меня возникла специфическая проблема. switch case statements запускается автоматически. У меня есть main_class, который содержит весь код для CRUD. И поскольку я хочу показать список всех категорий на отдельной странице, я столкнулся с проблемой. Делается автоматический пустой ввод в базу данных в таблице категорий.

main_class.php

class Main_class
{

     function __construct() 
     {
        include("db_connect.php");
        $this->db=new Db_Connect;
        $this->conn=$this->db->connect();

        $this->category_name=$_POST['cat_name'];
        $this->image_name=$_POST['image'];
     }

     public function category_add()
     {
         $x=$this->conn->query('Insert into categories (name) values '."('$this->category_name')");
         echo $x;
     }

     public function upload_image()
     {
        $this->image_name=$_FILES["image"]["name"];
        $this->image_tmp=$_FILES["image"]["tmp_name"];
        $this->image_upload=time()."_".$this->image_name;
        move_uploaded_file($this->image_tmp,"product_images/".$this->image_upload);

         $x=$this->conn->query('Insert into images (name) values '."('$this->image_upload')");
         echo $x;
     }

     public function showData()
     {
       $this->result=$this->conn->query('select * from categories');
       return $this->result;
    }

     public function oop()
     {
         $this->conn->query('Insert into categories (name) values '."('oop')");
     }

}


$obj=new Main_class();
switch($_POST['submit'])
{
case isset($_POST['cat_name']):
    $obj->category_add();
    break;

case isset($_POST['img']): //File upload code with OOPS

    $obj->upload_image();
    break;

default:
     $obj->oop();//just to check

}

category_add.php

<h1>Category Add</h1>
 <form method = "POST">
  <input type = "text" name = "cat_name" placeholder = "Add Category"><br><br>
  <input type = "submit" name = "submit" value = "category_add" id = "sub">
 </form>
    <script>
    $(document).ready(function(){

        $('#sub').click(function(event){
            event.preventDefault();

            $.ajax({
                method:"POST",
                url:"main_class.php",
                data:$('form').serialize() + "&submit=submit&par2=2&par3=232"

            });

        });
    });  
    </script>

Теперь проблема начинает появляться, когда я добавляю еще одну страницу, на которой пытаюсь показать список всех категорий. Когда я запускаю эту страницу, я получаю много ошибок, и в базу данных добавляется category. Я понял, что это происходит, потому что корпус переключателя запускается автоматически, но я не могу понять, когда значения не установлены, как это возможно, чтобы корпус переключателя сработал. Более того, когда я пытаюсь добавить категорию и изображение одну за другой, все работает отлично. В этот момент никаких помех не происходит.

category_show_all.php

<?php
include('main_class.php');

$this->obj=new Main_class;
$this->result=$this->obj->showData();

while($this->row=$this->result->fetch_assoc())
{
    $this->row['name'];
}

У вас есть кнопка с именем submit в форме, но вы все еще добавляете &submit=submit к данным?

Magnus Eriksson 03.08.2018 08:02

Да, потому что значение submit отличается, и я хочу отправить submit на main_class.php для использования того же самого в случае коммутатора.

Don'tDownvoteMe 03.08.2018 08:04

Я до сих пор не понимаю, почему вы добавляете &submit=submit к данным. Кроме того, вы не используете switch/case по назначению. Вместо этого просто используйте if/else, так как это в основном то, что вы делаете.

Magnus Eriksson 03.08.2018 08:07

Если я не отправлю submit, как еще мне выполнить желаемый код? Не могли бы вы предложить другой способ. Я был бы признателен, что.

Don'tDownvoteMe 03.08.2018 08:11

Но вы находятся отправляете submit, поскольку у вас есть <input type = "submit" name = "submit" value = "category_add" id = "sub">. Это отправит: submit=category_add. Сейчас вы отправляете: cat_name=foo&submit=category_add&submit=submit&par2=2&par3=2‌​32

Magnus Eriksson 03.08.2018 08:12

@MagnusEriksson, я пытаюсь проверить вставку изображений и категорий с помощью submit. Я хочу сказать, что если мы получим submit в качестве значения, управление сдвинется вниз, а затем, в зависимости от того, что нам подходит, будет запущена та же функция.

Don'tDownvoteMe 03.08.2018 08:17

Не думаю, что вы понимаете, о чем я. Вы отправляете submit=category_add&submit=submit. Нет необходимости добавлять второй submit=submit, так как у вас уже естьsubmit=category_add.

Magnus Eriksson 03.08.2018 08:22

На самом деле я понимаю вашу точку зрения, поскольку я использовал if/elseif, мне на самом деле не нужно значение submit. Спасибо, что указали на это, но я до сих пор не могу понять, почему корпус переключателя запускается автоматически.

Don'tDownvoteMe 03.08.2018 08:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
88
1

Ответы 1

Если $_POST['submit'] не установлен или установлен и == 0, ваш коммутатор будет пытаться сопоставить значение, эквивалентное false, и если $_POST['cat_name'] также не установлен, вызов isset вернет false, который затем будет соответствовать значению выражения переключателя . Таким образом, будет вызван код для добавления категории.

Чтобы обойти это, добавьте if (isset($_POST['submit']) && $_POST['submit'] == 1) вокруг оператора switch.

Спасибо что подметил это. Никогда об этом не думал. А как можно обойти эту проблему?

Don'tDownvoteMe 03.08.2018 08:03

Смотрите мою правку. Вам просто нужно проверить, действительно ли установлен $_POST['submit'].

Nick 03.08.2018 08:04

Я бы рекомендовал вместо этого использовать if/else. Это сделало бы код способ более понятным, поскольку это в основном то, что OP пытается сделать с switch/case.

Magnus Eriksson 03.08.2018 08:10

Только что добавлен isset($_POST['submit']), но корпус переключателя все еще горит и добавляется пустая категория.

Don'tDownvoteMe 03.08.2018 08:10

@ Don'tDownvoteMe - Не используйте для этого switch/case ...

Magnus Eriksson 03.08.2018 08:11

@MagnusEriksson Хорошо, я буду использовать if/else, но я не понимаю, почему корпус switch запускается, когда значение даже не установлено?

Don'tDownvoteMe 03.08.2018 08:14

Я забыл, что вам все равно нужно проверить, что $_POST['submit'] был 1, а также установлен. Смотрите мою новую правку.

Nick 03.08.2018 08:15

@ Don'tDownvoteMe - Потому что вы неправильно используете переключатель / регистр. Прочтите руководство о том, как его следует использовать.

Magnus Eriksson 03.08.2018 08:18

@MagnusEriksson, хотя это неортодоксально, нет ничего принципиально неправильного в том, как используется переключатель. См. Принятый ответ на вопрос, который был помечен как дубликат ..

Nick 03.08.2018 08:20

На самом деле, я думаю, что OP просто хочет сравнить значение submit (после комментариев под исходным сообщением) и тот факт, что submit действительно содержит имя метода, который вызывает OP. Так что думаю должно быть: swich($_POST['submit']) { case 'category_add': ...; case 'upload_image': ...; .... }.

Magnus Eriksson 03.08.2018 08:29

@MagnusEriksson не следил за этой цепочкой. Думаю, ты в сущности прав. Однако мой ответ по-прежнему подходит для исходного вопроса! :)

Nick 03.08.2018 08:32

Другие вопросы по теме