login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Record aanpassen (Opgelost)

Offline jvuz - 21/03/2007 13:06 (laatste wijziging 21/03/2007 13:09)
Avatar van jvuzNieuw lid Met volgend script
  1. <?php
  2. $res=mysql_query("SELECT id, title, article, category, author FROM articles WHERE id=".$_GET['id']) or die(mysql_error());
  3. $r = mysql_fetch_array($res);
  4. $article = nl2br($r['article']);
  5. if(!isset($_POST['submit'])) {
  6. echo '<form method="post" action="changearticles.php" style="margin-left:1px;">';
  7. echo '<table>';
  8. echo '<tr><td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td></tr>';
  9. echo '<tr><td valign="top">Article:</td><td><textarea id="article" name="event" rows="10" style="width:535px;">'.$r['article'].'</textarea></td></tr>';
  10. echo '<tr><td></td><td><input type="submit" value="Change" /></td></tr></table>';
  11. echo '</form>';
  12. mysql_query("UPDATE articles SET title='" . $_POST['title'] . "', article='" . $_POST['article'] . "' WHERE id='" . $id . "'");
  13. }
  14. ?>
wil ik een record kunnen aanpassen, maar ik zit een beetje vast, vrees ik.

39 antwoorden

Gesponsorde links
Offline phpfreak - 21/03/2007 13:10
Avatar van phpfreak PHP beginner Wat is je vraag eigenlijk? of wij je script vervolledigen? of fouten zoeken? Wees wat duidelijk aub
Offline jvuz - 21/03/2007 13:18
Avatar van jvuz Nieuw lid Met dit script krijg ik twee foutmeldingen:

Undefined index: title
Undefined index: article

Op volgende lijn:
  1. mysql_query("UPDATE articles SET title='" . $_POST['title'] . "', article='" . $_POST['article'] . "' WHERE id='" . $id . "'");
Ik vrees dat er iets fout is aan de manier waarop de variabelen gedefinieerd zijn, maar ik weet niet direct wat. Zien jullie misschien wat ik verkeerd doe?

Sorry voor het onduidelijk zijn in mijn vraagstelling.
Offline Mad_Mike - 21/03/2007 13:32 (laatste wijziging 21/03/2007 13:34)
Avatar van Mad_Mike PHP beginner Je gebruikt daar POST variabelen die nog niet bestaan. Ik neem aan dat je dat pas wilt doen NADAT het formulier gepost is (en gechecked is op foutieve invoer ).

Dan zou je dus een
  1. if(!isset($_POST['submit']))
  2. {
  3. // je formulier
  4. }
  5. else
  6. {
  7. // controle van de invoer waarden en daarna update query
  8. }

constructie moeten maken. Je mist nu de else. Je doet meteen alles in de if
Offline jvuz - 21/03/2007 13:38
Avatar van jvuz Nieuw lid Op deze manier (http://www.plaatscode.be/4700/) krijg ik al geen foutmelding meer, maar wordt het artikel nog wel niet aangepast.
Offline Mad_Mike - 21/03/2007 13:41
Avatar van Mad_Mike PHP beginner Zet achter die query eens or die(mysql_error()); net zoals je bovenin ook hebt gedaan bij de andere query. En waar haal je die $id vandaan die bij je WHERE statement staat?
Offline jvuz - 21/03/2007 13:47
Avatar van jvuz Nieuw lid Ik denk dat dit
  1. $r['id']
moet zijn.
Offline Mad_Mike - 21/03/2007 13:50
Avatar van Mad_Mike PHP beginner Probeer het eens zou ik zeggen. Kijk goed waar en wanneer $r wordt aangemaakt...

ps:
Ik denk het niet 
Offline jvuz - 21/03/2007 13:55
Avatar van jvuz Nieuw lid Het werkt inderdaad nog niet, maar die $r['naamvariabele'] wordt toch in het eerste deel aangemaakt, of telt dan niet meer in het tweede deel (else)?
Offline Mad_Mike - 21/03/2007 14:05
Avatar van Mad_Mike PHP beginner Alles wat boven de if() { } else { } wordt aangemaakt kan je erbinnen gebruiken ja, aangezien deze code altijd uitgevoerd wordt.

Maar die query die jij hebt bovenin geeft in eerste instantie (als het formulier nog niet verzonden is) de verwachte waarde terug. Na het posten van het formulier niet meer... Dit komt omdat jij in het WHERE statement $_GET['id'] hebt staan. Deze waarde bestaat niet meer na het posten, omdat je rechtstreeks naar het .php bestand post (zie action attribute in het formulier).

Wat je het beste kunt doen is in het formulier een hidden input maken met als name: berichtID en als value: $r['id'];
  1. echo "<input type=\"hidden\" name=\"berichtID\" value=\"".$r['id']."\" />";


In het else gedeelte kan je dan het id van het juiste bericht opvragen door $_POST['berichtID'];

snapje? 
Offline jvuz - 21/03/2007 14:10
Avatar van jvuz Nieuw lid Je bedoelt zoals dit?

http://www.plaatscode.be/4702/

Blijkbaar zit er nog iets mis bij mij, want het werkt nog niet.
Offline Mad_Mike - 21/03/2007 14:34
Avatar van Mad_Mike PHP beginner doe eens in de else
var_dump($_POST);

ben benieuwd welke waarden deze bevalt. Verder zie ik zosnel even niet iets dat mij verkeerd lijkt
Offline jvuz - 21/03/2007 14:39
Avatar van jvuz Nieuw lid Dit is de volledige code: http://www.plaatscode.be/4703/ Daar krijg ik al boodschappen dat de variabele id niet gekend is. 
Offline Mad_Mike - 21/03/2007 14:45
Avatar van Mad_Mike PHP beginner Op regel 10 denk ik ja...
$GET['id']; bestaat niet altijd... na het posten van je formulier bijvoorbeeld niet. Je zou dit kuinnen oplossen door de action in de form tag aan te passen door achter de .php?id=$r['id'] te zetten (maar dan goed ) zodat $GET['id'] wel bestaat, maar dit is niet echt een nette oplossing
Offline Ibrahim - 21/03/2007 14:48
Avatar van Ibrahim PHP expert Een paar opmerkingen:

- haal al die HTML buiten php 

- Je fetched erboven de ID met behulp van de id in de URL, dus je kunt bij het wijzigen $_GET['id'] gewoon gebruiken 

- if( !isset( $_POST.... veranderen naar if( $_SERVER['REQUEST_METHOD'] )

- WHERE id = '" . $_POST['berichtID'] . "' veranderen naar WHERE id = " . $_POST['berichtID'] . "

- beveilig altijd je input (mysql_real_escape_string is een goed begin)

- bekijk eens: http://www.plaatscode.be/4704/
Offline jvuz - 21/03/2007 15:06
Avatar van jvuz Nieuw lid Bedankt, ik ben het aan't uittesten, maar ik krijg een parse error op
  1. $update = mysql_query( "UPDATE articles SET title = '" . mysql_real_escape_string( $_POST['title'] ) mysql_real_escape_string( $_POST['article'] ) . "'WHERE id = " . $_GET['id']) or die('QUERY_UPDATE ERROR: <hr />' . mysql_error());
Ik ben momenteel op zoek naar de fout, maar laat me maar effe zoeken hoor. Ik zal wel iets weten als ik er niet uit kom.
Offline Ibrahim - 21/03/2007 15:12
Avatar van Ibrahim PHP expert
  1. $update = mysql_query( "UPDATE articles
  2. SET title = '" . mysql_real_escape_string( $_POST['title'] ) . "',
  3. article = '" . mysql_real_escape_string( $_POST['article'] ) . "'
  4. WHERE id = " . $_GET['id']
  5. ) or die('QUERY_UPDATE ERROR: <hr />' . mysql_error()
  6. );
Offline jvuz - 21/03/2007 15:32
Avatar van jvuz Nieuw lid En is mijn form (buiten de php) dan goed zo? Ik krijg een parse error.

  1. <!-- HIER FORMULIER -->
  2. <form method="post" action="changingarticle1.php" style="margin-left:1px;">
  3. <table>
  4. <tr>
  5. <td><input type="hidden" name="berichtID" value=".$r['id']." /></td>
  6. </tr>
  7. <tr>
  8. <td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td>
  9. </tr>
  10. <tr>
  11. <td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">'.$r['article'].'</textarea></td>
  12. </tr>
  13. <tr>
  14. <td></td>
  15. <td><input type="submit" value="Change" /></td>
  16. </tr>
  17. </table>
  18. </form>
Offline Ibrahim - 21/03/2007 15:40
Avatar van Ibrahim PHP expert haal de "changingarticle1.php uit de action attribuut.

".$r['id']." je bent niet meer in PHP, dus:

<?php echo $r['id']; ?>

post eens je code die je nu hebt op plaatscode, want een parse error bij een HTML formulier kan nooit kloppen 
Offline jvuz - 22/03/2007 08:02
Avatar van jvuz Nieuw lid Ik heb gisteren nog wel een aantal zaken eruit gehaald, maar ik geraak niet verder

http://www.plaatscode.be/4717/
Offline demich - 22/03/2007 08:19
Avatar van demich Nieuw lid WHERE id=".$_GET['id'])

=>WHERE id=".$_GET['id'].")
Offline jvuz - 22/03/2007 08:54 (laatste wijziging 23/03/2007 07:45)
Avatar van jvuz Nieuw lid Bedankt!

Moet ik
  1. <?php echo $r['id']; ?>
ook aanpassen in de rest van mijn form?

  1. <form method="post" action="" style="margin-left:1px;">
  2. <table>
  3. <tr>
  4. <td><input type="hidden" name="berichtID" value="<?php echo $r['id']; ?> " /></td>
  5. </tr>
  6. <tr>
  7. <td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td>
  8. </tr>
  9. <tr>
  10. <td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">"'.$r['article'].'"</textarea></td>
  11. </tr>
  12. <tr>
  13. <td></td>
  14. <td><input type="submit" value="Change" /></td>
  15. </tr>
  16. </table>
  17. </form>


OK, dit probleem is opgelost. Ik moest niet $r['id'] gebruiken, maar $result['id']. Stom, ik weet het, maar dit werkt nu toch al. Nu moet ik enkel nog controleren op lege velden en zien of de titel nog niet bestaat.

http://www.plaatscode.be/4731/
Offline Ibrahim - 23/03/2007 08:40
Avatar van Ibrahim PHP expert @demich, dat maakt ECHT niet uit hoor 
Offline jvuz - 24/03/2007 14:10 (laatste wijziging 24/03/2007 14:10)
Avatar van jvuz Nieuw lid Ik ben nu zover. Maar ik blijf nog een error message krijgen over $error op lijn 20

  1. <?php
  2. if( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) ){
  3. $res = mysql_query( "SELECT title, article, category, author FROM articles WHERE id = " .$_GET['id'] ) or die('QUERY_SELECT ERROR: <hr />' . mysql_error());
  4. $results = mysql_fetch_assoc( $res );
  5. if( $_SERVER['REQUEST_METHOD'] == 'POST' )
  6. if ( strlen( trim($_POST['title']) < 2) && strlen( trim($_POST['article']) < 2))
  7. {
  8. $error = "One or both fields are empty. This is not allowed. Please fill something in.";
  9. }
  10.  
  11. if ( !empty( $error ) )
  12. {
  13. //error is niet leeg dus query uitvoeren
  14. $update = mysql_query( "UPDATE articles SET title = '" . mysql_real_escape_string( $_POST['title']). "', article = '". mysql_real_escape_string( $_POST['article'] ) . "'WHERE id = " . $_GET['id']) or die('QUERY_UPDATE ERROR: <hr />'. mysql_error());
  15. echo "Changes have been made!";
  16. }
  17. else
  18. {
  19. //error is niet leeg dus error weergeven
  20. echo $error;
  21. }}
  22. // form without PHP
  23. ?>
  24. <!-- HIER FORMULIER -->
  25. <form method="post" action="" style="margin-left:1px;">
  26. <table>
  27. <tr>
  28. <td><input type="hidden" name="berichtID" value="<?php echo $results['id']; ?> " /></td>
  29. </tr>
  30. <tr>
  31. <td valign="top">Title</td><td><input type="text" name="title" value="<?php echo $results['title']; ?>"style="width:535px;" /></td>
  32. </tr>
  33. <tr>
  34. <td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;"><?php echo $results['article']; ?></textarea></td>
  35. </tr>
  36. <tr>
  37. <td></td>
  38. <td><input type="submit" value="Change" /></td>
  39. </tr>
  40. </table>
  41. </form>
Offline Ibrahim - 25/03/2007 10:54
Avatar van Ibrahim PHP expert
  1. if( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) )
  2. {
  3. $res = mysql_query( "SELECT title, article, category, author FROM articles WHERE id = " .$_GET['id'] ) or die('QUERY_SELECT ERROR: <hr />' . mysql_error());
  4. $results = mysql_fetch_assoc( $res );
  5.  
  6. if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
  7.  
  8. if ( strlen( trim($_POST['title']) < 2) && strlen( trim($_POST['article']) < 2))
  9. {
  10. $error = "One or both fields are empty. This is not allowed. Please fill something in.";
  11. }
  12.  
  13. if ( !empty( $error ) )
  14. {
  15. //error is niet leeg dus query uitvoeren
  16. $update = mysql_query( "UPDATE articles SET title = '" . mysql_real_escape_string( $_POST['title']). "', article = '". mysql_real_escape_string( $_POST['article'] ) . "'WHERE id = " . $_GET['id']) or die('QUERY_UPDATE ERROR: <hr />'. mysql_error());
  17. echo "Changes have been made!";
  18. }
  19. else
  20. {
  21. //error is niet leeg dus error weergeven
  22. echo $error;
  23. }
  24. }
  25. else
  26. {
  27. ?>
  28. <!-- HIER FORMULIER -->
  29. <form method="post" action="" style="margin-left:1px;">
  30. <table>
  31. <tr>
  32. <td><input type="hidden" name="berichtID" value="<?php echo $results['id']; ?> " /></td>
  33. </tr>
  34. <tr>
  35. <td valign="top">Title</td><td><input type="text" name="title" value="<?php echo $results['title']; ?>"style="width:535px;" /></td>
  36. </tr>
  37. <tr>
  38. <td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;"><?php echo $results['article']; ?></textarea></td>
  39. </tr>
  40. <tr>
  41. <td></td>
  42. <td><input type="submit" value="Change" /></td>
  43. </tr>
  44. </table>
  45. </form>
  46. <?php
  47. }
  48. }
  49. else
  50. {
  51. // id is niet in orde
  52. }
  53. ?>
Offline jvuz - 26/03/2007 09:21
Avatar van jvuz Nieuw lid Dit side code van de hele pagina (http://www.plaatscode.be/4765/)

Het probleem is dat als ik iets wil aanpassen ik altijd een bericht krijg dat ik iets niet ingevuld heb, zelfs als er in beide velden iets ingevuld is. En nu heb ik ook gezien dat ik via html validatie een fout krijg op lijn 80
  1. <input type="hidden" name="berichtID" value="<?php echo $results['id']; ?>" />
. Als ik dan in de source code kijk (die gegenereerd werd), dan zou de variabele niet gekend zijn.
Offline Ibrahim - 26/03/2007 13:32
Avatar van Ibrahim PHP expert onder $results = mysql_fetch_assoc( $res ); moet je eens dit neerzetten:

  1. echo '<pre>' , var_dump( $results ) , '</pre>';

en vertel me dan of je array gevuld is, het kan zijn dat MySQL geen resultaten geeft.

Ook zou ik error_reporting( E_ALL ); bovenaan je pagina zetten. Zo kun je meteen zien of bijvoorbeeld een variabele niet bestaat en andere mogelijke errors zien.
Offline jvuz - 26/03/2007 13:58 (laatste wijziging 26/03/2007 14:22)
Avatar van jvuz Nieuw lid De array is gevuld. Die error_reporting, moet in <?php ?> staan?

Edit: Blijkbaar wel.
Offline Ibrahim - 26/03/2007 14:27
Avatar van Ibrahim PHP expert je hebt je formulier buiten de if lus waar je $_GET checkt gehaald. Zet die erin, dit doe je door de accolade onder het formulier te zetten
Offline jvuz - 26/03/2007 15:13 (laatste wijziging 26/03/2007 15:17)
Avatar van jvuz Nieuw lid Bedoel je de laatste } voor het form begint?

Ik krijg nu 2 errors:
undefined index op lijn 11
  1. $id = htmlentities($_GET["id"], ENT_QUOTES);

en lijn 13
  1. $rsc = mysql_query("SELECT category FROM articles WHERE id=".$_GET['id']) or die(mysql_error());
Offline Ibrahim - 26/03/2007 15:49
Avatar van Ibrahim PHP expert dat betekent dat $_GET['id'] niet in de url is, kijk eens of er dit in de url staat ?id=nummertje_hier
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.396s