Публикация в базе данных не работает (Ошибка / Предупреждение: неожиданный конец ввода JSON) - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над мобильным приложением с React Native. Проблема в том, что мне кажется, что я ничего не могу вставить в базу данных. У меня есть страница регистрации, где пользователю нужно написать имя пользователя и пароль (и повторить этот пароль), который работал нормально несколько месяцев go. Я ничего не изменил на этой конкретной странице, но когда я начал добавлять новые страницы, например, другую страницу, которая не работает, она перестала работать и выдала мне предупреждение, которое можно увидеть здесь:

Другая страница, которая не работает, - это место, где пользователь может опубликовать работу с указанием дат и т. Д. Эта страница не сделана, но она должна быть сделана достаточно, чтобы пользователь мог что-то опубликовать в базе данных, но она дает мне ошибку, которую можно увидеть здесь:

Код страницы регистрации следующий (таблица стилей не включена):

import React, { Component } from "react"; 
import { View, Text, StyleSheet, Alert, TextInput, ImageBackground, Image, AsyncStorage, TouchableOpacity } from "react-native";
import { Button, Icon, withTheme } from 'react-native-elements';

const SIGNUP_URL = 'http://kamilla-server.000webhostapp.com/app/signUp.php';

class SignUp extends Component {
 constructor(props) {
    super(props);

    this.state= {
        email: '',
        password: '',
        password2: '',
    };
 }

async onSignUp() {
    const { email, password, password2 } = this.state;

    if(this.state.email != '' && this.state.password != '' && this.state.password2 != '') {
        if(password != password2) {
            Alert.alert('Password matcher ikke', 'De to indtastede passwords skal være det samme password')
        } else {
            const response = await fetch(SIGNUP_URL, {
                headers: {
                    Accept: 'application/json',
                    'Content-Type': 'application/json'
                },
                method: 'POST',
                body: JSON.stringify({ email, password }),
            })

            const data = await response.json()


            if (data.error) {
                alert(data.error)
            } else {
                AsyncStorage.setItem('UserID', data.user.UserID)
                this.props.navigation.navigate('SignUpMessage')
            }
        }
    } else {
        Alert.alert('Tomme felter', 'Venligt indtast email og password for at kunne oprette en bruger')
    }
}

render() {
    const { email, password, password2 } = this.state;

    return(
        <View style={styles.container}>
            <ImageBackground source={require('../../images/1088.jpg')} style={styles.background} />

            <View>
                <Image source={require('../../../assets/logo.png')} style={styles.logo} />

                <TextInput
                    value={email}
                    onChangeText={(email) => this.setState({email})}
                    placeholder={'Email'}
                    placeholderTextColor='white'
                    keyboardType='email-address'
                    style={styles.input}
                />

                <TextInput
                    value={password2}
                    onChangeText={(password2) => this.setState({ password2 })}
                    placeholder={'Password'}
                    placeholderTextColor='white'
                    secureTextEntry={true}
                    style={styles.input}
                />

                <TextInput
                    value={password}
                    onChangeText={(password) => this.setState({ password })}
                    placeholder={'Password'}
                    placeholderTextColor='white'
                    secureTextEntry={true}
                    style={styles.input}
                />

                <TouchableOpacity onPress={() => this.props.navigation.navigate('Login')}>
                    <Text style={styles.underlined}>Har du allerede en konto? Login.</Text>
                </TouchableOpacity>

                <Button 
                    title="Opret Konto" 
                    buttonStyle={styles.greenButton}
                    onPress={this.onSignUp.bind(this)}
                />

            </View>

        </View>
    )
 }
}

export default SignUp;

URL-адрес SIGNUP_URL ссылается на следующий код:

<?php
    require_once('../db/dbcon.php');

    session_start();

    try {
        $inputJSON = file_get_contents('php://input');
        $input = json_decode($inputJSON, TRUE);

        $email = htmlspecialchars($input['email']);
        $password = htmlspecialchars($input['password']);

        $dbCon = dbCon($user, $pass);
        $query = $dbCon->prepare("SELECT `user`.Email FROM `user` WHERE `Email` = ?");
        $query->bindParam(1, $email);
        $query->execute();
        $getUser = $query->fetchAll();

        if(count($getUser) > 0) {
            $status = 0;

            echo json_encode(array('error' => 'Der findes allerede en bruger for den indtastede email.'));
        } else {
            $sql = "INSERT INTO `user` (`UserID`, `Email`, `Password`)
                        VALUES (NULL, ?, ?)";
            $query = $dbCon->prepare($sql);
            $query->bindParam(1, $email);
            $query->bindParam(2, $password);

            $query->execute();

            $last_id = $dbCon->lastInsertId();
            $query2 = $dbCon->prepare("SELECT `UserID`
                                    FROM `user`
                                    WHERE `UserID` = '{$last_id}'");
            $query2->execute();
            $getNewUser = $query2->fetch();
            if ($query2) {
                echo json_encode(array('user' => $getNewUser));

                $_SESSION['userID'] = $getUser['UserID'];
                //$_SESSION['volunteerID'] = $getVolunteer['VolunteerID'];

            } else {
                echo json_encode(array('error' => 'Der gik noget galt. Venligst prøv igen.'));
            }
        }
    } catch (PDOException $e) {
        error_log(print_r($e->getMessage(), TRUE));
    }

?>

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Проблема была в следующей строке: $_SESSION['userID'] = $getUser['UserID']; $getUser должно было быть $getNewUser, поскольку это имя переменной, из которой я получаю. Я, должно быть, изменил это в какой-то момент, не осознавая, тем самым создавая проблему.

0 голосов
/ 24 февраля 2020

Возможно, я ошибаюсь, но, скорее всего, ваш API выборки получает ошибку, вы должны попробовать изменить выборку функции async onSignUp на что-то вроде:

  await fetch(SIGNUP_URL, {<params>})
    .then(res => {
      // Handle API Errors
      if (!res.ok) {
        console.log(res.statusText);
      }
      // Return if no errors
      return res.json();
    })
    // this is the data you want
    .then(data => data)
    // it will only reject on network failure or if anything prevented the request from completing
    .catch(error => {
      console.log(error.message)
    });

, вы можете попробовать описанный выше подход к посмотреть, если вы получаете ошибку в ответе! Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...