اذهب إلى المحتوى
  • 0

تعديل البيانات الشخصية مع عرض البيانات القديمة

محمود سعداوي2

السؤال

السلام عليكم.

أواجه مشكل في تعديل البيانات بحيث يجب أن تظهر البيانات القديمة للمستخدم داخل حقول الأدخال وأن لاتكون فارغة.

في المثال التالي:

Capture.thumb.JPG.d4374e88193f136396932bf62787a1ac.JPG

يجب أن تظهر صورة المستخدم و بقية المعطيات داخل قاعدة البيانات يجب أن تظهر في حقول اإدخال.

الكود التالي الذي قمت به يقوم بتعديل البيانات و لكن لا يظهر البيانات القديمة داخل الحقول الخاصة بها.

الكود:

function PhotoProfile({profile}) {
    const user = JSON.parse(localStorage.getItem("user"));
    let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar   
    const [profileAvatar, setProfileAvatar] = useState( null)
    let [profileImage, setProfileImage] = useState(profilePhoto)
    const [data, setData] = useState([])
    let [name, setName] = useState(profile.name || "")
    let [bio, setBio] = useState(profile.bio || "")
    let [status, setStatus] = useState(profile.status || "")
    const [error, setError] = useState("")
    const navigate = useNavigate()
    const handleFileChange = (e) => {
      if (e.target.files && e.target.files[0]) {
        setProfileImage(URL.createObjectURL(e.target.files[0]));
        setProfileAvatar(e.target.files[0]);
      }
    };

    const handleSave = (e) => {
        e.preventDefault()
        const formData = new FormData()
        formData.append('name', name)
        formData.append('bio', bio)
        formData.append('status', status)
        if (profileAvatar) {
          formData.append('avatar', profileAvatar, profileAvatar?.name)
        }
      axios
      .post("/api/users/profile", formData, {
        headers: {
          "Content-Type": "multipart/form-data",
          "x-auth-token": user.data?.token,
        },
      })
      .then((res) => {
        setData(res.data)
        navigate('/')
      })
      .catch((error) => setError(error.response.data.msg));
    };
    console.log(data)
  return (
    <div className="photo-profile">
      <HeaderProfile
        title="Public profile"
        paragraphe="Add information about yourself."
      />
      <div className="photo-profile-img">
        <img alt="" src={profileImage}/>
      </div>
      <form 
        encType="multipart/form-data" 
        className='form-container' 
        onSubmit={handleSave}
      >
        {error && <Alert error={error}/>}
        <input
          className="photo-profile-input"
          type="file"
          name="avatar"
          accept="image/*"
          onChange={handleFileChange}
        />
        <input 
          type="text" 
          className="profile-iput-info" 
          placeholder="name"
          value={name}
          name="name"
          onChange={(e)=> setName(e.target.value)}
          required
        />

        <input 
          type="text" 
          className="profile-iput-info" 
          placeholder="bio"
          value={bio}
          name="bio"
          onChange={(e)=> setBio(e.target.value)} 
          required
        />

        <input 
          type="text" 
          className="profile-iput-info" 
          placeholder="status" 
          value={status}
          name="status"
          onChange={(e)=> setStatus(e.target.value)}
          required
        />

        <button className="submit" type="submit">
          Save
        </button>
      </form>
    </div>
  );
}

شكرا للمساعدة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

لحل المشكلة يمكنك استخدام useEffect ، حيث نستعمله عندما نريد إجراء تعديل على حالة ال component بعد ال render و هذا الكود بعد التحديث:

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { useNavigate } from 'react-router-dom';
import HeaderProfile from './HeaderProfile';
import Alert from './Alert';

function PhotoProfile({ profile }) {
  const user = JSON.parse(localStorage.getItem("user"));
  let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar;
  const [profileAvatar, setProfileAvatar] = useState(null);
  const [profileImage, setProfileImage] = useState(profilePhoto);
  const [data, setData] = useState([]);
  const [name, setName] = useState(profile.name || "");
  const [bio, setBio] = useState(profile.bio || "");
  const [status, setStatus] = useState(profile.status || "");
  const [error, setError] = useState("");
  const navigate = useNavigate();

  useEffect(() => {
    // تحديث معلومات البروفايل
    let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar;
    setProfileImage(profilePhoto);
    setName(profile.name || "");
    setBio(profile.bio || "");
    setStatus(profile.status || "");
  }, [profile]);

  const handleFileChange = (e) => {
    if (e.target.files && e.target.files[0]) {
      setProfileImage(URL.createObjectURL(e.target.files[0]));
      setProfileAvatar(e.target.files[0]);
    }
  };

  const handleSave = (e) => {
    e.preventDefault();
    const formData = new FormData();
    formData.append('name', name);
    formData.append('bio', bio);
    formData.append('status', status);
    if (profileAvatar) {
      formData.append('avatar', profileAvatar, profileAvatar?.name);
    }
    axios
      .post("/api/users/profile", formData, {
        headers: {
          "Content-Type": "multipart/form-data",
          "x-auth-token": user.data?.token,
        },
      })
      .then((res) => {
        setData(res.data);
        navigate('/');
      })
      .catch((error) => setError(error.response.data.msg));
  };

  return (
    <div className="photo-profile">
      <HeaderProfile
        title="Public profile"
        paragraphe="Add information about yourself."
      />
      <div className="photo-profile-img">
        <img alt="" src={profileImage} />
      </div>
      <form
        encType="multipart/form-data"
        className='form-container'
        onSubmit={handleSave}
      >
        {error && <Alert error={error} />}
        <input
          className="photo-profile-input"
          type="file"
          name="avatar"
          accept="image/*"
          onChange={handleFileChange}
        />
        <input
          type="text"
          className="profile-iput-info"
          placeholder="name"
          value={name}
          name="name"
          onChange={(e) => setName(e.target.value)}
          required
        />

        <input
          type="text"
          className="profile-iput-info"
          placeholder="bio"
          value={bio}
          name="bio"
          onChange={(e) => setBio(e.target.value)}
          required
        />

        <input
          type="text"
          className="profile-iput-info"
          placeholder="status"
          value={status}
          name="status"
          onChange={(e) => setStatus(e.target.value)}
          required
        />

        <button className="submit" type="submit">
          Save
        </button>
      </form>
    </div>
  );
}

export default PhotoProfile;

يمكنك الإطلاع اكثر على هذه العناصر من خلال المقالات التالية:

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...