PHP массив отправляет React Native Fetch - PullRequest
0 голосов
/ 10 июля 2019

Я новичок в React-Native и PHP, я пытаюсь отправить массив из PHP в REACT-NATIVE, результат - [объектный объект], как будто ничего не получено для PHP, проблема в том, что данные не могут отображатьсяна экране, функция PHP работает хорошо, я тестирую с почтальоном, и все было отлично, но в передней Нет, мой код выглядит так:

export class Home extends Component {

  state = {
    data: []
  };

componentWillMount() {
  alert(this.fetchData());
    this.fetchData();
  }

  fetchData = async () => {
    const response = await fetch("http://localhost/APP/Chauffeur/Backendapp/api/Traitement/AffichageStation.php");
    const json = await response.json();
    this.setState({ data: json.results });
  };

 render() {
   return (
     <View style={styles.container}>
       <FlatList
         data={this.state.data}
         keyExtractor={(x, i) => i}
         renderItem={({ item }) =>
           <Text>
             {`${item.name.nom} ${item.name.adresse}`}
           </Text>}
       />
     </View>
   );
 }
}

const styles = StyleSheet.create({
 container: {
   marginTop: 15,
   flex: 1,
   justifyContent: "center",
   alignItems: "center",
   backgroundColor: "#F5FCFF"
 }
});
/*const styles = StyleSheet.create({
  container: {
    marginTop: 9,
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
    backgroundColor: "#CAD9E5",
  },
  go:{
    marginTop: 90,
    position:"absolute",
    color:"red"
  }
});*/

export default Home;

Функция chau

<?php

$query = 'SELECT  A.idCH, A.idC, A.createdAt , S.nomStation as nom , S.adresse as adresse , C.quantite as quantite
    FROM Affectation A
    INNER JOIN Commande C ON A.idC=C.id
    INNER JOIN station S ON S.id=C.idS
    WHERE idCH=:idCH
         ORDER BY A.createdAt DESC';

$stmt = $this->conn->prepare($query);
$stmt->bindParam(':idCH', $this->idCH);

// Execute query
$stmt->execute();
if ($stmt->rowCount() > 0) {
    $stmt = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($stmt as $key => $value) {
        return json_encode($stmt);
    }
} else {
    return false;
}
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Access-Control-Allow-Headers,Content-Type,Access-Control-Allow-Methods, Authorization, X-Requested-With');
session_start();
include_once "../../config/Database.php";
include_once "../../models/Affectation.php";
$Database = new Database();
$db = $Database->connect();
$Affectation = new Affectation($db);

$Affectation->idCH = '105';
$results = $Affectation->chau();

echo $results;

?>

1 Ответ

0 голосов
/ 10 июля 2019

С оператором return внутри цикла foreach вы в лучшем случае вернете только первый результат.

Просто json_encode весь набор результатов и возвращайте так:

$stmt->execute();
if($stmt->rowCount() > 0){
    return json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
//    foreach ($stmt as $key => $value) {
//       return json_encode($stmt);
//    }
}else{
    return false;
}

Редактировать:

Я только что заметил, что вы возвращаете $stmt не $value таквы действительно возвращаете весь набор результатов.Если вы просто получаете пустой массив, это говорит о том, что ваш запрос не возвращает никаких результатов

...