Задать вопрос
@ManaNedau
Администратор сайта wordpress/drupal

Как сделать post запрос с двух разных форм в две разные таблицы react php sql?

Мне нужно сделать форму регистрации и форму для ввода данных. Имеется кривое апи, которое умеет делать только один пост запрос. При попытке добавить второй в этот же запрос после ввода данных выдаёт ошибку, суть которой в том, что данные из другой таблицы не могут быть равны нулю

Php api

<?php
$user = file_get_contents('php://input');
    $method = $_SERVER['REQUEST_METHOD'];
    switch($method) {
        // case "POST":
            // $sign_in = json_decode(file_get_contents('php://input'));
            // $sql = "INSERT INTO users(id, email, password) VALUES(null, :email, :password)";
            // $stmt = $conn->prepare($sql);
            // $stmt->bindParam(':email', $sign_in->Email);
            // $stmt->bindParam(':password', $sign_in->password);
        case "GET":
            $sql = "SELECT * FROM diplom";
            $stmt = $conn->prepare($sql);
            $stmt->execute();
            $diplom = $stmt->fetchAll(PDO::FETCH_ASSOC);
            echo json_encode($diplom);
            break;
        case "POST":
            $user = json_decode( file_get_contents('php://input') );
            $sql = "INSERT INTO diplom(id, SecondName, Name, Surname, Email, Phone, Birthday, About) VALUES(null, :SecondName, :Name, :Surname, :Email, :Phone, :Birthday, :About)";
            $stmt = $conn->prepare($sql);
            $stmt->bindParam(':SecondName', $user->SecondName);
            $stmt->bindParam(':Name', $user->Name);
            $stmt->bindParam(':Surname', $user->Surname);
            $stmt->bindParam(':Email', $user->Email);
            $stmt->bindParam(':Phone', $user->Phone);
            $stmt->bindParam(':Birthday', $user->Birthday);
            $stmt->bindParam(':About', $user->About);
            if($stmt->execute()) {
                $response = ['status' => 1, "message" => "record created successfully"];
            } else {
                $response = ['status' => 0, "message" => "failed to create record"];
            } 
            break;
            $user = json_decode( file_get_contents('php://input') );
            $sql_1 = "INSERT INTO users(id, email, password) VALUES(null, :sign_email, :sign_pass)";
            $stmt_1 = $conn->prepare($sql_1);
            $stmt_1->bindParam(':email', $user->sign_email);
            $stmt_1->bindParam(':password', $user->sign_pass);
            if($stmt_1->execute()) {
                $response = ['status' => 1, "message" => "record created successfully"];
            } else {
                $response = ['status' => 0, "message" => "failed to create record"];
            }
    }
?>


Первая форма react

const navigate = useNavigate();
    const [inputs, setInputs] = useState({})

    const handleChange = (event) => {
        const name = event.target.name;
        const value = event.target.value;
        setInputs(values => ({...values, [name]: value}));
    }

    const handleSubmit = (event) => {
        event.preventDefault();

        axios.post('https://mana.tw1.su/api/user/save', inputs).then(function(response){
            console.log(response.data);
            navigate('/success');
        });
        
    }

<Form onSubmit={handleSubmit}>
                    <fieldset>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="SecondNameInput">Введите Вашу фамилию</Form.Label>
                        <Form.Control id="SecondNameInput" placeholder="Фамилия" name="SecondName" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="NameInput">Введите Ваше имя</Form.Label>
                        <Form.Control id="NameInput" placeholder="Имя" name="Name" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="SurnameInput">Введите Ваше отчество (при наличии)</Form.Label>
                        <Form.Control id="SurnameInput" placeholder="Отчество" name="Surname" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="EmailInput">Email</Form.Label>
                        <Form.Control id="EmailInput" type="email" placeholder="name@example.com" name="Email" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="NumberInput">Номер телефона</Form.Label>
                        <Form.Control id="NumberInput" type="tel" name="Phone" placeholder="+79881236790" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="DateInput">Дата рождения</Form.Label>
                        <Form.Control id="DateInput" type="date" name="Birthday" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Form.Label htmlFor="TextInput">Опишите Вашу трудовую деятельность</Form.Label>
                        <Form.Control id="TextInput" as="textarea" rews={5} name="About" onChange={handleChange}/>
                    </Form.Group>
                    <Form.Group className="mb-3">
                        <Checked/>
                    </Form.Group>
                </fieldset>
            </Form>


Вторая форма react

const navigate = useNavigate();
    const [inputs, setInputs] = useState({})

    const handleChange = (event) => {
        const name = event.target.name;
        const value = event.target.value;
        setInputs(values => ({...values, [name]: value}));
    }

    const handleSubmit = (event) => {
        event.preventDefault();

        axios.post('https://mana.tw1.su/api/user/sign_in', inputs).then(function(response){
            console.log(response.data);
            // navigate('/');
        });


<Form onSubmit={handleSubmit} className="sign_in">
                <Form.Group className="mb-3">
                    <Form.Label htmlFor="login">Email:</Form.Label>
                    <Form.Control id="sign_email" type="email" placeholder="name@example.com" name="sign_email" onChange={handleChange} autoComplete="username"/>
                </Form.Group>
                <Form.Group className="mb-3">
                    <Form.Label htmlFor="pass">Пароль:</Form.Label>
                    <Form.Control id="sign_pass" type="password" placeholder="1234" name="sign_pass" onChange={handleChange} autoComplete="current-password"/>
                </Form.Group>
                <Form.Group>
                    <Button className="Checkedbtn" type='submit'>Отправить заявку</Button>
                </Form.Group>
            </Form>
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Средний 13 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Поменяйте порядок заполнения таблиц.
И привязываться к email плохо. Сегодня у вас есть email на google.com, а завтра он вашу учётку перманентно забанил. Для связи лучше использовать синтетический id пользователя.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽