variabele veranderen op een welbepaalde manier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Hans Vereyken

Hans Vereyken

28/01/2008 22:21:00
Quote Anchor link
Hallo iedereen!

Ik ben al een tijdje bezig met php, maar nog steeds niet erg bedreven, ik heb hier enkele tips nodig:
Ik ben voor school een fotoboek aan het maken, ik heb gegevens doorgestuurd gekregen en ze in een mysql databse gezet, ze uitlezen is geen probleem, maar de foto's weergeven bij de juiste persoon is een probleem.
In de gegevens heb ik een stamnummer, de foto's hebben een bestandsnaam die verwant is aan dat stamnummer.
vb: in de database heb ik dit stamnummer: 200727677
de foto heeft deze naam: 0027677-32.jpg
Ik zou het stamnummer op deze manier moeten kunenn vervormen:
van 200727677 naar 27677, dan 0027677 en dan (en hier loop ik vast) 0027677-xx (xx omdat het bij elke foto anders is, er is geen constante te vinden, het probleem is dat ik op deze manier niet kan checken of de foto bestaat, ik doe voor elke foto een file_exists voordat ik hem weergeef).

Ik hoop dat ik duidelijk ben...

Bedankt!
 
PHP hulp

PHP hulp

27/11/2024 06:16:25
 
Frank -

Frank -

28/01/2008 22:24:00
Quote Anchor link
Waarom sla je de correcte bestandsnaam niet op in de database? Dan bestaat het hele probleem toch niet?
 
Jan Koehoorn

Jan Koehoorn

28/01/2008 22:24:00
Quote Anchor link
Quote:
van 200727677 naar 27677, dan 0027677

Je hoeft toch alleen die eerste 2 er af te halen dan?
 
Frank -

Frank -

28/01/2008 22:33:00
Quote Anchor link
De eerste 7 mag er ook nog af, of eigenlijk de eerste 4 karakters (het jaartal?) vervangen door 2 nullen.

Maar dan nog, gewoon de correcte naam opslaan en klaar ben je. Is ook nog eens een fractie sneller.

Offtopic: In PostgreSQL kun je een fraaie sp maken in bv. PL/PERL om de bestanden (de images) te beheren. Hoef je dat niet meer met PHP te doen. Ook het af en toe (automatisch) opschonen kun je dan in zijn geheel in de database regelen, PgAgent doet wonderen.
 
Marc

marc

28/01/2008 22:33:00
Quote Anchor link
Jan Koehoorn schreef op 28.01.2008 22:24:
Quote:
van 200727677 naar 27677, dan 0027677

Je hoeft toch alleen die eerste 2 er af te halen dan?

nee er zit een heel klein verschil
 
Hans Vereyken

Hans Vereyken

28/01/2008 22:41:00
Quote Anchor link
oei, ik was dus niet duidelijk... gewoon de juiste naam opslaan, dat zou betekenen dat ik ongeveer 1000 stamnummers manueel moet aanpassen... ik hoopte op een beter oplossing. Maar die eerste 4 getallen eraf en vervangen door twee nullen zal wel lukken, maar dan die -xx erachter, en dan checken of die foto bestaat, daar gaat het fout.
 
Jan Koehoorn

Jan Koehoorn

28/01/2008 22:42:00
Quote Anchor link
Hoe weet je welke waarde er in xx moet komen?
 
Frank -

Frank -

28/01/2008 22:42:00
Quote Anchor link
Handmatig? Je kunt toch een slim scriptje schrijven die dat voor je doet? Automatisering heet dat... ;)
 
Hans Vereyken

Hans Vereyken

28/01/2008 23:47:00
Quote Anchor link
ok, bij het schrijven van dat slim scriptje heb ik dus hulp nodig, dat kan ik niet, want je weet nie welke waarde er in xx moet komen, dat is nu net het punt...
 
Jan Koehoorn

Jan Koehoorn

28/01/2008 23:57:00
Quote Anchor link
Okee, maar op een gegeven moment, ergens in je script, moet je toch een waarde aan de xx toekennen?
 
- SanThe -

- SanThe -

29/01/2008 00:11:00
Quote Anchor link
Zij er per 'stam' meerdere xx-jes of is dat er altijd maar 1?
 
Hans Vereyken

Hans Vereyken

29/01/2008 00:11:00
Quote Anchor link
Ja, maar her script moet opzoeken wat die is.
Als ik de foto wil terugvinden via de verkenner zoek ik op 0027677, en dan zie ik dat de -xx -32 is. maar een andere manier is er niet, maar hoe doe ik dat met php.
nee er is geen verband tussen de stam en de xx-jes.
Gewijzigd op 01/01/1970 01:00:00 door Hans Vereyken
 
Joren de Wit

Joren de Wit

29/01/2008 00:28:00
Quote Anchor link
Waarom schrijf je niet een scriptje dat alle bestandsnamen aan een stamnummer in de database koppelt?

Dus je leest alle bestanden uit de map met foto's uit en achterhaalt per foto via de bestandsnaam het stamnummer. Vervolgens zet je de bestandsnaam bij het bijbehorende stamnummer in de database.

Als je die helemaal doorlopen hebt, kun je heel eenvoudig achterhalen van welke stamnummers nog geen foto's zijn. In dat geval zal er immers geen bestandsnaam aan het stamnummer gekoppeld zijn.
 
Hans Vereyken

Hans Vereyken

29/01/2008 15:23:00
Quote Anchor link
dus als ik het goed begrepen heb zou dit moeten werken:
eerst alle foto-namen uitlezen, met een script vergelijken met het stamnummer en bij in de database zetten. Bij het genereren van het fotoboek die nieuwe nummers gebruiken.
Dat moet lukken, ik ga aan de slag, bedankt voor de tip.
Ik heb toch twee bedenkingen:
-er zijn meer foto's dan records in de database.
-Ik weet dat sommige records geen bijbehorende foto hebben.
Gaan deze twee dingen roet in het eten gooien of kan dat geprogrammeerd worden?
 
Joren de Wit

Joren de Wit

29/01/2008 15:27:00
Quote Anchor link
Meer foto's dan records? Wat moet je met de overige foto's dan? Als er geen matchend record in de database voorkomt zou je ofwel een record aan kunnen maken ofwel de foto kunnen verwijderen.

Records zonder foto: tja, dan zul je later toch voor elk record zonder foto nog een foto moeten gaan uploaden en moeten koppelen.
 
Hans Vereyken

Hans Vereyken

29/01/2008 17:05:00
Quote Anchor link
Om tegelijk ook wat bij te leren heb ik nu dit scriptje geschreven, als ik hier op de goede plaatsen een UPDATE query doe dan zou het moeten werken. Ik heb een probleem met de 3de manier van het vergelijken van de fotonaam met de stamnummer, de eerste twee gaan perfect.
Hier is het scriptje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
include("config.php");
if ($handle = opendir("$fotos_studenten")){
    echo "Logboek:<br>";
    while (false!==($foto=readdir($handle))){
        $foto1=substr("$foto",0,9);
        dbLogin();
        $query="SELECT $kolom_id,$kolom_stamnummer FROM $tabel WHERE $kolom_stamnummer='$foto1'";
        $result=mysql_query($query);
        $num=mysql_numrows($result);
        mysql_close();
        if($num=="1"){
            echo "<strong>Gevonden</strong> (manier 1)<br>";
        }
else if($num>>"1"){
            echo "<strong>Meer als één gevonden</strong> (manier 1)<br>
            \$foto1: $foto1<br>
            \$stamnummer: "
;
            $i=0;
            while ($i < $num) {
                $stamnummer=mysql_result($result,$i,$kolom_stamnummer);
                echo " - $stamnummer";
                $i++;
            }

            echo "<br>";        
        }
else{
            $foto2=substr("$foto",4,5);
            dbLogin();
            $query="SELECT $kolom_id,$kolom_stamnummer FROM $tabel WHERE $kolom_stamnummer='$foto2'";
            $result=mysql_query($query);
            $num=mysql_numrows($result);
            mysql_close();
            if($num=="1"){
                echo "<strong>Gevonden</strong> (manier 2)<br>";
            }
else if($num>>"1"){
                echo "<strong>Meer als één gevonden</strong> (manier 2)<br>
                \$foto2: $foto2<br>
                \$stamnummer: "
;
                $i=0;
                while ($i < $num) {
                    $stamnummer=mysql_result($result,$i,$kolom_stamnummer);
                    echo " - $stamnummer";
                    $i++;
                }

                echo "<br>";        
            }
else{
                $foto3=substr("$foto",2,5);
                dbLogin();
                $query="SELECT $kolom_id,$kolom_stamnummer FROM $tabel WHERE $kolom_stamnummer='$foto3-%'";
                $result=mysql_query($query);
                $num=mysql_numrows($result);
                mysql_close();
                if($num=="1"){
                    echo "<strong>Gevonden</strong> (manier 3)<br>";
                }
else if($num>>"1"){
                    echo "<strong>Meer als één gevonden</strong> (manier 3)<br>
                    \$foto3: $foto3<br>
                    \$stamnummer: "
;
                    $i=0;
                    while ($i < $num) {
                        $stamnummer=mysql_result($result,$i,$kolom_stamnummer);
                        echo " - $stamnummer";
                        $i++;
                    }

                    echo "<br>";        
                }
else{
                    echo "Geen foto<br>
                    $query<br>"
;
                }
            }            
        }
    }

    closedir($handle);
}


?>

Dus zoals gezegd, bij de derde loopt het fout, de substr doet zijn werk goed, het lijkt fout te lopen bij de wildcard in de query...
Gewijzigd op 01/01/1970 01:00:00 door Hans Vereyken
 
Joren de Wit

Joren de Wit

29/01/2008 17:16:00
Quote Anchor link
Als je de % als wildcard wilt gebruiken, zul je wel LIKE moeten gebruiken ipv =.

Verder doe je er verstandig aan om je variabelen buiten quotes te halen en je queries netjes uit te schrijven. Dat komt het overzicht wel ten goede:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$query
=
    "SELECT
        "
.$kolom_id.",
        "
.$kolom_stamnummer."
    FROM
        "
.$tabel."
    WHERE
        "
.$kolom_stamnummer". = '".$foto1."'
"
;
?>

Verder ben ik er ook helemaal geen voorstander van om tabel en kolomnamen in variabelen te zetten. Daar is namelijk helemaal niets variabels aan. Als je je datamodel eenmaal bepaald hebt, ligt dat vast en zal er niet snel meer iets aan veranderen.

Je zorgt er nu alleen maar voor dat je code veel onoverzichtelijker wordt en het debuggen van je queries dus wel eens een ramp zou kunnen worden.
 
Frank -

Frank -

29/01/2008 17:22:00
Quote Anchor link
$tabel... En waarom zou een tabel variabel zijn? Dat is zelden een goede aanpak, levert vrijwel altijd problemen op. Zeker in combinatie met variabele kolomnamen. Wil je dat gebruiken, maak dan een functie die voor jou correcte variabele queries aanmaakt, dan bestaat er een kans dat het goed gaat.
 
Hans Vereyken

Hans Vereyken

29/01/2008 20:36:00
Quote Anchor link
Ok, ik heb nu LIKE gebruikt, nu werkt het helemaal zoals het moet, op één ding na, ik krijg vaak deze foutmelding:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10048) in J:\webServer\fotoboek_lemmens\config.php on line 11

Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to MySQL server on 'localhost' (10048) in J:\webServer\fotoboek_lemmens\config.php on line 12

Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in J:\webServer\fotoboek_lemmens\config.php on line 12

Heeft dit ermee te maken dat hij overbelast is?
Is er een manier om het script te vertragen, want ik vrees dat als ik nu de UPDATE query's erbij doe dat alles in de soep draait.

Ik gebruik voor de tabelnaam en kolomnamen variabelen omdat ik dit volgend jaar nog eens moet doen. Ik heb alle variabelen bepaald in config.php. Vorig jaar heb ik dit ook gedaan, in Acces, toen moest het in boekvorm, vanaf nu in websitevorm. Uit de ervaring van vorig jaar en de vergelijking met de gegevens van dit jaar zie ik dat de gegevens steeds in andere formaten met lichtjes andere namen. Als ik variabelen gebruik moet ik volgend jaar enkel config.php aanpassen, het script voor de fotos draaien en alles staat meteen online.
 
Frank -

Frank -

29/01/2008 21:00:00
Quote Anchor link
Hoevaak maak jij een verbinding in je script? Normaal doe je dat 1x en dan ben je klaar. Daarmee kun je dan nooit de boel overbelasten, tenzij andere users ook wat op de database aan het uitspoken zijn.

Probeer eens te achterhalen wat er nu precies fout gaat, duik ook even in de logfiles van de database. Mocht je daar bijkunnen komen.
 
Hans Vereyken

Hans Vereyken

30/01/2008 14:20:00
Quote Anchor link
Ik maak drie keer een verbinding.
dit script zal wel lukken, op voorwaarde dat er geen dubbels in de database zitten... en dat is nu net wel het geval. Ik ben nu op zoek naar een om dubbele records samen te voegen, want ze verschillen telkens in één van de gegevens. vb (gegevens zijn aangepast heb een aantal karakters vervangen door x):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
naam, voornaam, geboortedatum, adres, stamnummer, email, klasgroep
Vexxxxen, Hans, x7.0x.19xx, Doexxxxdxn x, [email protected], 3I
Vexxxxen, Hans, x7.0x.19xx, Doexxxxdxn x, [email protected], 3I
Vexxxxen, Hans, x7.0x.19xx, Doexxxxdxn x, [email protected], 3I ILO
Vexxxxen, Hans, x7.0x.19xx, , [email protected], 3I ILO


Dit zou moeten worden samengevoegd tot:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Vexxxxen, Hans, x7.0x.19xx, Doexxxxdxn x, [email protected]@arxxxxxxs.be, 3I-3I ILO


Het is inderdaad zo dat bij de laatste record de adresgegevens er niet bij zijn. Ik moet dus een script hebben dat kijkt of de stamnummer van twee records hetzelfde is, zoja de gegevens samenvoegen waar nodig. Of is hier geen script nodig en kan dat gebeuren tijdens het uitlezen van de databse?
Gewijzigd op 01/01/1970 01:00:00 door Hans Vereyken
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.