2 vraagjes/probleempjes waar ik niet uit kom.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels Hermans

Niels Hermans

03/03/2011 09:20:16
Quote Anchor link
Goedemorgen dames en heren,

Ik lees al een tijdje mee hier op phphulp omdat ik het interessant vind, maar nu heb ik zelf ook hulp nodig.

Ik ben voor mijn stage een simpel contactsysteem aan het maken. Nu loop ik na lang pielen nog steeds tegen de volgende 2 problemen aan.

1. Als ik de gegevens update van een contact maakt hij toch nog steeds een nieuw id aan. Wat is hier mis? heb er me gister kapot op gekeken.

2. Ik wil controleren of een foto geupdate word en zo nee, de oude foto behouden word. Het lukt me om een nieuwe foto te plaatsen, maar als ik geen foto invul pakt hij niet automatisch de oude. Wat is hiervoor de beste manier, ik heb niet echt een goed idee hoe ik de 2 kan vergelijken etc.?

Hieronder het verwerkscript dat ik gemaakt heb. Het formulier dat hiervoor hangt, haalt alle huidige gegevens uit de database op, plaatst ze terug in het formulier zodat deze aangepast kunnen worden en dan word het verzonden naar het onderstaande script. Het is niet heel geweldig, maar dat word met de tijd wel beter.

Het formulier:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

include "header.php";  

// upload map
$uploaddir = "uploads/";

$id = $_GET['id'];

// haal huidige foto op om dadelijk te vergelijken of er een nieuwe foto is en anders deze bewaard moet blijven
$data = mysql_query("SELECT foto FROM contact WHERE id='$id' ") or die(mysql_error());  
while($info = mysql_fetch_array( $data )) {
    $foto2 = $info['foto'];
}

    
// Zet alle post variabelen naar vaste variablen

// persoonsgegevens

$p_voorletters = $_POST['p_voorletters'];
$p_voornaam = $_POST['p_voornaam'];
$p_achternaam = $_POST['p_achternaam'];
$p_geslacht = $_POST['p_geslacht'];
$p_email_1 = $_POST['p_email_1'];
$p_email_2 = $_POST['p_email_2'];
$p_adres = $_POST['p_adres'];
$p_postcode = $_POST['p_postcode'];
$p_plaats = $_POST['p_plaats'];
$p_telefoon_1 = $_POST['p_telefoon_1'];
$p_telefoon_2 = $_POST['p_telefoon_2'];
$p_telefoon_3 = $_POST['p_telefoon_3'];
$p_fax = $_POST['p_fax'];
$p_beschrijving = $_POST['p_beschrijving'];

// bedrijfsgegevens
$b_bedrijfsnaam = $_POST['b_bedrijfsnaam'];
$b_adres = $_POST['b_adres'];
$b_plaats = $_POST['b_plaats'];
$b_postcode = $_POST['b_postcode'];
$b_email_1 = $_POST['b_email_1'];
$b_email_2 = $_POST['b_email_2'];
$b_telefoon_1 = $_POST['b_telefoon_1'];
$b_telefoon_2 = $_POST['b_telefoon_2'];
$b_telefoon_3 = $_POST['b_telefoon_3'];
$b_fax = $_POST['b_fax'];
$b_kvk = $_POST['b_kvk'];
$b_btw = $_POST['b_btw'];
$b_rekeningnummer = $_POST['b_rekeningnummer'];
$b_beschrijving = $_POST['b_beschrijving'];

$foto = $_FILES["foto"]["name"];

// kijk of er een nieuwe foto is ja of nee
if(empty($foto) == false){
    // Verplaats het bestand
move_uploaded_file($_FILES["foto"]["tmp_name"],$uploaddir.$_FILES["foto"]["name"]);
    // plaats deze in variabele
$foto = $_FILES["foto"]["name"];
}
else{
    // als er geen nieuwe foto is blijft deze hetzelfde.
$foto = $foto2;
}


        
// zet alle gegevens in de databse

mysql_query("

UPDATE contact

SET
p_voorletters='$p_voorletters',
p_voornaam='$p_voornaam',
p_achternaam='$p_achternaam',
p_geslacht='$p_geslacht',
p_email_1='$p_email_1',
p_email_2='$p_email_2',
p_adres='$p_adres',
p_postcode='$p_postcode',
p_plaats='$p_plaats',
p_telefoon_1='$p_telefoon_1',
p_telefoon_2='$p_telefoon_2',
p_telefoon_3='$p_telefoon_3',
p_fax='$p_fax',
p_beschrijving='$p_beschrijving',

foto='$foto',

b_bedrijfsnaam='$b_bedrijfsnaam',
b_adres='$b_adres',
b_plaats='$b_plaats',
b_postcode='$b_postcode',
b_email_1='$b_email_1',
b_email_2='$b_email_2',
b_telefoon_1='$b_telefoon_1',
b_telefoon_2='$b_telefoon_2',
b_telefoon_3='$b_telefoon_3',
b_fax='$b_fax',
b_kvk='$b_kvk',
b_btw='$b_btw',
b_rekeningnummer='$b_rekeningnummer',
b_beschrijving='$b_beschrijving'

WHERE id='$id'"

);

?>

<div id="content">
    <div id="columnA">
        <h2>Contact Bewerken</h2>
        <p>Uw contact is toegevoegd aan de database.</p>
<p><a href="contact_toeveogen.php" target="_self">Klik Hier</a> om nog een contact aan te maken</p>
<p><a href="index.php" target="_self">Klink Hier</a> om terug te gaan naar het hoofdmenu<br />
</div>
    
</div>

<?php

include "footer.php";
?>
Gewijzigd op 03/03/2011 09:21:51 door Niels Hermans
 
PHP hulp

PHP hulp

03/12/2021 07:55:41
 
Tikkes C

Tikkes C

03/03/2011 09:38:35
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$data
= mysql_query("SELECT foto FROM contact WHERE id='$id' ") or die(mysql_error());
?>


zet hiet je '$id' buiten de string --> ". $id ." (die ' ' zijn niet nodig, het is een integer)

Maak een errorhandler, or die() is niet goed.

idem voor regels 66 - 103
(strings kan je best nog eens met '' uitbreiden '". $string ."', dit om spaties op te vangen.

check wat de extensie is van het bestand, zoals je het nu hebt kan ik eender wat uploaden.

Het hernoemen van variabelen is ook niet nodig.
 
Yanick de Jong

Yanick de Jong

03/03/2011 10:04:57
Quote Anchor link
Ik zie zosnel niet wat er fout is aan je code. Gebruik je phpmyadmin om je mysql database te bekijken, dan zou je daar kunnen kijken of je SQL string goed is. Als deze goed is weet je dat je het in de code moet gaan zoeken. Succes met zoeken. Ik zoek nog even verder voor je, als ik wat vind dan zal ik het hier weer posten.
 
Niels Hermans

Niels Hermans

03/03/2011 10:21:48
Quote Anchor link
Oke ik ga eens kijken, alvast bedankt voor de tips. Eens kijken of we er vandaag uit kunnen komen.
 
Kris Peeters

Kris Peeters

03/03/2011 11:05:18
Quote Anchor link
Om te beginnen:

Zet je php logica bovenaan.
Zet je html daar onder.

header.php bevat dingen als '<html> ... <body> ... banner? ... menu?', footer.php iets als '</body></html>'; ja?

Er is geen reden om eerst een halve pagina (of zelfs 1 karakter) HTML naar de gebruiker te sturen vooraleer je iets aanpast in de database.

Wanneer je $_POST data verwacht, moet je altijd werken volgens dit geraamte:

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
<?php
// eventueel session_start();
// error reporting instellen


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // hier handel je inserts, updates, cookies zetten, ... af
  // hier komt in principe niets van HTML (Er zijn uitzonderingen).
  
  // je zit nog met actieve POST data.  Om die kwijt te raken, herlaad je de pagina

  header('location: mijn_url.php');
}

else {
  // Hier toon je toon je je formulieren + de rest van je HTML
  echo '<html> ... <body> ... <form action="" method="post"> ... </form> ... </body></html>';
}

?>


Verander aub je script in zo'n locica. Anders zal je blijven problemen krijgen (die wij al kunnen voorspellen).

Daarna kunnen we naar het probleem ten gronde kijken.
Gewijzigd op 03/03/2011 11:06:06 door Kris Peeters
 
Niels Hermans

Niels Hermans

03/03/2011 11:06:05
Quote Anchor link
Edit: @ Kris , ik zal eens kijken wat ik voor je kan doen :)

Oke na nog wat zoeken.
Wanneer er geen nieuwe foto geupload word, gaan blijkbaar de gegevens in variabele $foto of $foto2 verloren, want alles behalve de foto filename komt in de datbase te staan.

En een vraagje, als je "id" op auto increment staat. Zou deze dan ook bij een update een nieuw id aanmaken? Niet toch?
Gewijzigd op 03/03/2011 11:10:14 door Niels Hermans
 
Kris Peeters

Kris Peeters

03/03/2011 11:14:16
Quote Anchor link
Niels Hermans op 03/03/2011 11:06:05:
als je "id" op auto increment staat. Zou deze dan ook bij een update een nieuw id aanmaken?


Dan wordt er inderdaad geen id aangepast.

Dat is uiteraard essentieel. Wat een id precies is, maakt weinig uit, zolang ze eeuwig en altijd het zelfde blijft en uniek is.
 
Niels Hermans

Niels Hermans

03/03/2011 11:25:11
Quote Anchor link
Quote:
Dan wordt er inderdaad geen id aangepast.

Dat is uiteraard essentieel. Wat een id precies is, maakt weinig uit, zolang ze eeuwig en altijd het zelfde blijft en uniek is.


Dan snap ik al helemaal niet waarom er elke keer bij een update een nieuw id word aangemaakt. ( en dus een compleet nieuwe entry in de database )

En de programeerstructuur, voordat ik dan deze problemen kan tackelen, zou ik mn complete script moeten herindelen en herzien, ik zal er in de toekomst rekening mee houden, maar zou het fijn vinden als ik er nu al mee geholpen word om te kijken wat het probleem is. Dan kan ik in de toekomst de boel gaan herzien.
Gewijzigd op 03/03/2011 11:27:29 door Niels Hermans
 
Ocirina Ocirina

Ocirina Ocirina

03/03/2011 12:15:47
Quote Anchor link
Ik weet niet of je dit script intern draait, maar het is lek. (mysql injectie)
Ik zal eens even kijken naar script. Mischien kan ik helpen en zoals Kris zei veranderen.

Edit: Ik hebt het een en ander aangepast.
Ik zit op school dus, heb geen codewrite bij de hand. Mischien zit er een foutje in..
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php

include "header.php";  

// upload map
$uploaddir = "uploads/";

$id = $_GET['id'];

// haal huidige foto op om dadelijk te vergelijken of er een nieuwe foto is en anders deze bewaard moet blijven

$data = mysql_query("SELECT foto FROM contact WHERE id='". $id ."' ");  
$info = mysql_fetch_array( $data );

if($info > 1) // Als er meer dan één foto is..
{
    while($info)
    {

        $foto = $info['foto'];
    }
}

else    // Geen fotos? Load foto up.
{
                        // Verplaats het bestand
    move_uploaded_file($_FILES["foto"]["tmp_name"],$uploaddir.$_FILES["foto"]["name"]);

                        // plaats deze in variabele
    $foto = $_FILES["foto"]["name"];
}

    
/*
 Zet alle post variabelen gewon in $_post['...']; en niet zo $iets = $_post['iets'];!!!!!-----   DIRECT IN database
 persoonsgegevens (Dit was een hele lijst, verwerkt naar: --> p_voorletters    ='". $_POST['p_voorletters'] ."', etc etc...)
 bedrijfsgegevens(Hier geldt precies hetzelfde.)
---------------------------LET OP!!!!-----------------------------
 Ik heb nu gewoon post gebruikt, word deze pagina openbaar, GEBRUIK dan mysql_escape_real_string()!!
*/

        
// zet alle gegevens in de databse


mysql_query("

UPDATE

contact

SET

p_voorletters    ='"
. $_POST['p_voorletters'] ."',
p_voornaam    ='"
. $_POST['p_voornaam'] ."',
p_achternaam    ='"
. $_POST['p_achternaam'] ."',
p_geslacht    ='"
. $_POST['p_geslacht'] ."',
p_email_1    ='"
. $_POST['p_email_1'] ."',
p_email_2    ='"
. $_POST['p_email_2'] ."',
p_adres        ='"
. $_POST['p_adres'] ."',
p_postcode    ='"
. $_POST['p_postcode'] ."',
p_plaats    ='"
. $_POST['$p_plaats'] ."',
p_telefoon_1    ='"
. $_POST['p_telefoon_1'] ."',
p_telefoon_2    ='"
. $_POST['p_telefoon_2'] ."',
p_telefoon_3    ='"
. $_POST['p_telefoon_3'] ."',
p_fax        ='"
. $_POST['p_fax'] ."',
p_beschrijving    ='"
. $_POST['p_beschrijving'] ."',
foto        ='"
. $foto ."',

b_bedrijfsnaam    ='"
. $_POST['b_bedrijfsnaam'] ."',
b_adres        ='"
. $_POST['b_adres'] ."',
b_plaats    ='"
. $_POST['b_plaats'] ."',
b_postcode    ='"
. $_POST['b_postcode'] ."',
b_email_1    ='"
. $_POST['b_email_1'] ."',
b_email_2    ='"
. $_POST['b_email_2'] ."',
b_telefoon_1    ='"
. $_POST['b_telefoon_1'] ."',
b_telefoon_2    ='"
. $_POST['b_telefoon_2'] ."',
b_telefoon_3    ='"
. $_POST['b_telefoon_3'] ."',
b_fax        ='"
. $_POST['b_fax'] ."',
b_kvk        ='"
. $_POST['b_kvk'] ."',
b_btw        ='"
. $_POST['b_btw'] ."',
b_rekeningnummer='"
. $_POST['b_rekeningnummer'] ."',
b_beschrijving    ='"
. $_POST['b_beschrijving'] ."'

WHERE

id='"
. $id ."'

"
);
?>


<div id="content">
    <div id="columnA">
        <h2>Contact Bewerken</h2>
        <p>Uw contact is toegevoegd aan de database.</p>
<p><a href="contact_toevoegen.php" target="_self">Klik Hier</a> om nog een contact aan te maken</p>
<p><a href="index.php" target="_self">Klink Hier</a> om terug te gaan naar het hoofdmenu<br />
</div>
    
</div>

<?php
include "footer.php";
?>
Gewijzigd op 03/03/2011 12:45:34 door Ocirina Ocirina
 
Piet Beunhaas

Piet Beunhaas

03/03/2011 12:36:28
Quote Anchor link
je moet hem gewoon er lekker inprikken, dan doet hij het.
 
Ocirina Ocirina

Ocirina Ocirina

03/03/2011 12:41:31
Quote Anchor link
@Piet

Waar gaat dit over?
 
Piet Beunhaas

Piet Beunhaas

03/03/2011 12:42:00
Quote Anchor link
Je bent gewoon dom, ik ben de php master ahhaha .
 
Ocirina Ocirina

Ocirina Ocirina

03/03/2011 12:42:53
Quote Anchor link
@Piet,
Als je niks zinnigs hebt toe te voegen, verwijder je zelf dan van dit forum.
Zit je toevalig in hetzelfde klas lokaal?
Gewijzigd op 03/03/2011 12:43:32 door Ocirina Ocirina
 
Piet Beunhaas

Piet Beunhaas

03/03/2011 12:43:37
Quote Anchor link
ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDD
 
Niels Hermans

Niels Hermans

03/03/2011 14:33:57
Quote Anchor link
@ Piet, Bedankt Piet voor je vermakelijke maar lichtelijk irritante mededelingen :)

@ Ocirina,

De aangepaste versie werkt zoals verwacht. Hij heeft alleen de zelfde problemen nog al die van mij.

Ik zoek ipv een manier om te kijken of er uberhaupt al een foto is, te kijken of er een foto word geupload , laat de gebruiker het upload vak leeg, dan moet de oude foto gebruikt worden, of gewoon geen, dus eigenlijk moet het andersom. Ik ga nog wat dingetjes proberen.

Ook krijg ik gewoon niet uitgevonden waarom hij bij een Update statement toch een compleet nieuwe row in mn database aanmaakt.

Qua veiligheid. Dat is mijn volgende leerpunt. Ik begrijp dat het zo lek is als een mandje. Maar mijn doel is nu om het , ookal provisorisch werkend te krijgen.
 
Kris Peeters

Kris Peeters

03/03/2011 14:47:32
Quote Anchor link
Niels Hermans op 03/03/2011 14:33:57:
Qua veiligheid. Dat is mijn volgende leerpunt. Ik begrijp dat het zo lek is als een mandje. Maar mijn doel is nu om het , ookal provisorisch werkend te krijgen.


Pas dan toch goed op indien je dit online zet.
Als dat in de openbaarheid komt, kan je grote problemen krijgen.

Vooral niet uitgaan van de veronderstelling: op mijn site komen enkel mijn "vrienden" of zo...
 
Niels Hermans

Niels Hermans

03/03/2011 14:57:38
Quote Anchor link
@ Kris,

Tuurlijk let ik daarop,
Mijn plan was een beetje als het volgende:

Eerste ruwe versie werkend
Tweede versie opschonen en veilig maken

En wellicht hier nog een fase tussen. Dit omdat ik merk dat ik nog niet heel php zo goed begrijp dat ik overal tegelijk aan kan denken.

Uiteindelijk voordat het echt in gebruik word genomen wil ik natuurlijk dat het systeem relatief veilig is voor gebruik.
 



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.