• 27.08.2025, 07:11
  • Register
  • Login
  • You are not logged in.

 

Martin666

God

PHP: Bilderupload in MySQL

Wednesday, June 6th 2007, 5:54pm

Moin! Ich soll da was proggen und komme nicht weiter. Will für ein kleines Spiel nen Avatarupload machen, welcher dann zu dem User in der Datenbank verknüpft wird.

im HTML-Formular steht

Source code

1
Avatar (Max 100x100): <input type="file" name="pic" />


im php teil steht unter anderem

Source code

1
2
3
4
5
$pic = $_FILES['pic'];

blabla

$sql = "INSERT INTO user VALUES (null, '$username', '$password', '$mail', '$age', '$pic'"


Soviel zum anlegen. Später soll dann in der Highscoreliste der entsprechende Avatar angezeigt werden. Das hab ich mir mal so zusammengereimt, und ich denke so wirds nicht funktionieren :/

Source 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
switch ($_GET['orderby'])
{
      case "name":
            $sql = "SELECT highscore.username, highscore.money, highscore.date, highscore.version, user.pic
            FROM highscore WHERE money!=0
            ORDER BY username ASC, money DESC";
            $cnt2=500;
            break;

blabla}

dbconnect();

$res = mysql_query($sql)
or dietrace(mysql_error());

if(mysql_num_rows($res))
{

      $cnt =1;
      while($cin = mysql_fetch_array($res))
      {      
      if ($cnt<=$cnt2)
      {
            ?>
            <tr>      
                  <td>
                  <?php echo $cnt . "."; ?>
                  </td>
                  <td>
                  <?php echo $cin['username']; ?>
                  </td>
                  <td>
                  <?php echo $cin['money']; ?>
                  </td>
                  <td>
                  <?php echo $cin['date']; ?>
                  </td>
                  <td>
                  <?php echo $cin['version']; ?>
                  </td>
                  <td>
                  <?php echo '<img="'$cin['pic']'">s'; ?>
                  </td>
            </tr>            
            
            <?php      
            $cnt++;      
            }            
      }


Die ganzen Text Datensätze auszugeben funzt alles wunderbar, aber beim Bild weiss ich halt nich. Kann das so hinkommen? Hab nun auch nicht allen Code hier gepostet. nur das was ich so verändert hab
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

palme_kex

God

Re: PHP: Bilderupload in MySQL

Wednesday, June 6th 2007, 6:09pm

Ich machs beim Avatar immer nen bissel anders, wozu nen Extra Bildnamen abspeicher ?
Ich lade das Bild Hoch und geben dem Bild einfach die UserID als namen und schon muss man sich nicht mehr mit extra DB einträgen rumschlagen.

Ich glaube das hier reicht dafür schon...

Source code

1
move_uploaded_file($_FILES['pic']['tmp_name'], "pics/".$_SESSION["USER_ID"].".jpg")


Den Link zum bild bekommste dann einfach mit

Source code

1
echo "<img=\"/pics/".$cin['id'].".jpg\">";


Wenn du keine ID hast, nimm halt den nutzernamen, eben das was du als primary key in der db benutzt. So musste dir auch keine Gedanken dadrüber machen, wenn zB 2 Leute nen bild mit gleichem Namen hochladen.

Martin666

God

Re: PHP: Bilderupload in MySQL

Wednesday, June 6th 2007, 6:20pm

hmm das würde doch vorraussetzen, dass der user das bild nicht selber hochladen kann, oder?

und das Bild muss in die Datenbank, ist ne vorgabe ;)
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

palme_kex

God

Re: PHP: Bilderupload in MySQL

Wednesday, June 6th 2007, 6:25pm

Doch das kann man ganz normal hochladen, liegt aber in datei Form vor... Und ist eben nicht direkt in der DB gespeichert.

Mal gucken ob mal bilder sooooo einfach in die db packen kannst wie du das gemacht hast... Da bin ich mir noch nen bissel unsicher.
Ich gucke mal hab das selbst auch ncoh nit gemacht.

Edit meint du solltest dir das mal angucken...
Das sieht garnicht so schlecht aus finde ich.

Y0Gi

God

Re: PHP: Bilderupload in MySQL

Wednesday, June 6th 2007, 7:27pm

Ich empfehle dir ebenfalls die Methode, die hochgeladenen Bilder als Dateien statt als BLOBs in der Datenbank abzulegen und diesen als Dateinamen die Benutzer-ID, mit Nullen aufgefüllt, plus Dateiendung zu verpassen, ziemlich genau so wie palme das beschrieben hat. So brauchst du nicht für jede Avatar-Anzeige einen Datenbank-Zugriff, sondern das macht alles der Webserver - und zwar viel schneller, von Caching-Möglichkeiten ganz abgesehen. Zudem kannst du die Avatare als Dateien einfacher sichern und pumpst die Datenbank-Dumps nicht so enorm auf.

Anisachse

God

Re: PHP: Bilderupload in MySQL

Wednesday, June 6th 2007, 8:48pm

wenns ne VORGABE ist dann würd ich mich aber daran halten und die Bilder trotzdem in die DB schreiben...

Martin666

God

Re: PHP: Bilderupload in MySQL

Thursday, June 7th 2007, 2:03am

Source 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
<?php
session_start();
require_once('common.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/url]
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Change Details</title>
</head>

<body>
<?php 
$pic = $_FILES['pic'];

if(file_exists("pics/".$_SESSION['username'].".jpg"){
      echo "File already exists";
      }
else{
      move_uploaded_file($_FILES['pic']['tmp_name'], "pics/".$_SESSION['username'].".jpg");
      echo "Picture uploaded";
      }
?>
Here you can add an Image/Avatar to your account:


<form method="post" action="change.php" />
<table border="0" cellpadding="0" cellspacing="4">

<tr>
<td align="right">Avatar: </td>
<td><input type="file" name="pic" /></td>
</tr>

<tr>
<td><td align="right"><input type="submit" value="Register" /></td></td>
</tr>
</form>

</body>
</html>


Hmm nunja, jetzt hab ich hier die change.php zurechtgepfuscht. Und mein Apache von XAMPP will nicht laufen, sodass ichs mal testen kann, schoise!

Mache es nun doch so, wie palme und y0gi empfohlen haben, die Vorteile liegen auf der Hand.
Das mit file_exists soll irgendwie so werden dass die alte Datei einfach überschrieben wird, abernaja...

desweitern wollte ich eigentlich auch noch überprüfen, ob das bild auch wirklich 100x100 pixel hat und entsprechend skalieren, aber ich glaub das werd ich leben nicht hinbekommen.

ich überlege gradmal wieder ob ich mein studienfach richtig gewählt hab xD
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

Y0Gi

God

Re: PHP: Bilderupload in MySQL

Thursday, June 7th 2007, 2:18pm

Einrückung geht hier derbst in die Binsen, daher ist der Code jetzt hier: http://paste.pocoo.org/show/1563/.

Was den Dateinamen angeht:

Source code

1
$filename = sprintf('user%04d.jpg', $user_id);


Anwendung:

Source code

1
2
upload_picture($_FILES['file'], $filename);
delete_picture($filename);

Eikman

Moderator

Re: PHP: Bilderupload in MySQL

Thursday, June 7th 2007, 3:05pm

Quoted from "Wudel"

Hmm nunja, jetzt hab ich hier die change.php zurechtgepfuscht. Und mein Apache von XAMPP will nicht laufen, sodass ichs mal testen kann, schoise!


Skype an? Mach es aus :) Dann den Apachen starten und du kannst auch wieder Skype anmachen. Skype klaut sich alles an Ports was es kriegen kann. Sehr ekelig.

Anisachse

God

Re: PHP: Bilderupload in MySQL

Thursday, June 7th 2007, 3:14pm

man kann abschalten das skype port 80 klaut ;)

Eikman

Moderator

Re: PHP: Bilderupload in MySQL

Thursday, June 7th 2007, 5:27pm

Woas? Wo? ;D

EDIT: Ach, habs gefunden :)

Martin666

God

Re: PHP: Bilderupload in MySQL

Friday, June 8th 2007, 2:32pm

*hinfällig*
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

Martin666

God

Re: PHP: Bilderupload in MySQL

Friday, June 8th 2007, 9:42pm

Source code

1
echo "<img=\"/pics/".$cin['username'].".jpg\">";


wenn ich das so mache wird das bild nicht angezeigt. auch nicht wenn ich den "/" vor pics lösche.

Und Skype deaktivieren bringt auch nix... hmm hab ich nen trojaner drauf, der nen webserver startet?
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

Y0Gi

God

Re: PHP: Bilderupload in MySQL

Friday, June 8th 2007, 9:45pm

Wenn du den Dateinamen wie in meinem Script gesetzt hast, lässt du so ja auch die führenden Nullen außen vor.

Martin666

God

Re: PHP: Bilderupload in MySQL

Friday, June 8th 2007, 10:03pm

ich wollte die bilder auch nicht nach dem schema 0000xxx.jpg speichern, sondern username.jpg

aber unabhängig davon, wird ein definitiv vorhandenes bild in dem verzeichnis mit der zeile code nicht angezeigt. hmm mal weitersuchen.

edith vermeldet, dass der apache nach einem system neustart und skype beenden nun funktioniert
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

Y0Gi

God

Re: PHP: Bilderupload in MySQL

Saturday, June 9th 2007, 3:09am

Quoted from "Wudel"

ich wollte die bilder auch nicht nach dem schema 0000xxx.jpg speichern, sondern username.jpg

Das bringt gleich mehrere Probleme mit sich: Durch die fehlende Normalisierung/Abstraktion kommt es bei der Änderung eines Benutzernamens zu Inkonsistenten und eine Reaktion ist erforderlich oder der Benutzername kann nicht gewechselt werden (beides uncool). Zudem können Benutzernamen zum Problem werden, wenn sie Zeichen mit in Dateinamen nicht erlaubten Zeichen oder generell Sonderzeichen enthalten (Encoding ist sowieso keine Stärke von PHP, von Unicode mal ganz abgesehen). Auch kann es Probleme mit der Unterscheidung von Groß-/Kleinschreibung geben, die es möglicherweise bei Benutzernamen gibt, im verwendeten Dateisystem aber nicht.

Ein gut gemeinter Rat von mir: Nimm irgendwelche IDs, UIDs, Hashwerte. Aber niemals den Benutzernamen.

Quoted from "Wudel"

aber unabhängig davon, wird ein definitiv vorhandenes bild in dem verzeichnis mit der zeile code nicht angezeigt. hmm mal weitersuchen.

Na, dann stimmt wohl der Pfad ganz einfach nicht oder das Verzeichnis ist gar nicht über das Web zugreifbar.

Martin666

God

Re: PHP: Bilderupload in MySQL

Saturday, June 9th 2007, 3:34am

also das anzeigen in der highscoreliste läuft. ich hatte im

Source code

1
<?php echo "<img src=\"pics/".$cin['username'].".jpg\">"; ?>

nur das "src" hinzugefügt. naja html-syntax halt xD

das verändern des passworts, email und alter funktioniert mittlerweile.

aber der bilderupload an sich will nicht. bekomme leider auch keine fehlermeldung, da ja php... hier nochmal der soweit vorhandene code

http://paste.pocoo.org/show/1567/


könnte es was mit dem übergeben per formular an sich, der POST-variablen "pic" oder evtl was mit dem tmp_name zu tun haben?
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

xx_ElBarto

God

Re: PHP: Bilderupload in MySQL

Saturday, June 9th 2007, 8:07am

pack mal

Source code

1
error_report("E_ALL");

ganz annen anfang, evtl bekommste dann ne fehlermeldung ;)

Martin666

God

Re: PHP: Bilderupload in MySQL

Saturday, June 9th 2007, 11:54am

jau, und zwar dass die funktion error_report unbekannt ist xD
Kyros > Radeon 5750 > Radi AMS 420 > aqualis > Laing DDC

crushcoder

God

Re: PHP: Bilderupload in MySQL

Saturday, June 9th 2007, 12:07pm

heißt ja auch:

Source code

1
error_reporting(E_ALL);

;)
Gott hat die Welt ja nur in sieben Tagen erschaffen können, weil es keine installierte Basis gab.