I get an error when I host my discord.py bot on replit - discord.py

When I host locally it works but when I host on replit it gives me this error. Initially I thought it was due to the server part I created via this video but the error comes directly from the main bot. What could be the problem?
Hosting a free bot has become quite a challenge lately. Why should I spend money on vps if my project is small?
error
Traceback (most recent call last):
File "main.py", line 401, in <module>
client.run(TOKENS)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 828, in run
asyncio.run(runner())
File "/nix/store/hd4cc9rh83j291r5539hkf6qd8lgiikb-python3-3.10.8/lib/python3.10/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/nix/store/hd4cc9rh83j291r5539hkf6qd8lgiikb-python3-3.10.8/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 817, in runner
await self.start(token, reconnect=reconnect)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 745, in start
await self.login(token)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/client.py", line 580, in login
data = await self.http.static_login(token)
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/http.py", line 801, in static_login
data = await self.request(Route('GET', '/users/#me'))
File "/home/runner/PeppeBOT/venv/lib/python3.10/site-packages/discord/http.py", line 680, in request
raise HTTPException(response, data)
discord.errors.HTTPException: 429 Too Many Requests (error code: 0): <!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Access denied | discord.com used Cloudflare to restrict access</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/main.css" />
<script>
(function(){if(document.addEventListener&&window.XMLHttpRequest&&JSON&&JSON.stringify){var e=function(a){var c=document.getElementById("error-feedback-survey"),d=document.getElementById("error-feedback-success"),b=new XMLHttpRequest;a={event:"feedback clicked",properties:{errorCode:1015,helpful:a,version:1}};b.open("POST","https://sparrow.cloudflare.com/api/v1/event");b.setRequestHeader("Content-Type","application/json");b.setRequestHeader("Sparrow-Source-Key","c771f0e4b54944bebf4261d44bd79a1e");
b.send(JSON.stringify(a));c.classList.add("feedback-hidden");d.classList.remove("feedback-hidden")};document.addEventListener("DOMContentLoaded",function(){var a=document.getElementById("error-feedback"),c=document.getElementById("feedback-button-yes"),d=document.getElementById("feedback-button-no");"classList"in a&&(a.classList.remove("feedback-hidden"),c.addEventListener("click",function(){e(!0)}),d.addEventListener("click",function(){e(!1)}))})}})();
</script>
<script defer src="https://performance.radar.cloudflare.com/beacon.js"></script>
</head>
<body>
<div id="cf-wrapper">
<div class="cf-alert cf-alert-error cf-cookie-error hidden" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
<div id="cf-error-details" class="p-0">
<header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-15 antialiased">
<h1 class="inline-block md:block mr-2 md:mb-2 font-light text-60 md:text-3xl text-black-dark leading-tight">
<span data-translate="error">Error</span>
<span>1015</span>
</h1>
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">Ray ID: 795444d5a895b0c3 •</span>
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">2023-02-06 13:35:25 UTC</span>
<h2 class="text-gray-600 leading-1.3 text-3xl lg:text-2xl font-light">You are being rate limited</h2>
</header>
<section class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
<div id="what-happened-section" class="w-1/2 md:w-full">
<h2 class="text-3xl leading-tight font-normal mb-4 text-black-dark antialiased" data-translate="what_happened">What happened?</h2>
<p>The owner of this website (discord.com) has banned you temporarily from accessing this website.</p>
</div>
</section>
<div class="feedback-hidden py-8 text-center" id="error-feedback">
<div id="error-feedback-survey" class="footer-line-wrapper">
Was this page helpful?
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded" id="feedback-button-yes" type="button">Yes</button>
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded" id="feedback-button-no" type="button">No</button>
</div>
<div class="feedback-success feedback-hidden" id="error-feedback-success">
Thank you for your feedback!
</div>
</div>
<div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">795444d5a895b0c3</strong></span>
<span class="cf-footer-separator sm:hidden">•</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
<span class="hidden" id="cf-footer-ip">34.74.131.130</span>
<span class="cf-footer-separator sm:hidden">•</span>
</span>
<span class="cf-footer-item sm:block sm:mb-1"><span>Performance & security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>
</p>
<script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classList.remove("hidden"),c.addEventListener("click",function(){c.classList.add("hidden");a.getElementById("cf-footer-ip").classList.remove("hidden")}))}var a=document;document.addEventListener&&a.addEventListener("DOMContentLoaded",d)})();</script>
</div><!-- /.error-footer -->
</div><!-- /#cf-error-details -->
</div><!-- /#cf-wrapper -->
<script>
window._cf_translation = {};
</script>
<script>(function(){var js = "window['__CF$cv$params']={r:'795444d5a895b0c3',m:'Dd87hwfU_SGSbuhSCmEIgD4OJgNU9bZXc65YvwTsSWk-1675690525-0-Af7JL6WCgpne12E1VutyYAlLnWrvoh/+MVaM+Dch+KEt5KTJYCZEFTRYzIAIqarUap1plo8VlvVhzUe1OB/Hw0FA7SealXU/Uq/+mAJjPxLFRi9lCCCmdMNpckywRQaZz7LVgUU9VefBQqqQ2Il04v0=',s:[0x33c1ad0932,0xfae449c46d],u:'/cdn-cgi/challenge-platform/h/b'};var _cpo=document.createElement('script');_cpo.nonce='',_cpo.src='/cdn-cgi/challenge-platform/h/b/scripts/cb/invisible.js?cb=795444d5a895b0c3',document.getElementsByTagName('head')[0].appendChild(_cpo);";var _0xh = document.createElement('iframe');_0xh.height = 1;_0xh.width = 1;_0xh.style.position = 'absolute';_0xh.style.top = 0;_0xh.style.left = 0;_0xh.style.border = 'none';_0xh.style.visibility = 'hidden';document.body.appendChild(_0xh);function handler() {var _0xi = _0xh.contentDocument || _0xh.contentWindow.document;if (_0xi) {var _0xj = _0xi.createElement('script');_0xj.nonce = '';_0xj.innerHTML = js;_0xi.getElementsByTagName('head')[0].appendChild(_0xj);}}if (document.readyState !== 'loading') {handler();} else if (window.addEventListener) {document.addEventListener('DOMContentLoaded', handler);} else {var prev = document.onreadystatechange || function () {};document.onreadystatechange = function (e) {prev(e);if (document.readyState !== 'loading') {document.onreadystatechange = prev;handler();}};}})();</script></body>
</html>
discord bot code
import discord
from discord import client
from discord import app_commands
from webserver import keep_alive
import datetime
import asyncio
import os
print("PeppeBOT si sta avviando...")
class VerifySelectMenuTipologia(discord.ui.Select):
def __init__(self):
options=[
discord.SelectOption(label="Giocatore", description="Se vuoi partecipare ai nostri tornei!"),
discord.SelectOption(label="Spettatore", description="Se vuoi solo assistere ai nostri tornei!")
]
super().__init__(placeholder="Seleziona la tua tipologia:",max_values=1,min_values=1,options=options)
async def callback(self, interaction: discord.Interaction):
if self.values[0] == "Giocatore":
self.spettatore = 918003194519511060
spettatore = interaction.guild.get_role(self.spettatore)
await interaction.user.add_roles(spettatore)
self.svincolato = 917269610556968970
svincolato = interaction.guild.get_role(self.svincolato)
await interaction.user.add_roles(svincolato)
elif self.values[0] == "Spettatore":
self.spettatore = 918003193982644224
spettatore = interaction.guild.get_role(self.spettatore)
await interaction.user.add_roles(spettatore)
self.membro = 918025325538078750
membro = interaction.guild.get_role(self.membro)
await interaction.user.add_roles(membro)
self.attività = 917117040035237939
attività = interaction.guild.get_role(self.attività)
await interaction.user.add_roles(attività)
self.boh = 1058541599455465483
boh = interaction.guild.get_role(self.boh)
await interaction.user.remove_roles(boh)
await interaction.delete_original_response()
class VerifySelectMenuTipologiaView(discord.ui.View):
def __init__(self, *, timeout = 180):
super().__init__(timeout=timeout)
self.add_item(VerifySelectMenuTipologia())
class VerifySelectMenuFasciaEta(discord.ui.Select):
def __init__(self):
options=[
discord.SelectOption(label="18+", description="Se sei maggiorenne!"),
discord.SelectOption(label="14-17", description="Se sei tra i 14 e i 17 anni!"),
discord.SelectOption(label="13-",description="Se hai meno di 14 anni!")
]
super().__init__(placeholder="Seleziona la tua fascia d'età",max_values=1,min_values=1,options=options)
async def callback(self, interaction: discord.Interaction):
if self.values[0] == "18+":
self.maggiorenne = 1071955516252758167
maggiorenne = interaction.guild.get_role(self.maggiorenne)
await interaction.user.add_roles(maggiorenne)
await interaction.response.edit_message(content="Manca solo l'ultima selezione! Sei un giocatore o uno spettatore?", view=VerifySelectMenuTipologiaView())
elif self.values[0] == "14-17":
self.mezzo = 1071955345532014652
mezzo = interaction.guild.get_role(self.mezzo)
await interaction.user.add_roles(mezzo)
await interaction.response.edit_message(content="Manca solo l'ultima selezione! Sei un giocatore o uno spettatore?", view=VerifySelectMenuTipologiaView())
elif self.values[0] == "13-":
self.minorenne = 1071955284534247534
minorenne = interaction.guild.get_role(self.minorenne)
await interaction.user.add_roles(minorenne)
await interaction.response.edit_message(content="Manca solo l'ultima selezione! Sei un giocatore o uno spettatore?", view=VerifySelectMenuTipologiaView())
class VerifySelectMenuFasciaEtaView(discord.ui.View):
def __init__(self, *, timeout = 180):
super().__init__(timeout=timeout)
self.add_item(VerifySelectMenuFasciaEta())
class VerifyModal(discord.ui.Modal, title='Verifica'):
nickname = discord.ui.TextInput(
label="Nickname di haxball:",
placeholder="Scrivi qui il tuo nickname di haxball (ricorda non potrai più cambiarlo)",
min_length=1,
max_length=10,
)
async def on_submit(self, interaction: discord.Interaction):
await interaction.user.edit(nick= f'{self.nickname}')
await interaction.response.send_message(content="Ottimo! Ora seleziona la tua fascia d'età", view=VerifySelectMenuFasciaEtaView(), ephemeral=True)
class VerifyButton(discord.ui.View):
def __init__(self) -> None:
super().__init__(timeout=None)
#discord.ui.button(label="Verificati", style=discord.ButtonStyle.green, custom_id="verify_button")
async def verify(self, interaction: discord.Interaction, button: discord.ui.Button):
if type(client.role) is not discord.Role: client.role = interaction.guild.get_role(918025325538078750)
if client.role not in interaction.user.roles:
modal = VerifyModal()
await interaction.response.send_modal(modal)
else:
await interaction.response.send_message("Sei già verificato!", ephemeral=True, delete_after=10)
class PersistentViewBot(discord.Client):
def __init__(self):
super().__init__(intents = discord.Intents.all())
self.synced = False
self.added = False
self.role = 918025325538078750
async def on_ready(self):
await self.wait_until_ready()
if not self.synced:
await tree.sync(guild = discord.Object(id=917112143420215338))
self.synced = True
if not self.added:
self.add_view(VerifyButton())
self.added = True
print(self.user, " si è avviato!")
print("ID :", self.user.id)
global logs_moderazione
global logs_generali
logs_moderazione = self.get_channel(917274076962258975)
logs_generali = self.get_channel(917274597466972230)
embed = discord.Embed(
color=0x03c03c
)
embed.set_author(
name=f'Avvio/Riavvio del Bot!',
)
await tree.sync(guild=discord.Object(id=1006702784797749288))
await logs_moderazione.send(embed=embed)
await tree.sync(guild=discord.Object(id=guild_id))
client = PersistentViewBot()
tree = app_commands.CommandTree(client)
guild_id = 917112143420215338
#client.event
async def on_member_join(member):
guild = member.guild
firstrole = guild.get_role(1058541599455465483)
await member.add_roles(firstrole)
tab1 = guild.get_role(918002005040046100)
await member.add_roles(tab1)
tab2 = guild.get_role(918003746850623529)
await member.add_roles(tab2)
tab3 = guild.get_role(918003750944272425)
await member.add_roles(tab3)
tab4 = guild.get_role(917119249145798716)
await member.add_roles(tab4)
mention = member.mention
guild_id = member.guild
member_count = guild_id.member_count
embed = discord.Embed(
description=str(f"{mention} è entrato su **{guild}!**\nIn tutto ora ci sono **{member_count}** membri."),
color=0x222222
)
await logs_generali.send(embed=embed)
#client.event
async def on_member_remove(member):
name = member.mention
guild = member.guild
member_count = guild.member_count
embed = discord.Embed(
description=str(str(f"**{name}** è uscito da **{guild}!**\nIn tutto ora ci sono **{member_count}** membri.")),
color=0x222222
)
await logs_generali.send(embed=embed)
#Comandi di Moderazione
#Clear [COMPLETO]
clear_cooldown = app_commands.Cooldown(1,600)
def clear_cooldown_checker(interaction: discord.Interaction):
return clear_cooldown
#app_commands.checks.dynamic_cooldown(clear_cooldown_checker, key=lambda i: (i.user.id))
#tree.command(name = "clear", description = "Cancella gli ultimi messaggi inviati ", guild=discord.Object(id=guild_id))
async def clear(ctx, limit: int):
await ctx.response.defer(ephemeral=False, thinking=False)
embed = discord.Embed(
color=0xa61022
)
if limit == 0:
embed.set_author(
name="Non puoi cancellare 0 messaggi!",
)
await ctx.response.send_message(embed=embed, delete_after=10.0)
app_commands.Cooldown.reset(clear_cooldown)
embed = discord.Embed(
color=0x03c03c
)
if limit == 1:
embed.set_author(
name=f'Ho cancellato ufficialmente un messaggio!',
icon_url=f'{ctx.user.avatar}'
)
else:
embed.set_author(
name=f'Ho cancellato ufficialmente {limit} messaggi!',
icon_url=f'{ctx.user.avatar}'
)
await ctx.channel.purge(limit=limit, before=ctx.created_at)
await ctx.followup.send(embed=embed)
embed = discord.Embed(
color=0xFFD000
)
if limit == 1:
embed.set_author(
name=f'{ctx.user.name} ha cancellato un messaggio',
icon_url=f'{ctx.user.avatar}'
)
else:
embed.set_author(
name=f'{ctx.user.name} ha cancellato {limit} messaggi',
icon_url=f'{ctx.user.avatar}'
)
embed.add_field(
name='Messaggi cancellati da:',
value=f'{ctx.user.name}',
inline=True
)
embed.add_field(
name='Quantità:',
value=f'{limit}',
inline=True
)
embed.add_field(
name='Canale dove è stato eseguito il comando:',
value=f'{ctx.channel.mention}',
inline=True
)
await logs_moderazione.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
#clear.error
async def clear_error(ctx, error):
await ctx.response.defer(ephemeral=False, thinking=False)
if isinstance(error, app_commands.CommandOnCooldown):
cooldown = error.cooldown
cd = round(cooldown.get_retry_after())
time = str(datetime.timedelta(seconds=cd))
embed = discord.Embed(
description=f"**Riprova tra `{time}`**",
color=0xa61022
)
embed.set_author(
name="Sei in cooldown!",
icon_url=ctx.user.avatar
)
await ctx.followup.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
#acclear [COMPLETO]
#tree.command(name = "acclear", description = "Cancella con accuratezza gli ultimi messaggi inviati ", guild=discord.Object(id=guild_id))
async def acclear(ctx, message_id: str):
await ctx.response.defer(ephemeral=False, thinking=False)
embed = discord.Embed(
color=0xa61022
)
def message_limit(m):
messageID = message.id
return m.id != messageID
channel = ctx.channel
try:
message = await channel.fetch_message(message_id)
except:
embed.set_author(
name="Non ho trovato il messaggio!",
icon_url=ctx.user.avatar
)
await ctx.response.send_message(embed=embed, delete_after=10.0)
await asyncio.sleep(10)
return 0
embed = discord.Embed(
color=0x03c03c
)
embed.set_author(
name=f'Ho cancellato fino al messaggio:\n{message.content}',
icon_url=f'{ctx.user.avatar}'
)
await ctx.channel.purge(limit=10000, before=ctx.created_at, check=message_limit, after=message)
if message.content == "":
await ctx.followup.send(embed=embed)
embed = discord.Embed(
color=0xFFD000
)
embed.set_author(
name=f'{ctx.user.name} ha cancellato fino al messaggio:\nNon ha testo',
icon_url=f'{ctx.user.avatar}'
)
embed.add_field(
name='Messaggi cancellati da:',
value=f'{ctx.user.name}',
inline=True
)
embed.add_field(
name='Fino al messaggio:',
value=f'Non ha testo',
inline=True
)
embed.add_field(
name='Canale dove è stato eseguito il comando:',
value=f'{ctx.channel.mention}',
inline=True
)
await logs_moderazione.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
else:
await ctx.followup.send(embed=embed)
embed = discord.Embed(
color=0xFFD000
)
embed.set_author(
name=f'{ctx.user.name} ha cancellato fino al messaggio:\n{message.content}',
icon_url=f'{ctx.user.avatar}'
)
embed.add_field(
name='Messaggi cancellati da:',
value=f'{ctx.user.name}',
inline=True
)
embed.add_field(
name='Fino al messaggio:',
value=f'{message.content}',
inline=True
)
embed.add_field(
name='Canale dove è stato eseguito il comando:',
value=f'{ctx.channel.mention}',
inline=True
)
await logs_moderazione.send(embed=embed)
await asyncio.sleep(10)
await ctx.delete_original_response()
#tree.command(name = 'verifybutton', description='Crea il bottone per verificarsi', guild=discord.Object(id=guild_id))
async def verifybutton(ctx):
embed = discord.Embed(
description=str("Benvenuto nel server, prima di poter accedere a tutti i canali è importante verificarsi rispondendo a delle domande molto semplici ossia."),
color=0x222222
)
embed.set_author(
name='PeppeBOT',
icon_url=f'{client.user.avatar}'
)
embed.set_footer(text=f'Haxball Biglassic')
embed.add_field(
name='Domande:',
value="1.Qual è il tuo nickname di haxball?\n2.Qual è la tua fascia d'età?\n3.Sei uno spettatore o un giocatore?",
inline=False
)
embed.add_field(
name='Come rispondere alle domande:',
value="Nella prima domanda dovrai decidere quale nick di haxball utilizzare per questo server senza poterlo cambiare in futuro (ovviamente con le sue regole).\nNella seconda domanda dovrai specificare la tua fascia d'età tra:\n**1.** 13-\n**2.** 14-17\n**3.** 18+\nNella terza domanda dovrai semplicemente dirci se sei venuto per giocare ai tornei organizzati da noi (e quindi essere un effettivo giocatore) oppure se sei venuto semplicemente per conversare e guardare le partite del torneo da spettatore.",
inline=False
)
await ctx.channel.send(embed = embed, view = VerifyButton())
await ctx.response.send_message(content="** **", delete_after=0.1)
sesso_cooldown = app_commands.Cooldown(1,10)
def sesso_cooldown_checker(interaction: discord.Interaction):
return sesso_cooldown
#app_commands.checks.dynamic_cooldown(sesso_cooldown_checker, key=lambda i: (i.user.id))
#tree.command(name = "sesso", description = "Cancella gli ultimi messaggi inviati ", guild=discord.Object(id=guild_id))
async def sesso(ctx):
print(sesso_cooldown)
await ctx.response.send_message("andrea")
await ctx.edit_original_response(content="andrea2")
app_commands.Cooldown.reset(sesso_cooldown)
#sesso.error
async def sesso_error(ctx, error):
if isinstance(error, app_commands.CommandOnCooldown):
cooldown = error.cooldown
cd = round(cooldown.get_retry_after())
time = str(datetime.timedelta(seconds=cd))
embed = discord.Embed(
description=f"**Riprova tra `{time}`**",
color=0xa61022
)
embed.set_author(
name=f"Sei in cooldown!",
icon_url=ctx.user.avatar
)
await ctx.response.send_message(embed=embed)
for i in range(10):
await asyncio.sleep(1)
cd = round(cooldown.get_retry_after())
time = str(datetime.timedelta(seconds=cd))
embed = discord.Embed(
description=f"**Riprova tra `{time}`**",
color=0xa61022
)
embed.set_author(
name=f"Sei in cooldown!",
icon_url=ctx.user.avatar
)
await ctx.edit_original_response(embed=embed)
keep_alive()
TOKENS = os.environ['SECRET_DISCORD_TOKENS']
client.run(TOKENS)
webserver
from flask import Flask
from threading import Thread
app = Flask('')
#app.route("/")
def home():
return "sono vivo"
def run():
app.run(host= '0.0.0.0', port= 8080)
def keep_alive():
t = Thread(target=run)
t.start()

This error occurs when your bot has sent too many requests in a short amount of time. To resolve this, type kill 1 in the shell (located in the bottom window of the Replit IDE) and hit enter. This will halt your bot's processes and reset its connection. Remember to rerun the bot to reconnect.

Related

Authentication (Register) in next.js. How to send data to the server?

I am trying to make a user registration function, I have already defined all the states, the endpoint is right but still the front end data does not arrive to the server, I don't know what is going on. In React.js everything was working, I just migrated to Next.js and this function doesn't work anymore.
I am doing it this way :
My code in Next.js :
import React, { useState, useContext } from 'react';
import Image from 'next/image';
import { useRouter } from 'next/router';
// calling the rest api
import axios from '../api/axios';
//icons
import { HiOutlineArrowNarrowLeft } from 'react-icons/hi';
import { AiOutlineArrowLeft, AiOutlineArrowRight } from 'react-icons/ai';
// imgs
import logo from '../assets/logostreaming.png';
import ManLogin from '../assets/man_login.png';
import WomanLogin from '../assets/woman_login.png';
import UserCircle from '../assets/UserCircle.png';
//styles
import styles from '../styles/signup.module.css';
const Signup = () => {
const navigate = useRouter();
// states
const [nif, setNif] = useState('');
const [codPin, setCodPin] = useState('');
const [photoProfile, setPhotoProfile] = useState('');
const [sex, setSex] = useState('');
const [nameUser, setName] = useState('');
const [email, setEmail] = useState('');
const [phone, setPhone] = useState('');
const [whatsApp, setWhatsApp] = useState('');
const [password, setPassword] = useState('');
const [dateBirth, setDateBirth] = useState('');
const [codPartners, setCodePartners] = useState(0);
const [confirmationPassword, setConfirmationPassword] = useState('');
const [checked, setChecked] = useState(false);
const [querySelector, setQuerySelector] = useState('close');
const [firstStep, setFirstStep] = useState(true);
const [secondStep, setSecondStep] = useState(false);
const [TreeStep, setTreeStep] = useState(false);
const [error, setError] = useState(false);
const handleFileChange = (e) => {
setPhotoProfile(e.target.files[0]);
}
const handleRegister = (e) => {
e.preventDefault();
const config = {
headers: { 'content-type': 'multipart/form-data' }
}
if (photoProfile == '') {
setError(true);
}
axios.post('/register/',
{
email: email, password: password, phone: phone,
nif: nif, whatsApp: whatsApp, date_birth: dateBirth,
partners_code: codPartners, sex: sex, name: nameUser,
cod_pin: codPin, photo_profile: photoProfile, permission: 1,
c_password: confirmationPassword, obs: 'null'
}, config
)
.then((res) => {
console.log('data res signup register : ', res.data.data);
const id = res.data.data.user.id;
localStorage.setItem('userId', id);
const token = res.data.data.token;
const permission = res.data.data.user.permission;
localStorage.setItem('token', token);
localStorage.setItem('permission', permission);
axios.defaults.headers.Authorization = `Bearer ${token}`;
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
navigate.push('/client/home');
})
.catch((err) => console.log('erro na promise signup register : ', err))
.finally();
}
const QSelector = () => {
setQuerySelector('open')
}
const QSelectorClose = () => {
setQuerySelector('close');
console.log('query selector close : ', querySelector);
}
const nextStep1 = () => {
//e.preventDefault();
if (nameUser == '' || sex == '' || whatsApp == '' || phone == '' || dateBirth == '') {
setError(true);
} else {
setFirstStep(false);
setSecondStep(true);
setTreeStep(false);
}
}
const backToStep1 = () => {
//e.preventDefault();
setFirstStep(true);
setSecondStep(false);
setTreeStep(false)
}
const nextStep2 = () => {
//e.preventDefault();
if (nif == '' || codPin == '' || password == '' || confirmationPassword == '' || email == '') {
setError(true);
} else {
setFirstStep(false);
setSecondStep(false);
setTreeStep(true);
}
}
return (
<div className={styles.container_register}>
<header className={styles.header_register}>
<Image className={styles.Image_logo_register} src={logo} alt="logo pn clique streaming" />
<nav>
<label><HiOutlineArrowNarrowLeft /></label>
<label onClick={() => navigate.push('/')}>Voltar para a página inicial</label>
</nav>
</header>
<div className={styles.container_form}>
<form encType='multipart/form-data' onSubmit={handleRegister} className={styles.form_register}>
{
error
?
<div className={styles.error_form}>
<p>Por favor preencha todos os campos para continuar!</p>
</div>
: ''
}
{
firstStep
?
<div className={styles.container_first_form}>
<Image className={styles.Image_man_register} src={ManLogin} alt="clique man register" />
<div className={styles.container_first_form_div}>
<strong className={styles.title_register}>Dados pessoias</strong>
<p className={styles.slogan}>Registre-se para usufruir dos nossos serviços.</p>
<nav>
<input type="text" name='name' className={styles.input_register} placeholder='Digite o seu nome' value={nameUser} onChange={(e) => [setName(e.target.value), setError('')]} />
<div className={styles.select_wrapper_register}>
<div className={querySelector == 'close' ? styles.select_sex : styles.select_sex_open}>
<div className={styles.select__trigger} onClick={() => querySelector == 'close' ? QSelector() : QSelectorClose()}>
<span>{sex == '' ? 'Qual é o seu sexo ?' : sex}</span>
<div className={styles.arrow}></div>
</div>
<div className={styles.custom_options} onClick={() => QSelectorClose()} >
<span onClick={() => setSex('Homem')}>Homem</span>
<span onClick={() => setSex('Mulher')}>Mulher</span>
</div>
</div>
</div>
<input type="text" name='whatsApp' className={styles.input_register} placeholder='Digite o seu whatsApp' value={whatsApp} onChange={(e) => [setWhatsApp(e.target.value), setError('')]} />
<input type="text" name='phone' className={styles.input_register} placeholder='Digite um número alternativo' value={phone} onChange={(e) => [setPhone(e.target.value), setError('')]} />
<input type="text" name='date_birth' className={styles.input_register_date_birth} placeholder='Data de nascimento (dd/mm/aa)' value={dateBirth} onChange={(e) => [setDateBirth(e.target.value), setError('')]} />
</nav>
<button type='button' className={styles.btn_next_step_register} onClick={nextStep1}>Próximo <AiOutlineArrowRight className={styles.AiOutlineArrowRight} /></button>
</div>
<Image className={styles.Image_woman_register} src={WomanLogin} alt="clique man register" />
</div>
:
secondStep
?
<div className={styles.container_first_form}>
<Image className={styles.Image_man_register} src={ManLogin} alt="clique man register" />
<div className={styles.container_first_form_div}>
<strong className={styles.title_register}>Dados de segurança</strong>
<p className={styles.slogan_2}>Torna a tua conta mais segura.</p>
<nav>
<input type="text" name='nif' className={styles.input_register} placeholder='Digite o seu nif' value={nif} onChange={(e) => [setNif(e.target.value), setError('')]} />
<input type="text" name='cod_pin' className={styles.input_register} placeholder='Digite o seu codigo pin' value={codPin} onChange={(e) => [setCodPin(e.target.value), setError('')]} />
<input type="password" name='password' className={styles.input_register} placeholder='Digite a sua senha' value={password} onChange={(e) => [setPassword(e.target.value), setError('')]} />
<input type="password" name='c_password' className={styles.input_register_c_password} placeholder='Confirma a sua senha' value={confirmationPassword} onChange={(e) => [setConfirmationPassword(e.target.value), setError('')]} />
<input type="email" name='email' className={styles.input_register_date_birth} placeholder='Digite o seu email' value={email} onChange={(e) => [setEmail(e.target.value), setError('')]} />
</nav>
<div className={styles.container_buttons_register}>
<button type='button' className={styles.btn_next_step_register_2} onClick={backToStep1}><AiOutlineArrowLeft className={styles.AiOutlineArrowRight_2} /> Voltar</button>
<button type='button' className={styles.btn_next_step_register_2} onClick={nextStep2}>Próximo <AiOutlineArrowRight className={styles.AiOutlineArrowRight_3} /></button>
</div>
</div>
</div>
:
TreeStep
?
<div className={styles.container_first_form}>
<div className={styles.container_first_form_div}>
<strong className={styles.title_register}>Foto de perfil</strong>
<p className={styles.slogan_2}>Seleciona uma foto de perfil.</p>
<div className={styles.container_first_form_div_2}>
<label htmlFor="photo_profile">
<Image className={styles.Image_user_circle_register} src={UserCircle} alt="clique man register" />
</label>
<input type="file" id='photo_profile' name='photo_profile' className={styles.input_register_file} placeholder='Photo' onChange={(e) => [handleFileChange(e), setError('')]} />
<label>Seleciona uma foto de perfil</label>
<label className={styles.partners}>Deseja se tornar um parceiro ? <input type="checkbox" defaultChecked={checked} onChange={() => setChecked(!checked)} name="partners" /></label>
<button className={styles.button_register} type='submit' onMouseOver={() => sex == '' ? setSex('Homem') : setSex(sex)}>Registrar</button>
</div>
</div>
<Image className={styles.Image_woman_register} src={WomanLogin} alt="clique man register" />
</div>
: ''
}
</form>
</div>
</div>
);
}
export default Signup;
My code in Laravel (server) :
class RegisterController extends BaseController
{
/**
* Register api
*
* #return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$input = $request->all();
$n = $validator = Validator::make($input, [
'name' => 'required',
]);
$e = $validator = Validator::make($input, [
'email' => 'required|email',
]);
if ($n->fails()) {
return $this->sendError('Validation name register Error.', $validator->errors());
}
if ($e->fails()) {
return $this->sendError('Validation email register Error.', $validator->errors());
}
$uploadFolder = 'users';
$image = $request->file('photo_profile');
$image_uploaded_path = $image->store($uploadFolder, 'public');
$uploadedImageResponse = Storage::url($image_uploaded_path);
//$input = $request->all();
$input['password'] = bcrypt($input['password']);
$input['photo_profile'] = $uploadedImageResponse;
$user = User::create($input);
$sucess['token'] = $user->createToken('MyApp')->plainTextToken;
$sucess['user'] = $user;
if ($user->permission == 2 || $user->permission == 3) {
AccountStatus::create(['user_id' => $user->id, 'active' => 1]);
AccountBalance::create([
'user_id' => $user->id,
'current_balance' => '0',
'points_accumulated' => 0
]);
CreateSuggestion::create(['user_id' => $user->id, 'account_service_id' => 1]);
}
return $this->sendResponse($sucess, 'User Register with successfully.');
}`

How can I resolve this promise from external function in React JSX?

I need some help understanding what and why this does not work when in React JSX, but does in standard JS.
First off, what is it called when you reference a var as a function?
var promiseResolve;
promiseResolve();
And second why does React return: "Uncaught TypeError: promiseResolve is not a function" when trying to call it?
I know this sounds like a intro question, but I've been doing pretty complex JS and now React web builds for five years now, and I embarrassingly don't know what it means to call an undefined function like that.
This all fits into a bigger question of trying to resolve a promise from an await in an external function via a modal, but without trying to go into detail, if the below would work in JSX, it would solve my problems.
var promiseResolve, promiseReject;
var promise = new Promise(function(resolve, reject){
promiseResolve = resolve;
promiseReject = reject;
});
promiseResolve();
For more context, I'm trying to get this to work (EDIT: request to show full code after this blurb. Everything else works, it's only recently I was asked to add a process to warn if an email was already sent):
let promiseResolve, promiseReject;
const resendAttempt = () => new Promise((resolve,reject) => {
promiseResolve = resolve;
promiseReject = reject;
});
const resolvePromise = () => {
promiseResolve();
}
return (
<Modal... <button onclick={resolvePromise} ... /> ... />
<Form onSubmit={async (values ...
await resendAttempt();
)}
/>
)
FULL CODE, look for comments on where issue is:
import React, { useState } from 'react';
import { Formik, Form, useField, FieldArray, Field } from 'formik';
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Button from 'components/Elements/Button';
import H3 from 'components/Elements/H2';
import Modal from 'react-bootstrap/Modal';
import BootstrapButton from 'react-bootstrap/Button';
import Wrapper from './Wrapper';
const TeamRecruitmentForm = props => {
const [showForm, setShowForm] = useState(true);
const [customFormError, setCustomFormError] = useState(false);
const [customFormSuccess, setCustomFormSuccess] = useState(false);
const [recruitRow, setRecruitRow] = useState({
recruitFirstName: '',
recruitLastName: '',
recruitEmail: ''
});
const captFirstName = props.userData.name ? props.userData.name.first : '';
const captLastName = props.userData.name ? props.userData.name.last : '';
const cityName = props.customGreetingFields.eventCity ? props.customGreetingFields.eventCity : '';
let messageSubject = `Join ${captFirstName} ${captLastName}\'s Leaders for Life Team`;
let promiseResolve, promiseReject;
const resendAttempt = () => new Promise((resolve,reject) => {
promiseResolve = resolve;
promiseReject = reject;
});
// this is called with a modaal button click
const resolvePromise = () => {
promiseResolve(); // JS errror, console says it is not a function
}
const [showTeammember, setShowTeammember] = useState(false);
const [showResend, setShowResend] = useState(false);
const handleClose = () => {
console.log('handleClose');
setShowTeammember(false);
setShowResend(false);
};
const handleShow = (modal) => {
console.log('handleShow');
if (modal == 'teammember') {
setShowTeammember(true);
} else if (modal == 'resend') {
setShowResend(true);
}
};
function validateEmail(value,x) {
let error;
const filterTeamRoster = props.teamRosterActivity.filter(user => {
return user.email == value;
});
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+#[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
else if (filterTeamRoster.length > 0) {
handleShow('teammember');
error = 'Current Teammember';
}
return error;
}
function validateFirstName(value) {
let error;
if (!value) {
error = 'Required';
}
return error;
}
function validateLastName(value) {
let error;
if (!value) {
error = 'Required';
}
return error;
}
return (
<>
<Modal
show={showTeammember}
id={props.id}
size={props.size}
onHide={handleClose}
className={`mx-auto ${props.modalClass}`}
centered
>
<Modal.Header closeButton closeLabel="Back" className="bg-primary py-1">
<BootstrapButton
variant="link"
onClick={handleClose}
className={`text-white btn-modal-back btn-back-${props.modalClass}`}
>
<span className="fas fa-caret-left" alt="" />
Back
</BootstrapButton>
</Modal.Header>
<Modal.Body>
<H3>Current Teammember</H3>
<p>The person associated with the email address has already joined your team</p>
<Button variant="primary" className="btn-block" onClick={handleClose}>
OK
</Button>
</Modal.Body>
</Modal>
<Modal
show={showResend}
id={props.id}
size={props.size}
onHide={handleClose}
className={`mx-auto ${props.modalClass}`}
centered
>
<Modal.Header closeButton closeLabel="Back" className="bg-primary py-1">
<BootstrapButton
variant="link"
onClick={handleClose}
className={`text-white btn-modal-back btn-back-${props.modalClass}`}
>
<span className="fas fa-caret-left" alt="" />
Back
</BootstrapButton>
</Modal.Header>
<Modal.Body>
<H3>You already sent an invite to this email address.</H3>
<p>Would you like to send it again"</p>
{/* This is the button I'm using to test allowing the dupe email
form to be send */}
<Button variant="primary" className="btn-block" onClick={resolvePromise}>
OK
</Button>
</Modal.Body>
</Modal>
<Wrapper key={props.formNumber} {...props}>
{customFormError === false && customFormSuccess === true ? (
<div className="my-1">
<Row>
<Col xs={6} md={3}
className="pr-1 pr-md-2 pb-2 email-sent-container"><span className="email-sent">{recruitRow.recruitFirstName}</span></Col>
<Col xs={6} md={3}
className="pr-1 pr-md-2 pb-2 email-sent-container"><span className="email-sent">{recruitRow.recruitLastName}</span></Col>
<Col md={4}
className="pl-md-2 pb-2 email-sent-container"><span className="email-sent">{recruitRow.recruitEmail}</span></Col>
<Col xs={6} md={2}
className="pb-2">
<Button variant="primary" type="submit" disabled>
Sent!
</Button>
</Col>
</Row>
</div>
) :
(<Formik
{...props}
initialValues={{ recruits: [{firstName: "", lastName: "", emailAddress: ""}] }}
validateOnChange={false}
validateOnBlur={false}
onSubmit={ async (values, { setSubmitting, setFieldError, setStatus }) => {
// this is the array it checks in order to kick bcak option to continue
// or cancel the submissions process
const filterSentMessages = props.sentMessages.filter(user => {
return user.recipients == values['emailAddress'+props.formNumber];
});
console.log("before sleep");
if (filterSentMessages.length > 0) {
handleShow('resend');
}
// this works, but the button click in the modal
// to resolve this is the issue where I get undefined
await resendAttempt();
let recipient = `${values['firstName'+props.formNumber]} ${values['lastName'+props.formNumber]} <${encodeURIComponent(values['emailAddress'+props.formNumber])}>,`;
console.info('recipient:', recipient);
let messageBody = `<p>Dear ${values['firstName'+props.formNumber]},</p><p>... message content ...</p><p>Thank you in advance for your commitment to making an impact!</p><p>${captFirstName}!</p>`
messageBody = encodeURIComponent(messageBody);
let x = 2; // this is here to just stop sending so many test emails
if( x == 1 ) { // this is here to just stop sending so many test emails
try {
props.sendMessage(
localStorage.getItem('frId'),
messageSubject,
messageBody,
recipient,
props.eventConfig.defaultStationeryId,
);
} catch (error) {
console.log('form submit error:', error);
setShowForm(!showForm);
setSubmitting(false);
}
}
setRecruitRow({...recruitRow, recruitFirstName: values['firstName'+props.formNumber], recruitLastName: values['lastName'+props.formNumber], recruitEmail: values['emailAddress'+props.formNumber]})
setCustomFormError(false);
setCustomFormSuccess(true);
setSubmitting(false);
}}
render={({ values,errors }) => (
<Form className="my-1" id={`recruitForm${props.formNumber}`}>
<FieldArray
name="recruits"
render={(arrayHelpers) => (
<>
{(values.recruits && values.recruits.length > 0) && (
values.recruits.map((recruit, index) => (
<Row key={props.formNumber}>
<Col xs={6} md={3}
className="pr-1 pr-md-2 pb-2"
>
<label htmlFor={`firstName${props.formNumber}`} className="sr-only">
First Name
</label>
<Field
className="form-control"
type="text"
name={`firstName${props.formNumber}`}
placeholder="First Name"
id={`firstName${props.formNumber}`}
validate={validateFirstName}
/>
{errors['firstName'+props.formNumber] && <div className="text-danger" role="alert">{errors['firstName'+props.formNumber]}</div>}
</Col>
<Col xs={6} md={3}
className="pl-1 px-md-2 pb-2"
>
<label htmlFor={`lastName${props.formNumber}`} className="sr-only">
Last Name
</label>
<Field
className="form-control"
type="text"
name={`lastName${props.formNumber}`}
placeholder="Last Name"
id={`lastName${props.formNumber}`}
validate={validateLastName}
/>
{errors['lastName'+props.formNumber] && <div className="text-danger" role="alert">{errors['lastName'+props.formNumber]}</div>}
</Col>
<Col md={4}
className="pl-md-2 pb-2"
>
<label htmlFor={`emailAddress${props.formNumber}`} className="sr-only">
Email Address
</label>
<Field
className="form-control"
type="text"
name={`emailAddress${props.formNumber}`}
placeholder="Email Address"
id={`emailAddress${props.formNumber}`}
validate={validateEmail}
/>
{errors['emailAddress'+props.formNumber] && <div className="text-danger" role="alert">{errors['emailAddress'+props.formNumber]}</div>}
</Col>
<Col xs={6} md={2}
className="pb-2"
>
<Button variant="primary" type="submit">
Send
</Button>
</Col>
</Row>
))
)}
</>
)}
/>
</Form>
)}
/>
)}
</Wrapper>
</>
);
};
export default TeamRecruitmentForm;

How do I properly send an array of separated strings using react Hooks and forms?

I'm using a react form and hooks to send a post to my backend that's running Spring boot. When I send the form information through axios post it sends a formatted JSON which is perfect, but one portion of the JSON needs to be an array of strings instead it sends one long String in the array. How can I format my code to send an array of string inputs and not one large string? I know my backend works as i've tested the end point using swaggerUi and Postman, The issue is the missile array sending back a single string array element instead of multiple strings. Jackson on the backend will only parse each individually declared string
.
import React, {useEffect, useState} from "react";
import {Link, useNavigate} from "react-router-dom";
import EmpireService from "../service/EmpireService";
const CreateOrder = () => {
const [empireName, setEmpireName] = useState("");
const [hullName, setHullName] = useState("");
const [shieldType, setShieldType] = useState("");
const [weaponType, setWeaponType] = useState("");
const [missiles, setMissiles] = useState([]);
const shipOrder ={empireName,hullName,shieldType,weaponType,missiles};
const saveOrder = (e) => {
EmpireService.createOrder(shipOrder).then((response)=> {
console.log(response.data);
}).catch(error => {
console.log(error);
})
}
return (
<div>
<br></br>
<div className = "container">
<div className = "row">
<div className = "card col-md-6 offset-md-3 offset-md-3 border-success">
<div className = "card-body ">
<form>
<div className = "form-group mb-2">
<label className = "form-label">Empire Name: </label>
<input
type = "text"
placeholder='Enter Empire name'
name = "empireName"
className='form-control border-success'
value = {empireName}
onChange = {(e) => setEmpireName(e.target.value)}>
</input>
</div>
<div className = "form-group mb-2">
<label className = "form-label">Hull Name: </label>
<input type = "text"
placeholder='Enter Hullname'
name = "hullName"
className='form-control border-success'
value = {hullName}
onChange = {(e) => setHullName(e.target.value)}
>
</input>
</div>
<div className = "form-group mb-2 ">
<label className = "form-label">Shield: </label>
<input type = "text"
placeholder='Enter Shield type'
name = "shieldType"
className='form-control border-success'
value = {shieldType}
onChange = {(e) => setShieldType(e.target.value)}
>
</input>
</div>
<div className = "form-group mb-2 ">
<label className = "form-label">Weapon: </label>
<input type = "text"
placeholder='Enter desired weapon'
name = "weaponType"
className='form-control border-success'
value = {weaponType}
onChange = {(e) => setWeaponType(e.target.value)}
>
</input>
</div>
<div className = "form-group mb-2 ">
<label className = "form-label">Missiles: </label>
<input type = "text"
placeholder='Enter desired missile'
name = "missiles"
className='form-control border-success'
value = {missiles}
onChange = {(e) => setMissiles([e.target.value])}
>
</input>
</div>
<button className='btn btn-success ' onClick={(e) => saveOrder(e)} >Submit</button>
<Link to = "/dawn-parts" className='btn btn-danger'>Cancel</Link>
</form>
</div>
</div>
</div>
</div>
</div>
)
}
export default CreateOrder;
This is the raw JSON generated after submitting the form I need the missiles array to be separate strings not a single string.
{
"empireName": "Tano",
"hullName": "hull",
"shieldType": "phase_shield",
"weaponType": "ion_cannon",
"missiles": [
"voice_of_Grace, Vengeance_of_Ended_Dreams, plasma_missile"
]
}
My axios service function to connect to the order endpoint.
createOrder(shipOrder){
return axios.post(CREATE_ORDER_URL,shipOrder);
}

Rename file with DropZoneJS when upload succesfull

I've been trying all answer founding in the net and that never work, i would like that the file who is save in the PDF folder and in the database behind a choose name while uploading.
This is my code :index.php
upload.php
INDEX.PHP:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="widht=device-widht, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Glisser-deposer </title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/dropzone.css">
</head>
<body>
<div id="main">
<div id="header">
<h1> Glisser-deposer les fichiers de telechargement<br> </h1>
</div>
<div id="content">
<form class="dropzone" id="file_upload"></form>
<button id="upload_btn">telechargement</button>
</div>
</div>
<script type="text/javascript" src="js/dropzone.js" ></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script>
Dropzone.autoDiscover = false;
$(document).ready(function () {
$(".dropzone").dropzone({
renameFilename: function (filename) {
return new Date().getTime() + '_' + filename;
}
});
});
var myDropzone = new Dropzone("#file_upload", {
url: "upload.php",
parallelUploads: 3,
uploadMultiple: true,
acceptedFiles: '.pdf',
clickable: true,
autoProcessQueue: false,
renameFilename: function (filename) {
name = new Date().getTime() + '-' + filename;
return name;
},
success: function(file,response){
if(response == 'true'){
$('#content .message').hide();
$('#content').append('<div classe="message success">Fichier Telecharger avec
succes.</div>');
}else{
$('#content').append('<div classe="message error">Le fichier ne peux etre
telecharger.</div>');
}
}
});
$('#upload_btn').click(function(){
myDropzone.processQueue();
});
</script>
</body>
</html>
UPLOAD.PHP :
<?php
/* Créer une connexion*/
$conn = mysqli_connect("localhost", "root", "","intranet"); // ("nom d'hôte", "nom
d'utilisateur", "mot de passe", " nom de la base")
/* Vérifier la connexion*/
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
if($_FILES['file']['name'] != ''){
$file_names = '';
$total = count($_FILES['file']['name']);
for($i=0; $i<$total; $i++){
$filename = $_FILES['file']['name'][$i]; // Obtenez le nom du fichier
téléchargé.
$extension = pathinfo($filename,PATHINFO_EXTENSION); //Obtenez l'extension du
fichier téléchargé
$valid_extensions = array('pdf','.txt');
if(in_array($extension, $valid_extensions)){ // vérifier si le fichier de
téléchargement est un fichier pdf valide.
$new_name = rand() . ".". $extension;
$path = "PDF/" . $new_name;
move_uploaded_file($_FILES['file']['tmp_name'][$i], $path);
$file_names .= $new_name . " , ";
}else{
echo 'false';
}
}
// Enregistrer le nom des fichiers téléchargées dans la base de données
$sql = "INSERT INTO fichier VALUES('{$file_names}')";
if(mysqli_query($conn,$sql)){
echo 'true';
}else{
echo 'false';
}
}
?>

How to display data ionic in ionViewWillEnter using post method?

I dont know how to display the data from API to ionic apps. I dont know how to use local storage or navParams or both in displaying the data
What I have tried is I use post method in ionViewWillEnter to call the data in ionic.
below is the success API to call all the data.
.api
public function viewProfileClinic(Request $request)
{
$id =$request->id;
$clinicID = $request->clinic_id;
$count = RegisterClinic::where('clinic_id',$clinicID)->count();
if($count == 1)
{
$clinicData = RegisterClinic::where('clinic_id',$clinicID)->first();
$callEmailTelno = User::where('id',$clinicData->uid)->first();
$datamsg = response()->json([
'callemailtelno' => 'Email:'.$callEmailTelno->email.'Telno:'.$callEmailTelno->telno,
'clinicdata' => $clinicData
]);
return $datamsg->content();
}
else{
$datamsg = response()->json([
'error' => array("text"=>"No clinic data.")
]);
return $datamsg->content();
}
}
How to display back data from that API to ionic?
Below is what I have tried in __ .ts__ file.
cprofile.ts
ionViewWillEnter(){
this.authService.postData(this.id,'viewProfileClinic').then((result) => {
this.responsedata = result;
console.log(result);
if(this.responsedata.callemailtelno && this.responsedata.clinicdata)
{
localStorage.setItem('callemailtelno', JSON.stringify(this.responsedata.callemailtelno));
console.log(this.responsedata.callemailtelno);
const data = this.navParams.get('data');
this.usersClinic.email = data.email;
this.usersClinic.telno = data.telno;
this.clinic_regno = data.clinic_regno;
this.clinic_name = data.clinic_name;
this.site = data.site;
this.clinic_address = data.clinic_address;
this.zip = data.zip;
this.city = data.city;
this.state = data.state;
}
else
{
this.presentError(this.responsedata.error.text);
console.log(this.responsedata.error);
}
},(err) =>{
});
}
.cprofile.html
<ion-list>
<p>Clinic Profile</p>
<form #f="ngForm" (ngSubmit)="onSubmit(f)" class="list-form">
<ion-item>
<ion-label stacked>Clinic Email</ion-label>
<ion-input type="text" name="usersClinic.email" [(ngModel)]="usersClinic.email">{{usersClinic.email}}</ion-input>
</ion-item>
<ion-item>
<ion-label stacked>Telephone no.</ion-label>
<ion-input type="text" name="usersClinic.telno" [(ngModel)]="usersClinic.telno">{{usersClinic.telno}}</ion-input>
</ion-item>
<button ion-button color="light" class="transparent-button" [disabled]="!f.valid" text-center round>
Edit
</button>
</form>
<ion-item>
<p>Clinic Registration no</p>
{{clinic_regno}}
</ion-item>
<ion-item>
<p>Clinic Name</p>
{{clinic_name}}
</ion-item>
<ion-item>
<p>Clinic Site</p>
{{site}}
</ion-item>
<ion-item>
<!-- <p>Clinic Address</p> -->
<ion-label primary>Clinic Address</ion-label>
<!-- <ion-textarea>{{clinic_address}},{{zip}},{{city}},{{state}}.</ion-textarea> -->
<ion-textarea rows="6" disabled [value]="clinic_address" ></ion-textarea>
</ion-item>
</ion-list>
All I want is data being able to be display in ionic.
Because of all data can be display as I test run API in the postman.
please try this code to display data
ionViewWillEnter(){
this.authService.postData(this.id,'viewProfileClinic').then((result) => {
this.responsedata = result;
console.log(result);
this.usersClinic.email = this.responsedata.email;
this.usersClinic.telno = this.responsedata.telno;
this.clinic_regno = this.responsedata.clinic_regno;
this.clinic_name = this.responsedata.clinic_name;
this.site = this.responsedata.site;
this.clinic_address = this.responsedata.clinic_address;
this.zip = this.responsedata.zip;
this.city = this.responsedata.city;
this.state = this.responsedata.state;
},(err) =>{
});
}

Resources