VueJS: Error in v-on handler (Promise/async) status 500

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Hi Tweakers,

Ik ben eigenlijk een webshop aan het opzetten in Laravel in combinatie met vueJS.

Maar helaas krijg ik een foutmelding op het moment dat ik mijn aankoop wil finaliseren


Foutmelding die te lezen is vanout de console:
code:
1
[Vue warn]: Error in v-on handler (Promise/async): "Error: Request failed with status code 500"


Hier de vue.JS component:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<script>
export default {
  data() {
    return {
      items: [],
      firstName: '',
      lastName: '',
      address: '',
      city: '',
      zipCode:'',
      email:'',
      phone:'',
      country:'',
      cardType:'',
      expirationMonth: '',
      expirationYear: '',
      cvv:'',
      cardNumber:'',
    }
  },
  methods: {
    async getCartItems() {
      let response = await axios.get("/checkout/get/items");
      this.items = response.data;
      console.log(this.items);
    },
    async getUserAddress(){
      if(this.firstName != '' && this.address != '' && this.cardNumber && this.cvv)
      {
       // Process payment.
        let response = await axios.post('/process/user/payment', {
        'firstName':this.firstName,
        'lastName':this.lastName,
        'address':this.address,
        'city':this.city,
        'zipCode':this.zipCode,
        'email':this.email,
        'phone':this.phone,
        'country':this.country,
        'cardType':this.cardType,
        'expirationMonth':this.expirationMonth,
        'expirationYear':this.expirationYear,
        'cvv':this.cvv,
        'cardNumber':this.cardNumber,
        'amount': this.items.totalAmount,
        'order': this.items,
    });
      if(response.data.message == 'success')
    {
      this.$toastr.s(response.data.success)
    }
    else{
      this.$toastr.e(response.data.error);
    }
      setTimeout(()=> {
        window.location.href='/';
      }, 1500);
        console.log(response.data);

      }
      else{
            this.$toastr.e('User info incomplete');
      }
          console.log(response);
    }
  },
  created() {
    this.getCartItems();
  }
};
</script>


Hier de PHP componenten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
  public function processPayment(Request $request)
{
    dd($request->all());
    $firstName = $request->get('firstName');
    $lastName = $request->get('lastName');
    $address = $request->get('address');
    $city = $request->get('city');
    $zipCode = $request->get('zipCode');
    $email = $request->get('email');
    $phone = $request->get('phone');
    $country = $request->get('country');
    $cardType = $request->get('cardType');
    $expirationMonth = $request->get('expirationMonth');
    $expirationYear = $request->get('expirationYear');
    $cvv = $request->get('cvv');
    $cardNumber = $request->get('cardNumber');
    $amount = $request->get('amount');
    $orders = $request->get('order');
    $ordersArray = [];

    // getting orders details
    foreach($orders as $order)
    {
        if($order['id'])
        {
            $ordersArray[$order['id']]['order_id'] = $order['id'];
            $ordersArray[$order['id']]['quantity'] = $order['quantity'];

        }
    }
    dd($order);

    // process payment

    $stripe = Stripe::make(env('STRIPE_KEY'));

    $token = $stripe->tokens()->create([
        'card' => [
            'number' => $cardNumber,
            'exp_month' => $expirationMonth,
            'exp_year' => $expirationYear,
            'cvv' => $cvv,
        ],
    ]);
    if (!$token['id']) {
        session()->flush('error', 'Stripe Token generation failed');
        return;
    }
    // Create a customer Stripe
    $customer = $stripe->customers()->create([
        'name' => $firstName. ''.$lastName,
        'email' => $email,
        'phone' => $phone,
        'address' => [
            'line1' => $address,
            'postal_code' => $zipCode,
            'city' => $city,
            'country' => $country,
        ],
        'shipping' => [
            'name' => $firstName.' '.$lastName,
            'address' => [
            'line1' => $address,
            'postal_code' => $zipCode,
            'city' => $city,
            'country' => $country,
            ],
        ],
        'source' => $token['id'],
    ]);
    dd($customer);
    // code for charging the client in Stripe
    $charge = $stripe->charges()->create([
        'customer' => $customer['id'],
        'currency' => 'eur',
        'amount' => $amount,
        'description' => 'Betaling van de bestelling',
        // 'total' => items.totalAmount,
    ]);
    if($charge['status'] =='succeeded')
    {
        // capture the datails from Stripe
        $customerIdStripe = $charge['id'];
        $amountRec = $charge['amount'];
        $client_id = auth()->user()->id;

        $processingDetails = Processing::create([
            'client_id' => $client_id,
            'client_address' => json_encode([
                                    'line1' => $address,
                                    'postal_code' => $zipCode,
                                    'city' => $city,
                                    'country' => $country,
                                ]),
            'order_details' => json_encode($ordersArray),
            'amount' => $amount,
            'currency' => $charge['currency'],

        ]);
        if($processingDetails)
        {
            // clear the cart after payment success
            Cart::where('user_id', $client_id)->delete();

            return ['success' => 'Order Completed successfully'];
        }
    }
    else {
        return ['error' => 'Order Failed contact support'];

    }
}


Ik denk eerder dat het probleem heeft te maken met de url link. Maar helaas heb ik meer dan 10 al de url link gecontroleerd in de php router root, maar daar is ook geen spelfouten te vinden.

zo ziet mijn php router eruit:

code:
1
2
3
4
Route::get('/checkout', [CartsController::class, 'index'])->name('checkout');
Route::get('/checkout/get/items',[CartsController::class, 'getCartItemsForCheckout']);

Route::post('/process/user/payment',[CartsController::class, 'processPayment']);

Alle reacties


Acties:
  • +2 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
de php foutmelding zou handig zijn. 500 error is een server side (php) error, niks met je vue client side te maken.

Acties:
  • +2 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
Verder lijkt het me niet wenselijk om het betaalbedrag clientsided te bepalen, een scriptkiddie past het 'amount' argument zo naar 0,01 euro en koopt je hele voorraad op ;)

Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Ik heb verder onderzocht, ik kan geen spelfouten vinden in de php code.

Zou het dan kunnen zijn dat de foutmelding komt vanuit Stripe-betalingssysteem? Waarschijnlijk doordat ik gen gebruik maak van https verbinding?

Acties:
  • 0 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
Ralfefernandes1 schreef op woensdag 20 april 2022 @ 15:55:
Ik heb verder onderzocht, ik kan geen spelfouten vinden in de php code.

Zou het dan kunnen zijn dat de foutmelding komt vanuit Stripe-betalingssysteem? Waarschijnlijk doordat ik gen gebruik maak van https verbinding?
Kijk in je server php error logs (of begin met loggen). Zonder foutmelding blijft het gissen.

Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Sowieso kun je in de console van je browser natuurlijk exact zien welk request een 500 response code krijgt. Je zult sowieso zelf even wat tijd moeten stoppen in het debuggen van de situatie, want wij kunnen ( en willen ;) ) dat niet voor jou gaan doen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Woy schreef op woensdag 20 april 2022 @ 16:05:
Sowieso kun je in de console van je browser natuurlijk exact zien welk request een 500 response code krijgt. Je zult sowieso zelf even wat tijd moeten stoppen in het debuggen van de situatie, want wij kunnen ( en willen ;) ) dat niet voor jou gaan doen.
Dat klopt en je hebt gelijk... maar aan de andere kant, dit is de reden waarvoor e zo een fantastisch forum hebben... om elkaar te ondersteunen.

de response error komt vanuit de route::post(/processPayment/)

Hier heb ik een voor een nagelopen, helaas ik kan geen echt fouten vinden.

Zoals je hier ziet:

in de web.php, heb ik zo ingesteld:
code:
1
Route::post('/process/user/payment',[CartsController::class, 'processPayment']);

en in de vue componenten, heb ik zo ingesteld:


Zoals ik al eerder zei, vanuit de console, komt de foutmelding vanuit de vue component:
code:
1
2
3
4
5
6
7
 async getUserAddress(){
      if(this.firstName != '' && this.address != '' && this.cardNumber && this.cvv)
      {
       // Process payment.
        let response = await axios.post('/process/user/payment', {
....
}


Afbeeldingslocatie: https://tweakers.net/i/YZU7r3arV35YLhOXxp0iqxxfpSs=/x800/filters:strip_exif()/f/image/uK7eS8SkSdgLZTIhJB0A5b1B.png?f=fotoalbum_large

[ Voor 23% gewijzigd door Ralfefernandes1 op 20-04-2022 16:20 ]


Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ralfefernandes1 schreef op woensdag 20 april 2022 @ 16:14:
[...]


Dat klopt en je hebt gelijk... maar aan de andere kant, dit is de reden waarvoor e zo een fantastisch forum hebben... om elkaar te ondersteunen.

Zoals ik al eerder zei, vanuit de console, komt de foutmelding vanuit de vue component:

[Afbeelding]
Je ziet hier in de logging exact dat de fout uit de /process/user/payment request komt, en dus niks met Vue te maken heeft. Wij kunnen dan ook niet veel met de informatie die je hier geeft, en je zult zelf in je PHP script moeten debuggen waarom er daar een error veroorzaakt wordt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1 Henk 'm!

  • Stroopwafels
  • Registratie: September 2009
  • Laatst online: 18:46
Ralfefernandes1 schreef op woensdag 20 april 2022 @ 16:14:
[...]


Dat klopt en je hebt gelijk... maar aan de andere kant, dit is de reden waarvoor e zo een fantastisch forum hebben... om elkaar te ondersteunen.

Zoals ik al eerder zei, vanuit de console, komt de foutmelding vanuit de vue component:

[Afbeelding]
Vue laat juist zien dat je server een 500 error geeft. Kijk in de logs van Laravel onder /storage/logs/.

Acties:
  • 0 Henk 'm!

  • endness
  • Registratie: Maart 2006
  • Laatst online: 12-09 19:09
Ralfefernandes1 schreef op woensdag 20 april 2022 @ 16:14:
[...]


Dat klopt en je hebt gelijk... maar aan de andere kant, dit is de reden waarvoor e zo een fantastisch forum hebben... om elkaar te ondersteunen.

Zoals ik al eerder zei, vanuit de console, komt de foutmelding vanuit de vue component:

[Afbeelding]
Kijk eens in je netwerk-tab. Daar zul je zien welke request de 500 teruggeeft, en met een beetje geluk vind je daar nog wat meer nuttige informatie.

Acties:
  • +1 Henk 'm!

  • scosec
  • Registratie: Februari 2016
  • Laatst online: 11-09 16:13
Misschien ook even de axios.get().then().catch() implementeren. Dat kun je in elk geval de error goed afhandelen.

Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
scosec schreef op donderdag 21 april 2022 @ 09:11:
Misschien ook even de axios.get().then().catch() implementeren. Dat kun je in elk geval de error goed afhandelen.
I tried already and with no luck.

dit is wat ik zie als foutmelding in de google console:

Afbeeldingslocatie: https://tweakers.net/i/jUCNAyqq-XM2tAn66nDVulbm7Ps=/800x/filters:strip_exif()/f/image/PHjvFsY0eiUoHDPWnBWESYz0.png?f=fotoalbum_large

[ Voor 14% gewijzigd door Ralfefernandes1 op 21-04-2022 14:25 ]


Acties:
  • +5 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
I tried already and with no luck.

dit is wat ik zie als foutmelding in de google console:
Je luistert ook niet, de error ga je niet vinden in je browser. Ga in je server logs kijken! Zonder de foutmelding achter de 500 kunnen we niks voor je doen.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Niet om het één of ander, maar hoe heb je bedacht om poort 8000 te gebruiken?
Dat is niet standaard 80 of 8080.
8000 wordt meestal gebruikt voor:
  • Internet radio streams
  • Django Development Webserver
  • Python 3 http.server
Verder: kijk in je nginx/apache error log...

[ Voor 33% gewijzigd door DJMaze op 21-04-2022 14:35 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • Groentjuh
  • Registratie: September 2011
  • Laatst online: 17:19
In de netwerk-tab van de developer console zul je zien dat Vue een verzoek doet naar je Laravel project. Daar krijg je een 500-error op terug.

Aangenomen dat "Application Debug Mode" in laravel uit staan, zou je het terug moeten kunnen vinden onder /storage/logs/ van je laravel project op jouw PHP-server. Als de overigens niet zo is, dan kan het ook zijn dat dat de fout is, want laravel vind het niet leuk om niet naar de logs te kunnen schrijven!

Sowieso gaat de gepostte PHP-code niet goed, want je gebruikt meerdere malen de functie "dd" en die gaat denk ik niet de juiste json voor je maken.

[ Voor 14% gewijzigd door Groentjuh op 21-04-2022 14:40 ]


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
DJMaze schreef op donderdag 21 april 2022 @ 14:32:
Niet om het één of ander, maar hoe heb je bedacht om poort 8000 te gebruiken?
Dat is niet standaard 80 of 8080.
8000 wordt meestal gebruikt voor:
  • Internet radio streams
  • Django Development Webserver
  • Python 3 http.server
Verder: kijk in je nginx/apache error log...
Ik krijg automatisch toegewezen door deze command te gebruiken:

code:
1
 php artisan serve

Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Groentjuh schreef op donderdag 21 april 2022 @ 14:36:
In de netwerk-tab van de developer console zul je zien dat Vue een verzoek doet naar je Laravel project. Daar krijg je een 500-error op terug.

Aangenomen dat "Application Debug Mode" in laravel uit staan, zou je het terug moeten kunnen vinden onder /storage/logs/ van je laravel project op jouw PHP-server. Als de overigens niet zo is, dan kan het ook zijn dat dat de fout is, want laravel vind het niet leuk om niet naar de logs te kunnen schrijven!

Sowieso gaat de gepostte PHP-code niet goed, want je gebruikt meerdere malen de functie "dd" en die gaat denk ik niet de juiste json voor je maken.
Ik heb even in de /logs/laravel.log gekeken. helaas wordt niet aangegeven.

dit is de vue code :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
methods: {
async getCartItems() {
  let response = await axios.get("/checkout/get/items");
  this.items = response.data;
  console.log(this.items);
},
async getUserAddress(){
  if(this.firstName != '' && this.address != '' && this.cardNumber && this.cvv)
  {
   // Process payment.
    let response = await axios.post("/process/user/payment", {
    'firstName':this.firstName,
    'lastName':this.lastName,
    'address':this.address,
    'city':this.city,
    'zipCode':this.zipCode,
    'email':this.email,
    'phone':this.phone,
    'country':this.country,
    'cardType':this.cardType,
    'expirationMonth':this.expirationMonth,
    'expirationYear':this.expirationYear,
    'cvv':this.cvv,
    'cardNumber':this.cardNumber,
    'amount': this.items.totalAmount,
    'order': this.items,
}).catch(function (error) {
console.log(error.toJSON(response));
});
...}


en deze route file:
code:
1
Route::post('/process/user/payment',[CartsController::class, 'processPayment']);


en deze de CartsController code:
code:
1
2
3
4
5
    public function processPayment(Request $request)
{
    dd($request->all()); 
....
}


Ik vind het heel raar dat het niet doet.

Acties:
  • 0 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online

Acties:
  • +1 Henk 'm!

  • moijamie
  • Registratie: Augustus 2013
  • Laatst online: 11-09 14:08
Ralfefernandes1 schreef op donderdag 21 april 2022 @ 14:49:
[...]


Ik heb even in de /logs/laravel.log gekeken. helaas wordt niet aangegeven.

dit is de vue code :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
methods: {
async getCartItems() {
  let response = await axios.get("/checkout/get/items");
  this.items = response.data;
  console.log(this.items);
},
async getUserAddress(){
  if(this.firstName != '' && this.address != '' && this.cardNumber && this.cvv)
  {
   // Process payment.
    let response = await axios.post("/process/user/payment", {
    'firstName':this.firstName,
    'lastName':this.lastName,
    'address':this.address,
    'city':this.city,
    'zipCode':this.zipCode,
    'email':this.email,
    'phone':this.phone,
    'country':this.country,
    'cardType':this.cardType,
    'expirationMonth':this.expirationMonth,
    'expirationYear':this.expirationYear,
    'cvv':this.cvv,
    'cardNumber':this.cardNumber,
    'amount': this.items.totalAmount,
    'order': this.items,
}).catch(function (error) {
console.log(error.toJSON(response));
});
...}


en deze route file:
code:
1
Route::post('/process/user/payment',[CartsController::class, 'processPayment']);


en deze de CartsController code:
code:
1
2
3
4
5
    public function processPayment(Request $request)
{
    dd($request->all()); 
....
}


Ik vind het heel raar dat het niet doet.
Als je die dd in je controller hebt is het normaal dat je een 500 terug krijgt, dat is de standard response code als je dd gebruikt.

Probeer eens return 'test'.

Hier kan je in de source zien dat de 500 header toegevoegd wordt https://github.com/symfon...es/functions/dump.php#L41

[ Voor 5% gewijzigd door moijamie op 21-04-2022 15:06 ]

const { signature } = await fetchProfile()


Acties:
  • +1 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
DD is dump'n'die, niet de meest handige manier om XHR requests te ontwikkelen.


Misschien toch eens naar xdebug in combinatie met je IDE kijken, of anders het log systeem van Laravel gebruiken om wat checkpoints in je code te zetten.

Of als het wat mag kosten, Ray kopen.

[ Voor 5% gewijzigd door kwaakvaak_v2 op 21-04-2022 19:58 ]

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Ik heb gevonden van waar het probleem vandaan komt:

Php version: 8

Dit is de foutmelding die ik nu krijg:

code:
1
    "message": "Trying to access array offset on value of type int",


php code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public function processPayment(Request $request)
    {      
     
         $amount = $request->get('amount');
         $orders = $request->get('order');
         $ordersArray = [];

         // getting orders details
         foreach($orders as $order)
         {
             if($order['id'])
             {
                 $ordersArray[$order['id']]['order_id'] = $order['id'];
                 $ordersArray[$order['id']]['quantity'] = $order['quantity'];
 
             }
             ddd($ordersArray);
         }

[ Voor 28% gewijzigd door Ralfefernandes1 op 22-04-2022 10:07 ]


Acties:
  • 0 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
Je laat ons debuggen zonder enige referentie.

We weten niet op welke regel het fout gaat?
We weten niet wat in $request->get('order') zit, misschien wel een array van getallen?

Weet niet hoe het zit in PHP maar kan je zomaar properties instellen op iets wat zelf nog niet eens bestaat? Moet je niet eerst weer een 'object' aanmaken $ordersArray[$order['id']] = []; ?

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
luukvr schreef op vrijdag 22 april 2022 @ 10:17:
Weet niet hoe het zit in PHP maar kan je zomaar properties instellen op iets wat zelf nog niet eens bestaat? Moet je niet eerst weer een 'object' aanmaken $ordersArray[$order['id']] = []; ?
Dat kan in PHP ja :X

PHP:
1
2
3
$foo[7]['bar'] = 1;

var_dump($foo);

array (size=1)
  7 => 
    array (size=1)
      'bar' => int 1


Maar deze regel makes no sense whatsoever..
PHP:
1
$ordersArray[$order['id']]['order_id'] = $order['id'];

Waarom zou je dat doen?

Verder wil ik @Ralfefernandes1 vriendelijk verzoeken wat meer eigen inzet te tonen (Debuggen: Hoe doe ik dat?) en ons inderdaad van alle relevante informatie te voorzien bij (vervolg) vragen.
Ralfefernandes1 schreef op woensdag 20 april 2022 @ 16:14:
Dat klopt en je hebt gelijk... maar aan de andere kant, dit is de reden waarvoor e zo een fantastisch forum hebben... om elkaar te ondersteunen.
Ja, koekoek, het moet wel van 2 kanten komen. Jij zult ons moeten helpen jou te helpen ;)

[ Voor 32% gewijzigd door RobIII op 22-04-2022 16:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DJMaze schreef op donderdag 21 april 2022 @ 14:32:
Niet om het één of ander, maar hoe heb je bedacht om poort 8000 te gebruiken?
Dat is niet standaard 80 of 8080.
8000 wordt meestal gebruikt voor:
  • Internet radio streams
  • Django Development Webserver
  • Python 3 http.server
Niet om het één of ander; poorten boven de 1024 zijn vrij voor iedereen. Zolang er niks op poort X draait kun je draaien wat je wil. (Onder de 1024 overigens net zo, alleen heb je dan admin/root rechten nodig). 80 (en 8080) zijn 'conventie' maar ook niet meer dan dat. Als jij je eigen service op 80 of 8080 of 8000 of 25 of 666 wil draaien kan dat prima.

[ Voor 12% gewijzigd door RobIII op 22-04-2022 16:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@RobIII natuurlijk kan je gewoon elke poort gebruiken die je wilt.
Maar als je geen standaard/conventionele setup hebt, dan vraag ik mij af welke HTTP daemon er wordt gebruikt om die 500 error te loggen, voordat iedereen apache, nginx, lighttpd, etc. roept.

En daar gaf TS zo goed antwoord op, dat iedereen nu weet in welke log er gekeken moet worden ;)

En ja, op poort 80 had net zo goed ssh kunnen draaien :p

[ Voor 8% gewijzigd door DJMaze op 22-04-2022 17:28 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
DJMaze schreef op vrijdag 22 april 2022 @ 17:26:
Maar als je geen standaard/conventionele setup hebt, dan vraag ik mij af welke HTTP daemon er wordt gebruikt om die 500 error te loggen, voordat iedereen apache, nginx, lighttpd, etc. roept.
Elk van die daemons had op 8000 kunnen draaien en een 500 internal server error kunnen produceren. Ja, het is handig als TS vermeldt welke webserver (maar dat in inmiddels gebeurd) dus ik zie heel 't nut van die reply niet TBH. Ja, je zult moeten weten welke daemon omdat je dan weet waar je de logging kunt vinden (of de configuratie daarvan) maar het staat totaal los van poorten of HTTP status 500 responses.

[ Voor 14% gewijzigd door RobIII op 22-04-2022 18:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Dit is de debug code:

code:
1
dd($order, $ordersArray);


Hier is de result:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
^ array:5 [
  "id" => 1
  "name" => "Ut soluta alias porro."
  "quantity" => 2
  "sale_price" => 399
  "total" => 798
]
^ array:1 [
  1 => array:2 [
    "order_id" => 1
    "quantity" => 2
  ]
]


output error:
code:
1
message: "Trying to access array offset on value of type int", exception: "ErrorException"

[ Voor 15% gewijzigd door Ralfefernandes1 op 22-04-2022 23:57 ]


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Ralfefernandes1 schreef op vrijdag 22 april 2022 @ 23:54:
Output error:
code:
1
message: "Trying to access array offset on value of type int", exception: "ErrorException"
En de trace log hiervan zou jou in de richting van de oplossing duwen ;)

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Ik heb inmiddels opgelost

volgens mij in php8

moet je juist op deze manier gebruiken:

code:
1
2
3
4
5
6
7
8
9
10
11
foreach($orders as $order)
         {
             if(isset($order['id']))
             {
                 $ordersArray[$order['id']]['order_id'] = $order['id'];
                 $ordersArray[$order['id']]['quantity'] = $order['quantity'];
 
             }
            // dd($order, $ordersArray);

         }

In plaats van:
code:
1
2
3
4
5
6
7
8
9
10
11
          foreach($orders as $order)
         {
             if($order['id'])
             {
                 $ordersArray[$order['id']]['order_id'] = $order['id'];
                 $ordersArray[$order['id']]['quantity'] = $order['quantity'];
 
             }
            // dd($order, $ordersArray);

         }

Acties:
  • 0 Henk 'm!

  • MarcoC
  • Registratie: September 2003
  • Laatst online: 11:42
Bij een asynchroon request kunnen er twee dingen fout gaat:
  • Het request wordt client-side verkeerd opgesteld omdat de client iets verkeerd doet (jouw Vue-applicatie dus).
  • Het request wordt server-side verkeerd uitgelezen waardoor het request niet verwerkt kan worden. De fout zit in PHP-code.
Het eerste wat je moet doen om te achterhalen waar de fout zit (client-side of server-side) is kijken of het request voldoet aan jouw verwachtingen. Dat kan in het Network-tab van Chrome: F12 > Network. Dat is het startpunt om te debuggen m.i., en die informatie heb je nooit gedeeld. Dus voor de volgende keer: inspecteer het netwerkverkeer en kijk of het request verstuurd wordt zoals je verwacht.
DJMaze schreef op donderdag 21 april 2022 @ 14:32:
Niet om het één of ander, maar hoe heb je bedacht om poort 8000 te gebruiken?
Dat is niet standaard 80 of 8080.
8000 wordt meestal gebruikt voor:
  • Internet radio streams
  • Django Development Webserver
  • Python 3 http.server
Verder: kijk in je nginx/apache error log...
Maakt echt niks uit toch? Dit is development op een lokale server. FastAPI gebruikt ook standaard poort 8000 volgens mij.

[ Voor 28% gewijzigd door MarcoC op 23-04-2022 18:38 ]


Acties:
  • +3 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Jezus, ik heb écht lang zitten staren naar 't verschil en heb uiteindelijk een texteditor moeten openen en de stukken code moeten diff'en om het verschil te zien. Nu ben ik misschien niet meer helder, maar dat is nu precies waar het hier in de topic aan schort; je voorziet ons niet, of amper, van de juiste informatie en laat óns het werk doen. Jij moet óns helpen jou te helpen.

Waarom zei je niet gewoon:
volgens mij in php8 moet je juist op deze manier gebruiken:

PHP:
1
if(isset($order['id']))

In plaats van:
PHP:
1
if($order['id'])
Of:
volgens mij in php8 moet je juist op deze manier gebruiken:

PHP:
1
2
3
if(isset($order['id']))
//In plaats van: 
if($order['id'])
Of:
volgens mij in php8 moet je juist if(isset($order['id'])) gebruiken in plaats van if($order['id'])
Maar, ja, je kon wel eens gelijk hebben; je kunt dat echter zelf doodsimpel dubbelchecken door in een debugger (of voor mijn part met een var_dump($order['id'] == true)) te kijken wat er gebeurt in de oude (PHP7?) situatie en in de nieuwe (PHP8?) situatie.

Echter: De foutmelding "Trying to access array offset on value of type int" klopt volgens mij niet met wat je hier beschrijft. Is het niet zo dat je de foutmelding niet (meer) krijgt omdat je de regel die de dd(...) method invoked (regel(s) 9) in je laatste post) gewoon hebt uitgecomment? 8)7

[ Voor 10% gewijzigd door RobIII op 23-04-2022 21:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +2 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Je bedoelt: het probleem onoplosbaar gemaakt.
Want waarom is $order een int en geen array?
Hoe komt dat?

Eerlijk gezegd hoop ik dat jouw webshop een schoolopdracht is en niet voor de werkelijkheid.

[ Voor 18% gewijzigd door DJMaze op 24-04-2022 21:43 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
DJMaze schreef op zondag 24 april 2022 @ 21:39:
[...]

Je bedoelt: het probleem onoplosbaar gemaakt.
Want waarom is $order een int en geen array?
Hoe komt dat?

Eerlijk gezegd hoop ik dat jouw webshop een schoolopdracht is en niet voor de werkelijkheid.
Om je vraag te beantwoorden…
ik merkte dat in php7.3 is eigenlijk niet nodig om if(isset($order['id'])){…} te gebruiken.
Doe ik dat niet in php8 dan krijg ik dit te zien in google Network Tab als foutmelding:
code:
1
Trying to access array offset on value of type int


Ik heb even uitgezocht het verschil tussen if(isset()){} en zonder “isset” in Google Network tab. Ik zie geen verschil. allebei krijg ik dit te zien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
^ array:5 [
  "id" => 1
  "name" => "Quis dolores et esse."
  "quantity" => 1
  "sale_price" => 461
  "total" => 461
]
^ array:1 [
  1 => array:2 [
    "order_id" => 1
    "quantity" => 1
  ]
]


Met if(isset()) krijg ik het gewenste resultaat. Zoals te zien is in de google console:
code:
1
success "Order Completed successfully"

Acties:
  • +2 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Ralfefernandes1 Probeer dit eens:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
foreach ($orders as $order)
{
    if (!is_array($order)) {
        throw new \Exception('$order is not an array, but ' . gettype($order));
    }
    if (!array_key_exists('id', $order)) {
        throw new \Exception('$order[\'id\'] is missing');
    }
    if (!is_int($order['id'])) {
        throw new \Exception('$order[\'id\'] is not an integer, but ' . gettype($order['id']));
    }
    if (!array_key_exists('quantity', $order)) {
        throw new \Exception('$order[\'quantity\'] is missing');
    }
    if (!is_int($order['quantity'])) {
        throw new \Exception('$order[\'quantity\'] is not an integer, but ' . gettype($order['quantity']));
    }
    $ordersArray[$order['id']] = [
        'order_id' => $order['id'],
        'quantity' => $order['quantity']
    ];
}


Want zeg nou zelf, je wil toch controleren of dingen goed zijn?
(en dan heb ik nog geeneens gecontroleerd op N>0, anders bestel ik gewoon -1 producten bij je)

[ Voor 8% gewijzigd door DJMaze op 25-04-2022 12:04 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
@DJMaze

je hebt gelijk. Ik ga verder uitzoeken.

Hier is de resultaat:
code:
1
message "$order is not an array, but integer"

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Ralfefernandes1 nu mag je zelf uitpluizen wat $orders is en of dat klopt.
Ik denk namelijk dat die incorrect is.
PHP:
1
dd($orders);

Kan je mee beginnen (is niet de oplossing).

[ Voor 23% gewijzigd door DJMaze op 25-04-2022 13:27 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
@DJMaze
Dit is wat ik krijg te zien in de google network tab:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
^ array:4 [
  1 => array:5 [
    "id" => 1
    "name" => "Quis dolores et esse."
    "quantity" => 2
    "sale_price" => 461
    "total" => 922
  ]
  2 => array:5 [
    "id" => 2
    "name" => "Quidem qui et veniam."
    "quantity" => 1
    "sale_price" => 269
    "total" => 269
  ]
  3 => array:5 [
    "id" => 3
    "name" => "Sit amet culpa id."
    "quantity" => 1
    "sale_price" => 196
    "total" => 196
  ]
  "totalAmount" => 1387
]


De vraag is, waarom in php7.3 werkt perfectie zonder isset() en in php8 niet?

Acties:
  • +1 Henk 'm!

  • luukvr
  • Registratie: Juni 2011
  • Niet online
bij het laatste element gaat je loop fout, dat is namelijk geen array....

"totalAmount" => 1387

je maakt een array met verschillende soorten objecten er in, niet heel handig maar je zou het laatste element kunnen skippen / verwijderen.

Acties:
  • 0 Henk 'm!

  • Ralfefernandes1
  • Registratie: Juli 2018
  • Laatst online: 15-08 18:46
Heel erg bedankt @luukvr

Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Ralfefernandes1 schreef op maandag 25 april 2022 @ 15:23:
De vraag is, waarom in php7.3 werkt perfectie zonder isset() en in php8 niet?
Omdat in php7.3 de bug onopgemerkt bleef.

Maak je niet druk, dat doet de compressor maar

Pagina: 1