• 26.08.2025, 19:06
  • S’inscrire
  • Connexion
  • Vous n’êtes pas connecté.

 

Martin666

God

PHP: Bilderupload in MySQL

mercredi 6 juin 2007, 17:54

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

Code source

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


im php teil steht unter anderem

Code source

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 :/

Code source

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

mercredi 6 juin 2007, 18:09

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...

Code source

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


Den Link zum bild bekommste dann einfach mit

Code source

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

mercredi 6 juin 2007, 18:20

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

mercredi 6 juin 2007, 18:25

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

mercredi 6 juin 2007, 19:27

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

mercredi 6 juin 2007, 20:48

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

jeudi 7 juin 2007, 02:03

Code source

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

jeudi 7 juin 2007, 14:18

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

Was den Dateinamen angeht:

Code source

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


Anwendung:

Code source

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

Eikman

Moderator

Re: PHP: Bilderupload in MySQL

jeudi 7 juin 2007, 15:05

Citation de "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

jeudi 7 juin 2007, 15:14

man kann abschalten das skype port 80 klaut ;)

Eikman

Moderator

Re: PHP: Bilderupload in MySQL

jeudi 7 juin 2007, 17:27

Woas? Wo? ;D

EDIT: Ach, habs gefunden :)

Martin666

God

Re: PHP: Bilderupload in MySQL

vendredi 8 juin 2007, 14:32

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

Martin666

God

Re: PHP: Bilderupload in MySQL

vendredi 8 juin 2007, 21:42

Code source

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

vendredi 8 juin 2007, 21:45

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

vendredi 8 juin 2007, 22:03

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

samedi 9 juin 2007, 03:09

Citation de "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.

Citation de "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

samedi 9 juin 2007, 03:34

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

Code source

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

samedi 9 juin 2007, 08:07

pack mal

Code source

1
error_report("E_ALL");

ganz annen anfang, evtl bekommste dann ne fehlermeldung ;)

Martin666

God

Re: PHP: Bilderupload in MySQL

samedi 9 juin 2007, 11:54

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

samedi 9 juin 2007, 12:07

heißt ja auch:

Code source

1
error_reporting(E_ALL);

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