You are not logged in.

wcf.regNote.message

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

1

Tuesday, July 19th 2005, 9:39pm

zufallsbild in php über mysql

erstmal ein hallo hier an alle.
ich bin mir ja fast sicher das ich hier gehilft werde ;)

als erstes mal hab ich hier schon ein script gesehen was Prometheus mal geschrieben hat wegen zufallsbilder nur irgendwie find ich das nicht mehr wieder hier.

nun zu meinem problem.
ich will ein zufallsbild ausgeben lassen mit mt_srand und mt_rand soweit so gut

das ganze soll aber jetzt über eine sql tabelle laufen bb1_fotovoting/bilder

die bilder sollen später dann per upload in einen ordner gespeichert werden wbb2/fotovoting

nur irgendwie bekomm ich das nicht hin, dass man mit einer sql abfrage auf den ordner zugreift und ein zufallsbild angzeigt wird. da ich auch noch nicht ganz solange mit php rum mache (was für ein wort:mrgreen: ). wär ich für jede hilfe dankbar

Günny

Prometheus

Administrator

Posts: 3,278

  • Send private message

2

Tuesday, July 19th 2005, 9:59pm

ich muss mir das erst mal im kopf etwas sortieren :D

du willst also bilder in einem ordner speichern und die informationen über das bild stehen in einer tabelle. dann willst du per zufall ein bild ausgeben lassen.

in der tabelle sollte der pfad zum bild sowie der bildname und die dateiendung stehen. außerdem sollte eine auto incremente id vorhanden sein. dann musst du nur eine zufallszahl zwischen kleinster id und größter id generieren lassen und den entsprechenden datenbankeintrag dazu aufrufen. dort hast du dann pfad+dateiname+dateiendung und übergibst das ganze dann in deine ausgabe z.b. per einfachem imagetag.

oder war das was anderes was du wissen wolltest?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

3

Tuesday, July 19th 2005, 10:09pm

ja genau das meinte ich :)

das mit der auto incremente id hab ich angelegt in der sql
(bin mir nur grad nicht sicher ob es PRIMARY oder index sein muß)

tabelle wo das bild ausgeben werden soll in der sql heißt bilder

Prometheus

Administrator

Posts: 3,278

  • Send private message

4

Tuesday, July 19th 2005, 10:14pm

ok ... war deine frage somit beantwortet oder weißt du nicht genau wie man das realisiert?
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

5

Tuesday, July 19th 2005, 10:17pm

wenn du nen code dafür hättest, wär ich dir sehr dankbar

Prometheus

Administrator

Posts: 3,278

  • Send private message

6

Tuesday, July 19th 2005, 10:39pm

für jetzt das komplette teil fertig zu machen hab ich heute nicht mehr so die nerven. bin erst eben von der maloche gekommen. ich geb dir aber schonmal paar code schnipsel vielleicht genügt das ja ansonsten schaun wir morgen mal.

max id ermitteln:
$result = $db->query_first("SELECT count(*) FROM bb".$n."_bilder");
$minid = 1;
$maxid = $result['0'];

jetzt zufallszahl generieren zwischen $minid und $maxid

entsprechendes bild aufrufen:
$result = $db->query("SELECT * FROM bb".$n."_bilder WHERE id = '".$zufallszahl."'");
if ($tmpbild=$db->fetch_array($result)) {
$ausgabebild = "$tmpbild['pfad']$tmpbild['dateiname']$tmpbild['dateiendung']";
}

in deinem template jetzt an der stelle wo das bild ausgegeben werden soll nen image tag rein
<img src="$ausgabebild" border="0" .../>

und schon hast du an der stelle dein zufallsbild welches zu aus der db geholt hast. dein upload skript muss dann entsprechend beim hochladen von dem bild auch die bilddaten so in die tabelle schreiben.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

7

Tuesday, July 19th 2005, 10:44pm

super vielen dank...werd das mal ausprobieren und mich wieder melden....
danke dir nochmal dafür

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

8

Wednesday, July 20th 2005, 10:19pm

so...hab da jetzt mal was gemacht, aber irgendwie funzt das nicht so richtig mit dem anzeigen...

uplaod der bilder funzt und wird auch in der DB angezeigt, bilder liegen auch in dem ordner wo sie hin sollen, nur mit der ausgabe klappt das nicht so richtig.... 8o

PHP Source code

1
2
3
4
5
6
7
8
9
10
$result $db->query_first("SELECT count(*) FROM bb".$n."_fotovoting_bilder");
$minid 1;
$maxid $result['0'];
mt_srand((double)microtime()*1000000);
$bilder mt_rand(0,count($ausgabebild)-1);
$result $db->query("SELECT * FROM bb".$n."_fotovoting_bilder WHERE bilderid = '".$zufallszahl."'");
if ($_FILES $db->fetch_array($result)) {
$ausgabebild ="./fotovoting/".$_FILES['bilder']['name'];

}

Prometheus

Administrator

Posts: 3,278

  • Send private message

9

Wednesday, July 20th 2005, 10:58pm

jo also ich würd sagen schau dir mal deine variablen an. da hast du bisl was durcheinander gebracht :)

PHP Source code

1
2
3
4
5
6
7
8
9
$result $db->query_first("SELECT count(*) FROM bb".$n."_fotovoting_bilder");
$minid 1;
$maxid $result['0'];
mt_srand((double)microtime()*1000000);
$zufallszahl mt_rand($minid,$maxid);
$result $db->query("SELECT * FROM bb".$n."_fotovoting_bilder WHERE bilderid = '".$zufallszahl."'");
if ($bilder $db->fetch_array($result)) {
$ausgabebild ="./fotovoting/$bilder[bildname]".".".$bilder[dateiendung];
}


dabei musst du noch die variablen $bilder[bildname] und $bilder[dateiendung] entsprechend anpassen so wie du das in deiner db stehen hast. zur not poste mal den aufbau der tabelle "bb1_fotovoting_bilder" dann seh ich was da vorhanden ist.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

10

Wednesday, July 20th 2005, 11:10pm

hier mal die export tabelle

Quoted

DROP TABLE IF EXISTS `bb1_fotovoting_bilder`;
CREATE TABLE `bb1_fotovoting_bilder` (
`bilderid` int(11) NOT NULL auto_increment,
`bilder` varchar(100) NOT NULL default '0',
`bild_name` varchar(100) NOT NULL default '0',
`comment` varchar(255) NOT NULL default '0',
KEY `bilderid` (`bilderid`)
) TYPE=MyISAM AUTO_INCREMENT=17 ;

Prometheus

Administrator

Posts: 3,278

  • Send private message

11

Wednesday, July 20th 2005, 11:43pm

hatte sowieso noch nen kleinen fehler drin bei mir ... versuch das mal so jetzt.

PHP Source code

1
2
3
4
5
6
7
8
9
$result $db->query_first("SELECT count(*) FROM bb".$n."_fotovoting_bilder");
$minid 1;
$maxid $result['0'];
mt_srand((double)microtime()*1000000);
$zufallszahl mt_rand($minid,$maxid);
$result $db->query("SELECT * FROM bb".$n."_fotovoting_bilder WHERE bilderid = '".$zufallszahl."'");
if ($bilder $db->fetch_array($result)) {
$ausgabebild ="./fotovoting/$bilder[bild_name]";
}


ich denke in bild_name steht der dateiname drin ansonsten musst du das noch anpassen. der dateiname muss auf jeden fall in der tabelle stehen auch für die anderen ausgaben.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wenqu

Beginner

Posts: 17

  • Send private message

12

Wednesday, July 20th 2005, 11:49pm

Habe da gerade noch eine Frage bezüglich MySQL
Für was steht der befehl SELECT --->count<---?
Kenne nur SELECT.

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

13

Thursday, July 21st 2005, 12:09am

wunderbar...danke dir..

letzte zeile mußte ich noch ein wenig abändern und nun kann man auch die bilder sehen ;)

PHP Source code

1
$ausgabebild ="/$bilder[bilder]";

Prometheus

Administrator

Posts: 3,278

  • Send private message

14

Thursday, July 21st 2005, 12:26am

das SELECT count(*) heißt es wird gezählt (engl. count = zählen)

das heißt frei übersetzt...
"Selektiere mir die Tabelle xxx und zähle die anzahl der einträge"
das ganze wird in ein array geschrieben wobei das array 0 immer die anzahl der einträge enthällt.

wenn du z.b. bei deinen bilder unterscheiden würdest in schwarzweiß und farb bilder könntest du folgendermaßen ermitteln wieviele farbbilder vorhanden sind...

$farbbilder = $db->query_first("SELECT count(*) FROM bb".$n."_voting_bilder WHERE bildtyp = 'farbbild'");

damit würde er also zählen wieviele bilder des typs farbbild vorhanden sind und würde dir die anzahl wieder in $farbbilder[0] ablegen.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Snoopy

Trainee

Posts: 57

  • Send private message

15

Friday, July 22nd 2005, 7:23am

Warum nutzt Ihr nicht den RAND Befehl direkt in der SQL-Abfrage ?
Ist nen bisl zu aufwendig so wie Du es beschreibst.

Erst die Einträge zählen - dann nen RAND-Wert ermitteln und dann DB-Abfrage !

Snoopy

Takada

Trainee

Posts: 111

Location: Düsseldorf, NRW

  • Send private message

16

Friday, July 22nd 2005, 8:40am

count ist ein zusatzbefehl...
damit kannst du zeilen, gruppen etc zählen.

einfach mal nach googlen

*narf ignoriert diesen post*
Da würgte ich eine Klapperschlang` bis ihre Klappe schlapper klang.

:P

This post has been edited 1 times, last edit by "Takada" (Jul 22nd 2005, 8:44am)


Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

17

Friday, July 22nd 2005, 3:17pm

brauche nochmal nen rat/hilfe
und zwar habe ich ja das uploadscript, was eigentlich auch funktioniert nur ich hab nen problem damit, das sobald ich dieses script aufrufe schon nen datenbank eintrag gemacht wird ohne das ich irgendwelche daten eingegeben habe, wie soll es auch anders sein alles felder in der datenbank sind leer bis auf das feld wo die id drin ist.
wenn ich dann alle felder ausgefüllt habe und auf senden klicke ist alles korrekt und er legt einen neuen datenbank eintrag an plus eben diesen leeren
hier mal mein script

PHP 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
<?php
$filename 'fotovoting_upl.php';

require('./global.php');
if (!ini_get('register_globals')) { //globals = OFF ??
        $types_to_register = array('GET','POST','COOKIE','SESSION','SERVER');
        foreach ($types_to_register as $type){
            if (@count(${'HTTP_' $type '_VARS'}) > 0){
                extract(${'HTTP_' $type '_VARS'}, EXTR_OVERWRITE);
            }
        }
    }
$lang->load('FOTOVOTING');
//if (!$wbbuserdata['can_fotovoting_bild_upload']) access_error();
    if($action=="add"){
    $uploaddir "./fotovoting/" ;
    
    if (move_uploaded_file($_FILES['bilder']['tmp_name'], $uploaddir $_FILES['bilder']['name'])) {
          $ausgabebild ="fotovoting/".$_FILES['bilder']['name'];
    } else {
           $ausgabebild="";
    }
}

$db->query("INSERT INTO bb".$n."_fotovoting_bilder SET bild_name='".addslashes($bild_name)."',comment='".addslashes($comment)."',bilder='".$ausgabebild."'"); 

 

    eval("\$tpl->output(\"".$tpl->get("fotovoting_upl")."\");");

?>

This post has been edited 1 times, last edit by "Günny" (Jul 22nd 2005, 3:19pm)


Prometheus

Administrator

Posts: 3,278

  • Send private message

18

Friday, July 22nd 2005, 3:33pm

snoopy hat recht mit RAND spart man sich eine sql abfrage und das skript ist schneller :)

PHP Source code

1
2
3
4
$result $db->query("SELECT * FROM bb".$n."_fotovoting_bilder ORDER BY RAND() LIMIT 1");
if ($bild $db->fetch_array($result)) {
$ausgabebild ="./fotovoting/$bild[bild_name]";
}


das macht das gleiche wie das vorher und kommt mit einer einzigen db abfrage klar.

zu deiner frage wegen dem upload. auf den ersten blick sehe ich absolut keine stelle wo da schon vorher nen db eintag erzeugt wird. oder rufst du dieses php skript auf um erstmal die maske zu bekommen für das upload? wenn ja mach um den ganzen prozess mit dem datei hochschieben und db eintrag erzeugen ein if ($action="save") und in deinem formular machst du ein <input type="hidden" name="action" value="save" /> wodurch beim absenden die variable action mit save gesetzt ist und erst nach dem absenden somit auch die prozedur für den db eintrag und die datei läuft.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Günny

Trainee

  • "Günny" started this thread

Posts: 93

Location: Hessen

  • Send private message

19

Friday, July 22nd 2005, 3:54pm

ok das mit dem rand, hab ich geändert und läuft soweit auch sehr gut...

leider hat das mit dem if ($action="save") nicht geholfen...
ist immer noch so

das upload script, läuft als eigenständige php mit einem eigenständigen tpl dazu

Prometheus

Administrator

Posts: 3,278

  • Send private message

20

Friday, July 22nd 2005, 4:12pm

ok die frage ist nun wie das ganze komplett aussieht. irgendwo hast du ja nen link "upload" oder ähnliches. wenn du da drauf klickst wird ein php skript aufgerufen und in diesem wiederum dein formular aus einem template heraus evaluiert. poste mal den inhalt des php skripts und des templates und am besten dann auch gleich von dem php skript welches aus dem formular heraus aufgerufen wird. irgendwo muss da was klemmen bei.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

wcf.user.socialbookmarks.titel