לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 18-04-2009, 21:13
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי formobile שמתחילה ב "איך שולחים למסד נתונים נתיב של תמונה"

קודם כל אתה חייב לדעת איך להעלות קובץ לשרת.

האם אתה יודע איך?
אם לא, קרא כאן: http://www.php.net/manual/en/featur...post-method.php

זה מתבצע בצורה הבאה:

אתה יוצר טופס HTML שנותן למשתמש אפשרות להעלות קובץ.
המשתמש לוחץ submit, והקובץ עולה לשרת עוד בכלל לפני שקוד ה-PHP רץ.
אחרי שהקובץ עלה ונמצא בתיקייה הזמנית עבור קבצים שהועלו, קוד ה-PHP מתחיל לרוץ.

כשקוד ה-PHP מתחיל לרוץ, אתה צריך להעביר באיזשהו שלב את הקובץ שנמצא בתיקייה הזמנית אל התיקייה הרצויה. כל המידע של הקובץ נמצא במשתנה הגלובאלי $_FILES (מידע אפשר לראות בקישור ובדוקומנטציה של PHP).

אחרי שהעברת את הקובץ לתיקייה הרצויה עם השם הרצוי, תצטרך לאכסן את הנתיב לקובץ במסד נתונים, כאשר יש לו מספר זיהוי מסויים (בדר"כ מורכב מספרות דצימליות 0-9).

כאשר מישהו מבקש קובץ מסוים, לדוגמא בצורה הבאה:
קוד:
<img src="img.php?id=37" />


אתה צריך לעשות חיפוש במסד הנתונים עבור מספר הזיהוי 37, לשלוף את הנתיב של התמונה, ולהציג את התמונה למשתמש בעזרת כותר של תמונות.
הכותר תלוי כמובן בסוג התמונה.

ראה עבור פונקציות לטיפול בתמונה במידה ותצטרך:
http://il2.php.net/manual/en/function.getimagesize.php
(שים לב שיש פונקציות מסוימות שדורשות שיהיה לך ספריית GD, ויש פונקציות שאינן דורשות זאת כי הן built-in, למרות שהן נמצאות בקטגוריה של GD functions)

כדי לדעת איזה כותר שייך לאיזו תמונה, בצע חיפוש בגוגל על images header או משהו דומה.

אתן לך דוגמא להצגת תמונת gif:
קוד PHP:
<?php

header
('Content-type: image/gif');

$res mysql_query('SELECT file_name FROM files WHERE file_id='.(int)$_GET['id']);
$data mysql_fetch_array($res);

readfile('images/'.$data['file_name']); # file_name can be something like "my_image.gif"

exit();

?>

good luck

נערך לאחרונה ע"י dorM בתאריך 18-04-2009 בשעה 21:18.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 18-04-2009, 22:18
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 3 שנכתבה על ידי formobile שמתחילה ב "אני כבר יודע איך לשים קובץ..."

הנתיב ידוע לך: הנתיב בנוי מהשם של הקובץ, ומהתיקייה בה הוא נמצא.

התיקייה שבה הקובץ נמצא היא משהו כמו:

קוד:
./images/


הסימן:
קוד:
./

מסמל את התיקייה שבה הסקריפט רץ (לדוגמא, התיקייה שבה נמצא הקובץ img.php)

השם של הקובץ נמצא באיבר:
קוד PHP:
 $_FILES['userfile']['name'


ואתה מעביר אותו לתיקייה images עם הפונקציה move_uploaded_file.

את הנתיב הכללי, שהוא החיבור של 2 האלמנטים הנ"ל, אתה מחבר (concat):
קוד PHP:
 $path mysql_real_escape_string('images/'.basename($_FILES['userfile']['name'])); 


ואת הנתיב הנ"ל, path, אתה מכניס למסד הנתונים עם מספר זיהוי של התמונה:
קוד PHP:
 mysql_query('INSERT INTO files (file_name) VALUES('.$path.')'); 

בשאילתא הנ"ל אני מניח שהטור file_id הוא מסוג auto_increment ולכן לא ציינתי באופן ספציפי את הערך של השדה הזה, כיוון ש-mysql תכניס ערך תקין באופן אוטומטי.

כיוון שאני חושב שכל הקבצים אצלך בכל מקרה אמורים להיות בתיקייה images, זה יהיה מיותר לכלול אותה בנתיב של הקובץ בתוך מסד הנתונים, ולכן יהיה ריאלי יותר להכניס לשדה file_name את השם של הקובץ בלבד, בלי התיקייה בה הוא נמצא:
קוד PHP:
 mysql_query('INSERT INTO files (file_name) VALUES('.mysql_real_escape_string(basename($_FILES  ['userfile']['name'])).')'); 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 20-04-2009, 16:40
צלמית המשתמש של formobile
  formobile formobile אינו מחובר  
 
חבר מתאריך: 07.04.09
הודעות: 95
בתגובה להודעה מספר 10 שנכתבה על ידי dorM שמתחילה ב "למדת PHP מהבסיס? למדת כיצד..."

אני אגיד לך מה אני למדתי

למדתי ליצור מסד ניתונים להתחבר אליו באמצאות קוד , לבנות טבלה , להכניס לטבלה נתונים כמו :

שמות של אנשים , כותרת של כתבה , כתבות , וטקסטים

וכול מיני טקסטים

אני למדתי להכניס את הנתונים האלה לטבלה של המסד ולהוציא את המידע ולהציגם בדף אינטרנט

מסד נתונים משמשת להכנסת נתונים שונים כמו טקסטים הודעות וכתובות ולאחסן תמונות ונתיבים של תכנים
(אני לא יודע מה עוד אבל זה הידע שלי ) ולהציגם בדף אינטרנט ,

לגבי הצבת אופרנד בשאילתא אין לי מושג מה זה ואני כאן כדי ללמוד ואשמח לקבל מושג קטן
ופירוט של זה ומה התפקיד שלו ,

תודה מראש למסבירים ולעזרתכם

נערך לאחרונה ע"י formobile בתאריך 20-04-2009 בשעה 16:44. סיבה: הוספה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 20-04-2009, 16:59
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 11 שנכתבה על ידי formobile שמתחילה ב "אני אגיד לך מה אני למדתי ..."

ואת זה קראת במלואו:
http://www.php.net/manual/en/featur...post-method.php

כי אם כן, אני לא יודע מה הבעיה.

זה לא טוב שאתה מריץ את 2 השאילתות הבאות ביחד:
קוד PHP:
 mysql_query('INSERT INTO movies (pict) VALUES('.$path.')'); 
 
 
mysql_query('INSERT INTO movies (pict) VALUES('.mysql_real_escape_string(basename($_FILES  ['userfile']['name'])).')'); 

אתה חייב לבחור רק אחת מהן להריץ, כיוון שבכל שאילתא אתה מאחסן ערך שונה בשדה pict.

אופרנד זה פשוט ערך מסוים.

כשאתה מריץ את 2 השאילתות הנ"ל אחת אחרי השניה, למעשה אתה מכניס פעמיים כמעט את אותו הערך. זה לא אמור לקרות.
כשאתה כותב $_FILES['userfile']['name'] אתה משתמש באיבר $_FILES['userfile'] שזה מצביע שבטופס ה-HTML יש input עם type שהוא file כאשר ה-name שלו זה userfile.
האם המצב כך אצלך?

תכתוב:
קוד PHP:
 var_dump($_FILES['userfile']['size']); 


ותגיד מה יוצא לך מהקוד.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 21-04-2009, 19:47
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 18 שנכתבה על ידי formobile שמתחילה ב "זה התגובה שאני מקבל מהדפדפן..."

אוקי אז בוא נעשה קצת סדר:

זה הפלט של פונקציית var_dump על המערך $_FILES:
קוד:
array(1) { ["file"]=> array(5) { ["name"]=> string(11) "2rcvfci.jpg" ["type"]=> string(24) "application/octet-stream" ["tmp_name"]=> string(23) "C:\xampp\tmp\php716.tmp" ["error"]=> int(0) ["size"]=> int(0) } }

(אם היית מעתיק את פלט פונקציית var_dump מקוד המקור של האתר, היית יכול לראות זאת מסודר יפה בצורה הנ"ל)

כפי שניתן לראות, הגודל של התמונה (size) זה 0, והשגיאה (error) היא גם 0.
זה ניראה לי די מוזר.

בקוד של ה-HTML אפשר לראות שאתה מתייחס לקובץ המועלה באמצעות המילה "file", ולא באמצעות המילה "userfile", ראה:
קוד:
<input type="file" name="file" id="file" />


לכן זה לא נכון להשתמש במערך:
קוד PHP:
 $_FILES['userfile'

כי הוא ריק.

אלא נכון להשתמש במערך:
קוד PHP:
 $_FILES['file'

כי זה השם (name) שציינת בטופס ה-HTML.

נסה להריץ את קוד ה-PHP הבא, ותגיד מהן התוצאות:

קוד PHP:
 $cfg = array('file_uploads''upload_max_filesize''post_max_size''max_input_time');

echo 
'<br /><br />';

foreach(
$cfg as $v)
 echo 
$v,': 'ini_get($v),'<br />';

echo 
'<br /><br />'


בנוסף, מה הגודל של קובץ התמונה שאתה מנסה להעלות?

אחרון ולא חביב במיוחד, למה לא הוספת את קוד ה-HTML הבא בתוך הטופס:
קוד:
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />

(ניתן כמובן לשינוי בהתאם לצרכיך)

שים לב כאן:
http://www.php.net/manual/en/featur...post-method.php
מה אומרים על האלמנט MAX_FILE_SIZE:
ציטוט:
The MAX_FILE_SIZE hidden field (measured in bytes) must precede the file input field, and its value is the maximum filesize accepted by PHP. Fooling this setting on the browser side is quite easy, so never rely on files with a greater size being blocked by this feature. The PHP settings for maximum-size, however, cannot be fooled. This form element should always be used as it saves users the trouble of waiting for a big file being transferred only to find that it was too big and the transfer failed.


שים לב לחלק המודגש באדום.

מסתבר לבסוף שלא קראת היטב?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 21-04-2009, 19:16
צלמית המשתמש של formobile
  formobile formobile אינו מחובר  
 
חבר מתאריך: 07.04.09
הודעות: 95
הנה הקודים של הקבצים
בתגובה להודעה מספר 1 שנכתבה על ידי formobile שמתחילה ב "איך שולחים למסד נתונים נתיב של תמונה"

זה הקוד של הטופס

קוד:
<html> <body> <form action="send.php" method="post" enctype="multipart/form-data"> <p>title: <input type="text" name="title" id="title" /> </p> <p>des: <textarea name="des" cols="35" rows="12" id="des"></textarea> </p> <p> <input type="file" name="file" id="file" /> </p> <p> <input type="submit" name="submit" id="submit" value="Submit" /> </p> </form> </body> </html>



ויצרתי קובץ שליחה בשם insert.php

וזה הקוד שלו

קוד PHP:
<?php
$con1 
mysql_connect("localhost","root","");
if (!
$con1)
{
die(
'Could not connect: ' mysql_error());
}
mysql_select_db("my_db"$con1);
 
 
echo 
"</br>";
echo 
"</br>";
 
echo 
"</br>";
 
if (((
$_FILES["file"]["type"] == "image/gif")
|| (
$_FILES["file"]["type"] == "image/jpeg")
|| (
$_FILES["file"]["type"] == "image/pjpeg"))
&& (
$_FILES["file"]["size"] < 99999999999999))
{
if (
$_FILES["file"]["error"] > 0)
    {
    echo 
"Return Code: " $_FILES["file"]["error"] . "<br />";
    }
else
    {
    echo 
"Upload: " $_FILES["file"]["name"] . "<br />";
    echo 
"Type: " $_FILES["file"]["type"] . "<br />";
    echo 
"Size: " . ($_FILES["file"]["size"] / 99999999999999) . " Kb<br />";
    echo 
"Temp file: " $_FILES["file"]["tmp_name"] . "<br />";    if (file_exists("upload/" $_FILES["file"]["name"]))
     {
     echo 
$_FILES["file"]["name"] . " already exists. ";
     }
    else
     {
     
move_uploaded_file($_FILES["file"]["tmp_name"],
     
"upload/" $_FILES["file"]["name"]);
     echo 
"Stored in: " "upload/" $_FILES["file"]["name"];
     }
    }
}
else
{
echo 
"Invalid file";
}
$path mysql_real_escape_string('images/'.basename($_FILES['userfile']['name']));
mysql_query('INSERT INTO movies (pict) VALUES('.mysql_real_escape_string(basename($_FILES   ['userfile']['name'])).')');
$con "INSERT INTO movies (title, des)
VALUES
('
$_POST[title]','$_POST[des]')";
if (!
mysql_query($con,$con1))
{
die(
'Error: ' mysql_error());
}
echo 
"1 record added";
 
 
 
?>


אשמח אם תעזור לי ותכוון אותי במה אני טועה

ממש תודה על העזרה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #22  
ישן 21-04-2009, 20:19
צלמית המשתמש של formobile
  formobile formobile אינו מחובר  
 
חבר מתאריך: 07.04.09
הודעות: 95
ניסיתי את הפקודה שנתת לי שוב וקיבלתי תוצאה שונה
בתגובה להודעה מספר 1 שנכתבה על ידי formobile שמתחילה ב "איך שולחים למסד נתונים נתיב של תמונה"

הנה הקוד שקיבלתי כאשר סמתי את הקוד שנתת לי לבדיקה

אבל הפעם שמתי את הקוד של הגבלת משקל

קוד:
array(1) { ["file"]=> array(5) { ["name"]=> string(7) "new.jpg" ["type"]=> string(11) "image/pjpeg" ["tmp_name"]=> string(24) "C:\xampp\tmp\php7F2D.tmp" ["error"]=> int(0) ["size"]=> int(72027) } } </br></br></br>Upload: new.jpg<br />Type: image/pjpeg<br />Size: 7.2027E-10 Kb<br />Temp file: C:\xampp\tmp\php7F2D.tmp


בסדר מעכשיו אני לא ארשום הודעה אחד אחרי השנייה ,

או שאני הערוך את ההודעה הראשונה כדי לא לעשות ספאם.



יש לי את אותה הבעיה עדיין הנתיב לא מופיע לי במסד

אני אגיד לך איך הגדרתי את העמודה שלו :

id : pict
סוג : longtext

קידוד : בחירת מחדש
וכל השדות הנותרים ריקים ולא מסומנים

נערך לאחרונה ע"י formobile בתאריך 21-04-2009 בשעה 20:41. סיבה: הוספה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 21-04-2009, 20:27
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 22 שנכתבה על ידי formobile שמתחילה ב "ניסיתי את הפקודה שנתת לי שוב וקיבלתי תוצאה שונה"

אז בסדר עכשיו הכל טוב.

רק שים לב לא להספים, לפני שאתה כותב תגובה תחשוב האם כללת את כל מה שאתה צריך בתוך התגובה.

אם אתה רוצה לשנות או להוסיף תוכן בתגובותיך, אתה יכול לערוך אותם תוך חצי שעה החל מכתיבתם.

עריכה:
עכשיו שמתי לב שערכת.

זה לא מופיע במסד כי כנראה לא הכנסת (INSERT) למסד את הנתיב של הקובץ.
יכול להיות שהשאילתא החזירה שגיאה (error) ; יכול להיות שהערך של הנתיב שהכנסת שווה למחרוזת ריקה.
תראה את השאילתא שלך:

קוד PHP:
 mysql_query('INSERT INTO movies (pict) VALUES('.mysql_real_escape_string(basename($_FILES     ['userfile']['name'])).')'); 


האם ביצעת בשאילתא הזאת שינוי מאז ההודעה האחת-לפני-אחרונה שכתבתי לך בנוגע לשימוש במפתח נכון כדי להגיע לאיבר הנכון במערך $_FILES?

תקרא כאן: http://php.eitan.ac.il/main.php?id=00152
ותחזור ותקרא בעיון את ההודעות שכתבתי.

דבר נוסף הוא שהגדרת את העמודה בתור LONGTEXT. זה מיותר לגמרי.
מספיק להגדיר את העמודה בתור:
קוד:
VARCHAR(255) NOT NULL


ואפילו הייתי אומר שכדאי ליצור pattern מסוים וקבוע שלפיו תיקבע את שמות התאריכים.
לדוגמא, שמות הקבצים יהיו מורכבים מ:
מספר רנדומלי בעל רוחב קבוע (כמות הספרות הדצימליות שווה כל פעם),
התאריך ו\או זמן של ההעלאה,
מספר הקובץ שהועלה (במידה והעלו קבצים מרובים)
מספר הזיהוי של המשתמש וכו'.

הכי כדאי לבחור מרכיבים שייבנו שם בעל רוחב קבוע כדי שתוכל להגדיר את הטור בתור CHAR במקום VARCHAR.

נערך לאחרונה ע"י dorM בתאריך 22-04-2009 בשעה 17:54.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #35  
ישן 25-04-2009, 18:00
צלמית המשתמש של formobile
  formobile formobile אינו מחובר  
 
חבר מתאריך: 07.04.09
הודעות: 95
קוד שאמור להציג לי תמונות מהמסד
בתגובה להודעה מספר 1 שנכתבה על ידי formobile שמתחילה ב "איך שולחים למסד נתונים נתיב של תמונה"

אתמאל חיפשתי במשך כל היום פתרון לשליפת תמונה מהמסד ללא הצלחה

היום גם חיפשתי ומה שמצאתי זה קוד עם מידע ולפי מה שהבנתי אמור לעבוד אבל לא כל כך עובד אצלי

הקוד הוא מבולגן ולא יודע מה עשו לו אשמח אם תעזור לי להפעיל אותו
כדי שיציג לי את התמונות מהמסד

הנה הקוד

קוד PHP:
 <html>
<
head>
<
title>A Better Example</title>
</
head>
<
body>
 
<?
php
// Establishes a database connection
$con mysql_connect("localhost","root","");
if (!
$con)
{
die(
'Could not connect: ' mysql_error());
}
mysql_select_db("my_db"$con);
$result mysql_query("SELECT * FROM movies");
while (
$row mysql_fetch_array($result))
{
 
// Sets the database record to start at
$db_row_start 0;
 
// Sets the maximum number of images to return per page
$db_row_get 24;
 
// Forms a query that returns more than one record
$query 'SELECT * FROM `image` ORDER BY `id` '
     
'LIMIT '.$db_row_start.','.$db_row_get;
 
// Executes the query and assigns the returned resource to $result
if ($result mysql_query($query))
{
    
// Sets the number of cells to display in each HTML table row
    
$cells_wide 4;
?> 
    // Opens a new HTML table
    ?><table cellspacing="0" cellpadding="3" border="1">
 
    // Opens the first HTML row
 
 
 
 
<img src="<?php echo $image?>" height="100" width="100"/>
<?php 
 
 
 
 
 
 
 
 
 
 
?>
 
 
 
<?php
 
    
// Initializes the current cell number
    
$c 0;
 
    
// Loops through each database table row
    
while ($row mysql_fetch_assoc($result))
    {
        
/*
         * Determines if the current cell is the first cell of a
         * table row but not the first cell of the first row
         */
        
if ($c && == $c $cells_wide)
        {
            
// Closes the previous HTML table row and opens a new row
            
?></tr><tr><?php
        
}
 
        
// Assigns each field to a variable of the same name (Not a good idea)
        
extract($row);
 
        
// Opens a new HTML table cell
        
?><td><?php
 
        
// Writes the contents of the current cell
        
echo "<div>$id</div><div>$image</div>";
 
        
// Closes the current HTML table cell
        
?></td><?php
 
        
// Increments the current cell number
        
$c++;
    }
 
    
/*
     * May require a way to insert cleanup <td>s if the total number of cells
     * is not evenly divisible by the number of cells per row.
     */ 
 
    // Closes the last HTML table row (or the first if there are no records)
    
?></tr><?php
 
    
// Closes the HTML table
    
?></table><?php
}
// What to do if myqsl_query() returns FALSE instead of a resource
else
{
    
/*
     * Says "Query failed." followed by an error description.
     * Don't echo mysql_error() on public sites.
     */
    
?><p>Query failed.</p><p><?php echo mysql_error(); ?></p><?php
}
}
mysql_close($con);
?>
</body>
</html> 



תודה מראש על עזרתך
אני מקווה שתצליח לעזור לי בזה
כי אני ממש לא הצלחתי לעשות עם זה כלום
ונראה לי שיש שורות בקוד מיותרים , יש אפשרות לצמצם את הקוד שלא יהיה ארוך ?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 17:27

הדף נוצר ב 0.14 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר