Record aanpassen (Opgelost)
jvuz - 21/03/2007 13:06 (laatste wijziging 21/03/2007 13:09)
Nieuw lid
Met volgend script
<?php
$res=mysql_query("SELECT id, title, article, category, author FROM articles WHERE id=".$_GET['id']) or die(mysql_error());
$r = mysql_fetch_array($res);
$article = nl2br($r['article']);
if(!isset($_POST['submit'])) {
echo '<form method="post" action="changearticles.php" style="margin-left:1px;">';
echo '<table>';
echo '<tr><td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td></tr>';
echo '<tr><td valign="top">Article:</td><td><textarea id="article" name="event" rows="10" style="width:535px;">'.$r['article'].'</textarea></td></tr>';
echo '<tr><td></td><td><input type="submit" value="Change" /></td></tr></table>';
echo '</form>';
mysql_query("UPDATE articles SET title='" . $_POST['title'] . "', article='" . $_POST['article'] . "' WHERE id='" . $id . "'");
}
?>
<?php
$article = nl2br ( $r [ 'article' ] ) ; if ( ! isset ( $_POST [ 'submit' ] ) ) { echo '<form method="post" action="changearticles.php" style="margin-left:1px;">' ; echo '<tr><td valign="top">Title</td><td><input type="text" name="title" value="' . $r [ 'title' ] . '"style="width:535px;" /></td></tr>' ; echo '<tr><td valign="top">Article:</td><td><textarea id="article" name="event" rows="10" style="width:535px;">' . $r [ 'article' ] . '</textarea></td></tr>' ; echo '<tr><td></td><td><input type="submit" value="Change" /></td></tr></table>' ; mysql_query ( "UPDATE articles SET title='" . $_POST [ 'title' ] . "', article='" . $_POST [ 'article' ] . "' WHERE id='" . $id . "'" ) ; }
?>
wil ik een record kunnen aanpassen, maar ik zit een beetje vast, vrees ik.
39 antwoorden
Gesponsorde links
phpfreak - 21/03/2007 13:10
PHP beginner
Wat is je vraag eigenlijk? of wij je script vervolledigen? of fouten zoeken? Wees wat duidelijk aub
jvuz - 21/03/2007 13:18
Nieuw lid
Met dit script krijg ik twee foutmeldingen:
Undefined index: title
Undefined index: article
Op volgende lijn:
mysql_query("UPDATE articles SET title='" . $_POST['title'] . "', article='" . $_POST['article'] . "' WHERE id='" . $id . "'");
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.
Mad_Mike - 21/03/2007 13:32 (laatste wijziging 21/03/2007 13:34)
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
if(!isset($_POST['submit']))
{
// je formulier
}
else
{
// controle van de invoer waarden en daarna update query
}
if ( ! isset ( $_POST [ 'submit' ] ) ) {
// je formulier
}
else
{
// controle van de invoer waarden en daarna update query
}
constructie moeten maken. Je mist nu de else. Je doet meteen alles in de if
jvuz - 21/03/2007 13:38
Nieuw lid
Op deze manier (http://www.plaatscode.be/4700/) krijg ik al geen foutmelding meer, maar wordt het artikel nog wel niet aangepast.
Mad_Mike - 21/03/2007 13:41
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?
jvuz - 21/03/2007 13:47
Nieuw lid
Ik denk dat dit moet zijn.
jvuz - 21/03/2007 13:55
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)?
Mad_Mike - 21/03/2007 14:05
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'];
echo "<input type=\"hidden\" name=\"berichtID\" value=\"".$r['id']."\" />";
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?
Mad_Mike - 21/03/2007 14:34
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
jvuz - 21/03/2007 15:06
Nieuw lid
Bedankt, ik ben het aan't uittesten, maar ik krijg een parse error op
$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.
Ibrahim - 21/03/2007 15:12
PHP expert
$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()
);
WHERE id = " . $_GET [ 'id' ]
) ;
jvuz - 21/03/2007 15:32
Nieuw lid
En is mijn form (buiten de php) dan goed zo? Ik krijg een parse error.
<!-- HIER FORMULIER -->
<form method="post" action="changingarticle1.php" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value=".$r['id']." /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">'.$r['article'].'</textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</form>
<!-- HIER FORMULIER -->
< form method= "post" action= "changingarticle1.php" style= "margin-left:1px;" >
< table>
< tr>
< td>< input type= "hidden" name= "berichtID" value= ".$r ['id']." /></ td>
</ tr>
< tr>
< td valign= "top" > Title</ td>< td>< input type= "text" name= "title" value= "'.$r ['title'].'" style= "width:535px;" /></ td>
</ tr>
< tr>
< td valign= "top" > Article:</ td>< td>< textarea id= "article" name= "article" rows= "10" style= "width:535px;" > '.$r[' article'].' </ textarea></ td>
</ tr>
< tr>
< td></ td>
< td>< input type= "submit" value= "Change" /></ td>
</ tr>
</ table>
</ form>
demich - 22/03/2007 08:19
Nieuw lid
WHERE id=".$_GET['id'])
=>WHERE id=".$_GET['id'].")
jvuz - 22/03/2007 08:54 (laatste wijziging 23/03/2007 07:45)
Nieuw lid
Bedankt!
Moet ik ook aanpassen in de rest van mijn form?
<form method="post" action="" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value="<?php echo $r['id']; ?> " /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">"'.$r['article'].'"</textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</form>
<form method="post" action="" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value="
<?php echo $r [ 'id' ] ; ?> " /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="'.$r['title'].'"style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">"'.$r['article'].'"</textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</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 /
jvuz - 24/03/2007 14:10 (laatste wijziging 24/03/2007 14:10)
Nieuw lid
Ik ben nu zover. Maar ik blijf nog een error message krijgen over $error op lijn 20
<?php
if( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) ){
$res = mysql_query( "SELECT title, article, category, author FROM articles WHERE id = " .$_GET['id'] ) or die('QUERY_SELECT ERROR: <hr />' . mysql_error());
$results = mysql_fetch_assoc( $res );
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
if ( strlen( trim($_POST['title']) < 2) && strlen( trim($_POST['article']) < 2))
{
$error = "One or both fields are empty. This is not allowed. Please fill something in.";
}
if ( !empty( $error ) )
{
//error is niet leeg dus query uitvoeren
$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());
echo "Changes have been made!";
}
else
{
//error is niet leeg dus error weergeven
echo $error;
}}
// form without PHP
?>
<!-- HIER FORMULIER -->
<form method="post" action="" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value="<?php echo $results['id']; ?> " /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="<?php echo $results['title']; ?>"style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;"><?php echo $results['article']; ?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</form>
<?php
$res = mysql_query ( "SELECT title, article, category, author FROM articles WHERE id = " . $_GET [ 'id' ] ) or
die ( 'QUERY_SELECT ERROR: <hr />' . mysql_error ( ) ) ; if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' )
{
$error = "One or both fields are empty. This is not allowed. Please fill something in." ;
}
{
//error is niet leeg dus query uitvoeren
echo "Changes have been made!" ; }
else
{
//error is niet leeg dus error weergeven
} }
// form without PHP
?>
<!-- HIER FORMULIER -->
<form method="post" action="" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value="
<?php echo $results [ 'id' ] ; ?> " /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="
<?php echo $results [ 'title' ] ; ?> "style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">
<?php echo $results [ 'article' ] ; ?> </textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</form>
Ibrahim - 25/03/2007 10:54
PHP expert
if( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) )
{
$res = mysql_query( "SELECT title, article, category, author FROM articles WHERE id = " .$_GET['id'] ) or die('QUERY_SELECT ERROR: <hr />' . mysql_error());
$results = mysql_fetch_assoc( $res );
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
if ( strlen( trim($_POST['title']) < 2) && strlen( trim($_POST['article']) < 2))
{
$error = "One or both fields are empty. This is not allowed. Please fill something in.";
}
if ( !empty( $error ) )
{
//error is niet leeg dus query uitvoeren
$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());
echo "Changes have been made!";
}
else
{
//error is niet leeg dus error weergeven
echo $error;
}
}
else
{
?>
<!-- HIER FORMULIER -->
<form method="post" action="" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value="<?php echo $results['id']; ?> " /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="<?php echo $results['title']; ?>"style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;"><?php echo $results['article']; ?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</form>
<?php
}
}
else
{
// id is niet in orde
}
?>
if( isset( $_GET['id'] ) && is_numeric( $_GET['id'] ) )
{
$res = mysql_query( "SELECT title, article, category, author FROM articles WHERE id = " .$_GET['id'] ) or die('QUERY_SELECT ERROR: <hr />' . mysql_error());
$results = mysql_fetch_assoc( $res );
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
if ( strlen( trim($_POST['title']) < 2) && strlen( trim($_POST['article']) < 2))
{
$error = "One or both fields are empty. This is not allowed. Please fill something in.";
}
if ( !empty( $error ) )
{
//error is niet leeg dus query uitvoeren
$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());
echo "Changes have been made!";
}
else
{
//error is niet leeg dus error weergeven
echo $error;
}
}
else
{
?>
<!-- HIER FORMULIER -->
<form method="post" action="" style="margin-left:1px;">
<table>
<tr>
<td><input type="hidden" name="berichtID" value="
<?php echo $results [ 'id' ] ; ?> " /></td>
</tr>
<tr>
<td valign="top">Title</td><td><input type="text" name="title" value="
<?php echo $results [ 'title' ] ; ?> "style="width:535px;" /></td>
</tr>
<tr>
<td valign="top">Article:</td><td><textarea id="article" name="article" rows="10" style="width:535px;">
<?php echo $results [ 'article' ] ; ?> </textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Change" /></td>
</tr>
</table>
</form>
<?php
}
}
else
{
// id is niet in orde
}
?>
jvuz - 26/03/2007 09:21
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
<input type="hidden" name="berichtID" value="<?php echo $results['id']; ?>" />
<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.
Ibrahim - 26/03/2007 13:32
PHP expert
onder $results = mysql_fetch_assoc( $res ); moet je eens dit neerzetten:
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.
jvuz - 26/03/2007 13:58 (laatste wijziging 26/03/2007 14:22)
Nieuw lid
De array is gevuld. Die error_reporting, moet in <?php ?> staan?
Edit: Blijkbaar wel.
Ibrahim - 26/03/2007 14:27
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
jvuz - 26/03/2007 15:13 (laatste wijziging 26/03/2007 15:17)
Nieuw lid
Bedoel je de laatste } voor het form begint?
Ik krijg nu 2 errors:
undefined index op lijn 11
$id = htmlentities($_GET["id"], ENT_QUOTES);
en lijn 13
$rsc = mysql_query("SELECT category FROM articles WHERE id=".$_GET['id']) or die(mysql_error());
Ibrahim - 26/03/2007 15:49
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 .