Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
Tommy_D
Threadersteller
Dabei seit: 04.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 04.05.2006 16:26
Titel Problme beim Speichern in mysql |
|
|
Hallo zusammen,
ich habe ein Poblem beim Speichern von geänderten Datensätzen in mysql aus PHP
Die Function speichert zwei Bilder in verschiedenen Größen und ergänzt einen Datensatz in der Datenbank um den Dateinamen.
Rufe ich die Funktion zum Erstellen des Datensatz auf, funktioniert sie einwandfrei. Rufe ich sie mit gleichen Parametern zum Ändern auf, werden die Bilder gespeichert, ich bekomme auch die Meldung das der Datensatz gespeichert wurde ,ohne Fehlermeldung, ist er aber nicht. War vorher ein Dateiname in dem Feld gespeichert, ist es danach leer.
Wäre sehr dankbar wenn jemand eine Idee hätte woran das liegen kann.
Die Function:
Code: | function uploadBild($letzte_id, $breite, $hoehe, $dateiname, $typ)
{
Global $max_thumb_breite;
Global $max_thumb_hoehe;
Global $max_breite;
Global $max_hoehe;
global $_files;
Global $benutzer;
Global $Pass;
Global $a_table;
Global $k_table;
Global $dbase;
Global $artikel;
//Dateiendung suchen, Extension festlegen
if( "image/pjpeg" == $_FILES['datei']['type'])
$extension = ".jpg";
else $extension = ".gif";
$timestamp = time(); //Datumsvariable von jetzt
$dateiname_neu=$letzte_id.$extension; //Neuen Dateinamen festlegen Galerie_ID.EXT
if($breite<$max_breite) //Falls kleiner als Vergrößerung
$max_breite=$breite;
if($hoehe<$max_hoehe)
$max_hoehe=$hoehe;
if($breite<$max_thumb_breite) //Falls kleiner als Thumbnail
$max_thumb_breite=$breite;
if($hoehe<$max_thumb_hoehe)
$max_thumb_hoehe=$hoehe;
if ($breite>$hoehe) //Querformat
{
$verhaeltnis=$hoehe/$breite;
#Berechnung für Vergrößerung
$hoehe2=intval($max_breite*$verhaeltnis);
$breite2=$max_breite;
#Berechnung für Thumbnail
$hoehe2thumb=intval($max_thumb_breite*$verhaeltnis);
$breite2thumb=$max_thumb_breite;
}
if ($breite<$hoehe) //Hochformat
{
#Berechnung für Vergrößerung
$hoehe2=$max_hoehe;
$verhaeltnis=$hoehe/$breite;
$breite2=intval($hoehe2/$verhaeltnis);
#Berechnung für Thumbnail
$hoehe2thumb=$max_thumb_hoehe;
$breite2thumb=intval($hoehe2thumb/$verhaeltnis);
}
$image_klein = imagecreatetruecolor($breite2thumb,$hoehe2thumb); //Thumbnail
$image_gross = imagecreatetruecolor($breite2,$hoehe2); //Vergrößerung
$image = imagecreatefromjpeg("../images/temp/".$dateiname);
//Tumbnailerstellung
ImageCopyResampled($image_klein, $image, 0,0,0,0,$breite2thumb,$hoehe2thumb,$breite,$hoehe);
imagejpeg($image_klein,"../images/angebot/thumb/$dateiname_neu",50);
//Vergrößerungerstellung
ImageCopyResampled($image_gross, $image, 0,0, 0,0,$breite2,$hoehe2,$breite,$hoehe);
imagejpeg($image_gross,"../images/angebot/$dateiname_neu",50);
$delete="../images/temp/$dateiname";
if(!unlink($delete))
echo "Originalbild konnte nicht gelöscht werden. Bitte Webmaster infomrmieren";
//Eintrag in Datenbankfeld bild mit neuem Dateinamen ändern
echo "-$a_table-<br>-$benutzer-<br>-$Pass-<br>-$dbase-<br>-$letzte_id-<br>-$dateiname_neu-<br>-$breite-<br>-$hoehe-<br>";
$Daten=mysql_connect("localhost", $benutzer, $Pass); //Prüfung ob Name bereits angemeldet
if (!$Daten)
die("Datenbank konnte nicht geöffnet werden, bitte später nochmal versuchen");
mysql_select_db($dbase)
or die ("Datenbank konnte nicht geöffnet werden, bitte später nochmal versuchen");
$sqlab = "update $a_table set bild = '$dateiname_neu' where id = '$letzte_id'";
$ok = mysql_query($sqlab, $Daten) ;
if (!$ok)
echo "Verknüpfung des Bildes mit der Datenbank konnte nicht erfolgreich durchgeführt werden. Bitte wiederholen oder den Webmaster informieren.<br>Fehler:".mysql_error();
else
echo "Neuer Bildeintrag wurde gespeichert. $sqlab";# -$dateiname_neu- $sqlab- $Daten- Fehler:".mysql_error();
mysql_close ($Daten); //Dastenbank schließen
echo "<br><br>Der Artikel <b>$artikel</b> wurde gespeichert<br><br>";
} |
Aufruf mit Code: | uploadBild($letzte_id, $breite, $hoehe, $dateiname, $typ); |
Alle Variablen werden in einer Datei definiert und mit include eingelesen. In der Function werde alle Variablen mit Global definiert.
Irgendwo habe ich einen Fehler. Ich bin schon Tagen am suchen. Ich hoffe jemand hat einen Tip für mich.
Besten Dank im voraus.
Gruß
Tommy_D
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Do 04.05.2006 23:14
Titel
|
|
|
Hast Du das Script mal mit
Code: | error_reporting(E_ALL) |
laufen lassen?
|
|
|
|
|
Anzeige
|
|
|
labrar
Dabei seit: 04.04.2006
Ort: -
Alter: 49
Geschlecht:
|
Verfasst Do 04.05.2006 23:18
Titel
|
|
|
Ich tippe mal auf register_Globals
Versuch mal in der ersten Zeile
Code: | extract($HTTP_POST_VARS);
|
wobei damit das Teil nicht sicherer wird.
Wie sieht denn der Rest vom Script aus?
Zuletzt bearbeitet von labrar am Do 04.05.2006 23:19, insgesamt 1-mal bearbeitet
|
|
|
|
|
Tommy_D
Threadersteller
Dabei seit: 04.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 05.05.2006 07:31
Titel
|
|
|
error_reporting(E_ALL); hat schon gereicht.
ich denke ich sollte mir angewöhnen da überall einzufügen.
Besten Dank für die Unterstützung.
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Fr 05.05.2006 14:41
Titel
|
|
|
Oh mein Gott! Was ist das denn??
Wieso in aller Welt arbeitest du denn da mit so vielen globalen Variablen? Das ist ganz schlechter Stil.
Du solltest versuchen, ohne globale Variablen auszukommen.
Das ist ganz schlechter Programmierstil und in den meisten Fällen überhaupt nicht notwendig.
Wenn es sein muß, dann übergib notfalls eine Variable als Referenz.
Zitat: | $ok = mysql_query($sqlab, $Daten) ; |
Das sieht auch recht unschön aus. Hier solltest du lieber prüfen, ob was schiefgeht und notfalls eine Fehlermeldung ausgeben.
Code: | @mysql_query( $sqlab, $Daten) or die( 'Fehler: ' . mysql_error()' ); |
Zitat: | extract($HTTP_POST_VARS); |
$HTTP_POST_VARS ist veraltet. Das gab es eigentlich nur mal kurz in der ersten PHP4-Version und jetzt ist es nur noch aus Kompatibilitätsgründen mit drin. Man kann sich nicht drauf verlassen, daß bei einem Hoster PHP so konfiguriert ist, daß es diese Arrays gibt.
Hier sollte $_POST verwendet werden. Dieses Array ist autoglobal, verhält sich also ein wenig anders als $HTTP_POST_VARS. Das werden viele aber sicherlich nicht einmal bemerken...
Tja und dann sollten Variablen niemals ungeprüft übernommen werden.
Ich sehe in deinem Script keine Prüfungen. Kann aber sein, daß die woanders stattgefunden haben (?).
Wenn Du Variablen an eine mysql_query() übergibst, dann solltest du z.B. immer mysql_real_escape_string() drauf anwenden, damit man dir keine SQL-Injection unterschummeln kann.
|
|
|
|
|
Tommy_D
Threadersteller
Dabei seit: 04.05.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Sa 06.05.2006 18:25
Titel
|
|
|
Da smit dem Stil ist so eine Sache. Meistens ist mann als Hobbyprogramierer ja froh wenn hinterher alles Läuft. Das mit den Global habe ich übrigens aus einem Buch.
$HTTP_POST_VARS hat man mir zur Fehlersuche epfohlen, hat aber nichts gebracht. Ist nur noch nicht wieder gelöscht
Püfungen füge ich dann ein, wenn der Rest funktioniert. sonst hat man viel Text bei der Fehlersuch zu lesen.
Aber besten Dank für den Tip mit dem Maskieren, Das werde ich gerne übernehmen.
|
|
|
|
|
|
|
|
Ähnliche Themen |
[mysql/php] array speichern
[PHP, MySQL] Fließkommazahlen speichern - how to?
Javascript in Mysql DB speichern
daten von Oracle DB in MySql speichern
mit php login + registrieren und auf mysql db speichern
[PHP + mySQL] Kann Fehler in einer mySQL-Phrase nicht finden
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|