SQL UPDATE tabel probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Anthony de meulemeester

anthony de meulemeester

30/04/2013 20:43:06
Quote Anchor link
hey,

ik krijg geen foutmeldingen en tog update hij men rows niet?

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
<?php
     $naam
= $_POST['naam'];
     $leeftijd = $_POST['leeftijd'];
     $woonplaats = $_POST['woonplaats'];
     $adres = $_POST['adres'];
     $gsm = $_POST['gsm'];
     $email = $_POST['email'];
     $functie = $_POST['functie'];
     $ervaring = $_POST['ervaring'];
     $status = $_POST['status'];
     $opmerkingen = $_POST['opmerkingen'];
 $pagina = $_GET['id'];
$doen = "UPDATE kan$tabelnaam SET naam='$naam', leeftijd='$leeftijd', woonplaats='$woonplaats', functie='$functie', ervaring='$ervaring', status='$status', email='$email', adres='$adres', gsm='$gsm', opmerkingen='$opmerkingen' WHERE id='$pagina'" ;



$resultdoen = mysql_query($doen);    //order executes
if($resultdoen){
    echo'Kandidaat is met succes gewijzigd <a href="kandidaten.php">klik hier</a> om naar het overzicht te gaan <br />';
    
}
else{
    echo("<br>Input data is fail");
    echo mysql_error();
}




?>


iemand die kan zien wat er mis is?
Gewijzigd op 30/04/2013 20:43:47 door Anthony de meulemeester
 
PHP hulp

PHP hulp

23/12/2024 05:58:32
 
Obelix Idefix

Obelix Idefix

30/04/2013 21:18:44
Quote Anchor link
Anthony de meulemeester op 30/04/2013 20:43:06:
iemand die kan zien wat er mis is?


Wat is er niet mis ;-)

Debuggen: Heb je zelf al gecontroleerd wat er in je query staat door deze naar het scherm te echoën?
In bovenstaande code zie ik nergens een controle op fouten (geen error-reporting, geen controle of een formulier verzonden is, etc.). Dat je meldt dat er geen foutmeldingen zijn, zegt mij dus niet zo veel.

Waarom regel 2 t/m 11? Je kopieert daar, zinloos, variabelen. Variabelen waarvan je overigens niet eens controleert of ze wel bestaan en of de waarde voldoet aan criteria (een gsm nummer kan bv nooit letters bevatten).
In je query heb je het woordje kan staan als (onderdeel?) van de tabelnaam en daarna nog $tabelnaam.
Je query is 'lek'/onbeveiligd. Kijk eens naar mysql_real_escape_string.

Waarom plaats je op regel 22 de echo tussen ( ) en " en op regel 19 doe je het zonder ( ) en met '
Voor je eigen gemak/het overzicht: wees consequent.

Je hebt overigens voor alle variabelen $_POST staan, behalve voor id.
Gewijzigd op 30/04/2013 21:21:56 door Obelix Idefix
 
Nick Dijkstra

Nick Dijkstra

30/04/2013 21:37:48
Quote Anchor link
Waar haal je $tabelnaam vandaan?
 
St p

st p

30/04/2013 22:32:01
Quote Anchor link
Je hebt het niet echt makelijk opgeschreven. Probeer netjes te werken
Maar maak ook gebruik van fouten afhandelingen en misschien is ook geheugensteuntjes ook handig in het script, zo verlies je niet het overzicht.
Het kan ook handig zijn om een goede php programma op je computer te hebben die alvast nakijkt terwijl je zit te typen aan het script. Er is een groot aantal programma,s die gratis zijn en toch goed werken, zoek maar is op google.

Hier onder heb ik een voorbeeld gemaakt hoe het beter kan en waar je op moet letten.
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
<?php
//Dit script komt van php.net , en is verbeterd door stp firespeed
//Dit script verwerkt database gegevens via het mysql_query()functie.

// hieronder staat een fouten afvanger is handig

echo ini_get('display_errors');

if (!ini_get('display_errors')) {
    ini_set('display_errors', '1');
}


echo ini_get('display_errors');
}


// This could be supplied by a user, for example
     $naam = $_POST['naam'];
     $leeftijd = $_POST['leeftijd'];
     $woonplaats = $_POST['woonplaats'];
     $adres = $_POST['adres'];
     $gsm = $_POST['gsm'];
     $email = $_POST['email'];
     $functie = $_POST['functie'];
     $ervaring = $_POST['ervaring'];
     $status = $_POST['status'];
     $opmerkingen = $_POST['opmerkingen'];
     $pagina = $_post['id'];
}


// Formulate Query
// This is the best way to perform an SQL query
// For more examples, see mysql_real_escape_string()

$pagina = $_get['id'];
$query = sprintf ("SELECT leeftijd, woonplaats, adres, gsm, email, functie, ervaring, status, opmerkingen, pagina,  FROM friends
    WHERE ID firstname='%s' AND lastname='%s' AND lastname='%s' AND lastname='%s' AND lastname='%s'AND lastname='%s 'AND lastname='%s'"
,

//hier boven moet je nog even meerdere functie,s even aanpassen.    
//hier moet je zelf nog even je onderdelen er in zetten,Dit wordt aangeraden .

mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
mysql_real_escape_string($         ),
// dit stukje moet je alleen tussen ($  )haakjes veranderen de rest staat al goed laat de ; staan anders sluit hij deze functie niet af en gaat het haperen.
mysql_real_escape_string($         ));


//De laatste )) geeft aan dat het einde van de functie is en dat het verder moet gaan naar een andere functie.

// Perform Query
// hier gaat de database werken.

$result = mysql_query($query);

// Check result
//hier komt eventueel foutmeldingen zo niet dan gaat het script verder.
// This shows the actual query sent to MySQL, and the error. Useful for debugging.

if (!$result) {
    $message  = 'Invalid query: ' . mysql_error() . "\n";
    $message .= 'Whole query: ' . $query;
    die($message);
}


// Use result
// Attempting to print $result won't allow access to information in the resource
// One of the mysql result functions must be used
// See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.

//hier moet je nog tussen haakjes je eigen funtie,s zetten. Laat ['] staan.

while ($row = mysql_fetch_assoc($result)) {
    echo $row['firstname'];
    echo $row['lastname'];
    echo $row['address'];
    echo $row['age'];
    echo $row['firstname'];
    echo $row['lastname'];
    echo $row['address'];
    echo $row['age'];
}


// Free the resources associated with the result set
// This is done automatically at the end of the script
// hier komt het bericht dat het gelukt is.

echo'Kandidaat is met succes gewijzigd <a href="kandidaten.php">klik hier</a> om naar het overzicht te gaan <br />';    

//laat dits stukje staan het is ervoor het afsluiten
mysql_free_result($result);

?>
Gewijzigd op 01/05/2013 01:05:34 door st p
 
Erwin H

Erwin H

01/05/2013 09:20:44
Quote Anchor link
Stp Firespeed op 30/04/2013 22:32:01:
Hier onder heb ik een voorbeeld gemaakt hoe het beter kan en waar je op moet letten.

Hoe het beter kan? Laat me niet lachen.

Overbodig if statement om eerst ini_get te doen en dan pas ini_set, kan je net zo goed direct doen.
Afsluitende haakjes op regels 13 en 27 die niets afsluiten.
Regels 16 t/m 26, ja, lekker onnodig variabelen kopieren. Heel goed voorbeeld.
SQL select statement terwijl de TS een update wilt uitvoeren.
Regel 85, ah, de kandidaat is wel aangepast, waar dan?
Regel 88, mysql_free_result is niet echt nuttig, behalve wanneer je nog php4 gebruikt, wat me sterk lijkt.

@TS Waar je mee moet beginnen is zoals Obelix al aangeeft, je query string eens naar het scherm te sturen. Als je id bijvoorbeeld leeg is dan krijg je alsnog je query wel uitgevoerd, maar worden er geen rijen aangepast.
Na je query zal je dus behalve checken of de query wel is uitgevoerd, ook moeten checken op hoeveel rijen zijn aangepast. Dat kan met mysql-affected-rows. Die functie geeft een integer terug. Is het 0 dan is de query uitgevoerd, maar niets geupdate.

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
<?php
$str
= 'UPDATE ....
        SET ... = "..."
        WHERE ... = ..'
;

//ter controle
echo $str.'<br>';

$success = mysql_query( $str );

if ( $success ){
  $num = mysql_affected_rows();
  if ( $num > 0 ){
    echo 'Er zijn '.$num.' rijen geupdate.';
  }
else {
    echo 'query uitgevoerd, maar geen rijen geupdate';
  }
}
else {
  echo 'query niet uitgevoerd';
}

?>
Gewijzigd op 01/05/2013 09:21:38 door Erwin H
 
Anthony de meulemeester

anthony de meulemeester

01/05/2013 10:26:11
Quote Anchor link
Bedankt voor de tips iedereen.

ik heb het door nu :P. nogmaals bedankt voor jullie hulp
 



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.