Gegevens in database updaten

  • Onderwerp starter Onderwerp starter Verwijderd lid 141197
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.
V

Verwijderd lid 141197

Beste Helpmij'er

ik heb een database met nieuwsberichten voor op een website.
ik echo deze in textfields zodat je ze kan bewerken en weer opslaan.

Het echoën gaat goed, maar het update niet

hier is de code die ik gebruik voor het echoën:
PHP:
<dit werkt!>
<?php
//contact maken met de server
mysql_connect( "*" , "*" , "*" ); 
mysql_select_db ( "*" );
//informatie ophalen
$query = "SELECT  id, titel, tekst, anker, kort FROM nieuws ORDER BY id DESC";
$result = mysql_query ( $query );
while ( $row = mysql_fetch_assoc ( $result ) ) {
$id = $row['id'];
$titel = $row['titel'];
$tekst = $row['tekst'];
$anker = $row['anker'];
$kort = $row['kort'];
?><form>
<div class="text_vak">
<label>
Id<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is het nummer van de volgoorde. hoe hoger hoe nieuwer.')" /><br/>
<textarea name="id" rows="1" class="text_field"><?php
echo $id;
?></textarea>
</label><br/><br/><?php
?><label>
Titel<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is de titel die boven het nieuwsbericht komt te staan.')" /><br/>
<textarea name="titel" rows="2" class="text_field"><?php
echo $titel;
?></textarea>
</label><br/><br/><?php
?><label>
Tekst<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is het nieuwsbericht.')" /><br/>
<textarea name="tekst" rows="10" class="text_field"><?php
echo $tekst;
?></textarea>
</label><br/><br/><?php
?><label>
Anker<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Een anker is een woord wat word gebruikt om naar een bepaald punt op de pagina te linken.\rGebruik een woord zoals wandelingen1. altijd met nummer!(En onthoud is het het 2de stuk over wandelingen? dan wandelingen 2)')" /><br/>
<textarea name="anker" rows="1" class="text_field"><?php
echo $anker;
?></textarea>
</label><br/><br/><?php
?><label>
Kort<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is de de tekst die onder te titel komt te staan als niet de hele tekst word weergeven.(gebruik de inleiding(niet langer dan 5 a 8 regels))')" /><br/>
<textarea name="kort" rows="10" class="text_field"><?php
echo $kort;
?></textarea>
</label>
</dit werkt!>(ik echo het dus in een loop)

Maar nu probeer ik het in een loop te updaten.

Dit is wat ik heb:<Dit werkt niet!>
PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//variabelen defineren
$id2 = $_POST[id];
$titel2 = $_POST[titel];
$tekst2 = $_POST[tekst];
$anker2 = $_POST[anker];
$kort2 = $_POST[kort];
while mysql_query ("UPDATE nieuws SET id = $id2, titel = $titel2, tekst = $tekst2, anker = $anker2, kort = kort2") {
}
echo 'De Database is aangepast!';
}
?>
</dit werkt niet!>

Ik krijg geen fout melding of melding dat het succesvol is.

Waar zit de fout?

Alvast heel erg bedankt:thumb:
 
Laatst bewerkt door een moderator:
Probeer het eens zo:
PHP:
$id2 = $_POST['id'];
$titel2 = $_POST['titel'];
$tekst2 = $_POST['tekst'];
$anker2 = $_POST['anker'];
$kort2 = $_POST['kort'];

Waarom gebruik je trouwens een "while" om je query uit te voeren?

[edit]Volgens mij moet je ook je query aanpassen:
PHP:
"UPDATE nieuws SET id = $id2, titel = '$titel2', tekst = '$tekst2', anker = '$anker2', kort = '$kort2'"
[/edit]
 
Laatst bewerkt:
Daarnaast is het volkomen onzin om de ID van een record aan te passen...
 
En '$variable' ook.

Gebruik dit:

PHP:
$sQuery = "SELECT x FROM y WHERE var = '".mysql_real_escape_string($sVar)."'";
 
@Supersnail: wekrt nog steeds niet
@ErikBoy007: is voor volgorde
@SVU: waar moet ik dit gebruiken ?
 
ID moet je dan ook niet voor de volgorde gebruiken. Daar maak je dan een ander veld aan.

De tip van SvU moet je altijd gebruiken als je user-input in een query stopt. Als je dat niet doet, riskeer je dat je bezoekers je hele database om zeep helpen.

Overigens zou ik aan je UPDATE query ook nog een WHERE-clause toevoegen. Als je niet wilt dat ál je records aangepast worden.
 
Het is een beveiligde input voor de beheerder:)

ik had eerst een ander veld maar dat zorgte voor nog meer problemen:evil:
 
oké, ik denk dat ik neit goed begrepen wordt:

ik echo alles in een loop waardoor ik voor ieder nieuws bericht een setje textvelden heb die bij alle nieuwsberichten het zelfde zijn.

Het gaat altijd om de gehele inhoud van de database.


Hoe kan ik de veranderingen het beste opslaan?

A. UPDATE
B.DELETE+INSERT
C. anders
 
De berichten over de misplaatste loop gaan over jouw niet werkende code om de data te verwerken. Je zou daarvoor een if constructie moeten/kunnen gebruiken.
Verder is het zoals Erik al aangaf noodzakelijk om een unieke identificatie per record te hebben, wat je kan gebruiken om gegevens aan te passen. Normaal gesproken is ID een auto increment integer, kortom een uniek nummer per record. Met een uniek nummer kun je vervolgens de waarden van dat record updaten:
PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	//variabelen defineren
	$id2 = $_POST[id];
	$titel2 = $_POST[titel];
	$tekst2 = $_POST[tekst];
	$anker2 = $_POST[anker];
	$kort2 = $_POST[kort];
	$sql = "UPDATE nieuws SET titel='".$titel2."', tekst='".$tekst2."', anker='".$anker2."', kort='".$kort2."' where id= ".$id2;
	if (mysql_query ($sql)) {
		echo 'De Database is aangepast!';
	}
}
Let vooral op de query: update <velden> where id = <id>. Je hebt aangegeven dat je het id veld voor de volgorde gebruikt, dus zul je zelf een andere unieke waarde moeten aanbrengen. Dit wordt ook wel de primary key genoemt - als je in je database aangeeft dat kolom X de primary key bevat, dan kun je in die kolom niet twee maal dezelfde waarde invullen.
 
PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//variabelen defineren
$volgorde2 = $_POST['volgorde'];
$titel2 = $_POST['titel'];
$tekst2 = $_POST['tekst'];
$anker2 = $_POST['anker'];
$kort2 = $_POST['kort'];
$sql = "UPDATE nieuws SET volgorde='".$volgorde2."', titel='".$titel2."', tekst='".$tekst2."', anker='".$anker2."', kort='".$kort2."' where id= '".$id"'";
if (mysql_query ($sql)) {
 echo 'De Database is aangepast!';
}
}
?>

heb id vervangen voor volgorde id is nu alleen voor id

//werkt nog steeds niet

//ik heb al geprobeerd om mysql_error () in de code te zetten maar dat lukt mij niet , waar moet ik deze neer zetten
 
Laatst bewerkt door een moderator:
Nou, vooruit dan maar:

PHP:
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST'){

	$sQuery = "UPDATE
				nieuws
			   SET
			    volgorde = '".mysql_real_escape_string($_POST['volgorde'])."',
			    titel = '".mysql_real_escape_string($_POST['titel'])."',
			    tekst = '".mysql_real_escape_string($_POST['tekst'])."',
			    anker = '".mysql_real_escape_string($_POST['anker'])."',
			    kort = '".mysql_real_escape_string($_POST['kort'])."'
			   WHERE
				id = '".mysql_real_escape_string($_POST['id'])."'";
	
	$rResult = mysql_query($sQuery);
	
	if($rResult === FALSE){
	
		echo 'Fout opgetreden in query: 
				<br />
				'.nl2br($sQuery).'
				<br />
				De foutmelding is:
				<br />
				'.mysql_error();
				
	}else{
	
		echo 'Het is gelukt.';
		
	}
}

?>

Ik heb alleen $_POST['id'] gebruikt, maar ik weet niet of die ook echt bestaat. Verder zou het zo moeten kloppen.
 
post id bestaat niet is gewoon $id:cool:

maar maakt niet uit thx ga het nu testen
 
PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//variabelen defineren
$volgorde2 = $_POST['volgorde'];
$titel2 = $_POST['titel'];
$tekst2 = $_POST['tekst'];
$anker2 = $_POST['anker'];
$kort2 = $_POST['kort'];
$sql = "UPDATE nieuws SET volgorde='".$volgorde2."', titel='".$titel2."', tekst='".$tekst2."', anker='".$anker2."', kort='".$kort2."' where id='".$id."'";
if (mysql_query ($sql)){
echo 'De Database is aangepast!';
}
else
echo mysql_error() ;
}
?>

ik heb het zo geprobeerd wat is hier fout aan?
 
Ik geef je een kant en klaar script..
 
PHP:
<div id="nieuws">
  <h1><img src="../media/typografie/nieuws.png" alt="Nieuws" width="197" height="41" /><br/>
      <br />
      <a href="nieuws_toevoegen.php">Nieuwsbericht toevoegen-&gt;</a><br />
  <br /> 
<a href="nieuws_aanpassen.php"></a></h1>
<br />
Aanpassen:(U kunt alles in de tekstvakken aanpassen en opslaan door op 'aanpassen' te drukken.)<br />
<br />

De breedte van de tekst velden zijn gelijk aan die op de site. Dus komt een punt dicht bij het einde druk op ENTER en zet hier &lt;br/&gt; neer!!! (Dit betekent dat de rest van de regel leeg is, dit moet je dus ook gebruiken voor anlinea's!)<br />
<br />
<pred>!!Veranderingen kunnen niet meer worden teruggedraait!!</pred><br/>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//contact maken met de server
mysql_connect( "*" , "*" , "*" ); 
mysql_select_db ( "*" );
//variabelen defineren
$volgorde2 = mysql_real_escape_string($_POST['volgorde']);
$titel2 = mysql_real_escape_string($_POST['titel']);
$tekst2 = mysql_real_escape_string($_POST['tekst']);
$anker2 = mysql_real_escape_string($_POST['anker']);
$kort2 = mysql_real_escape_string($_POST['kort']);
if (mysql_query ("UPDATE nieuws SET volgorde='".$volgorde2."', titel='".$titel2."', tekst='".$tekst2."', anker='".$anker2."', kort='".$kort2."' where id='".$id."'")){
echo '<pred>De Database is aangepast!</pred><br/>';
}
else
echo mysql_error() ;
echo '<pred>De Database is niet aangepast! neem contact op met de beheerder.</pred>';
}
?>
<?php
//contact maken met de server
mysql_connect( "*" , "*" , "*" ); 
mysql_select_db ( "*" );
//informatie ophalen
$query = "SELECT  id, volgorde, titel, tekst, anker, kort FROM nieuws ORDER BY volgorde DESC";
$result = mysql_query ( $query );
while ( $row = mysql_fetch_assoc ( $result ) ) {
$id = $row['id'];
$volgorde = $row['volgorde'];
$titel = $row['titel'];
$tekst = $row['tekst'];
$anker = $row['anker'];
$kort = $row['kort'];
?><form method="post">
<div class="text_vak">
<label>
Volgorde<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is het nummer van de volgorde. hoe hoger hoe nieuwer.')" /><br/>
<textarea name="volgorde" rows="1" class="text_field"><?php
echo $volgorde;
?></textarea>
</label><br/><br/><?php
?><label>
Titel<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is de titel die boven het nieuwsbericht komt te staan.')" /><br/>
<textarea name="titel" rows="2" class="text_field"><?php
echo $titel;
?></textarea>
</label><br/><br/><?php
?><label>
Tekst<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is het nieuwsbericht.')" /><br/>
<textarea name="tekst" rows="10" class="text_field"><?php
echo $tekst;
?></textarea>
</label><br/><br/><?php
?><label>
Anker<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Een anker is een woord wat word gebruikt om naar een bepaald punt op de pagina te linken.\rGebruik een woord zoals wandelingen1. altijd met nummer!(En onthoud is het het 2de stuk over wandelingen? dan wandelingen 2)')" /><br/>
<textarea name="anker" rows="1" class="text_field"><?php
echo $anker;
?></textarea>
</label><br/><br/><?php
?><label>
Kort<img src="media/vraag.png" alt="help" width="12" height="19" onclick="MM_popupMsg('Dit is de de tekst die onder te titel komt te staan als niet de hele tekst word weergeven.(gebruik de inleiding(niet langer dan 5 a 8 regels))')" /><br/>
<textarea name="kort" rows="10" class="text_field"><?php
echo $kort;
?></textarea>
</label><br/><br/>
</div>
<br/>
<?php
}
?>
<div align="center">
  <input name="Reset" type="reset" value="Reset" />
  <input type="submit" name="Submit" value="Aanpassen" />
</div><!--align-->
</form>
</div><!--nieuws-->

geeft:
De Database is aangepast!
De Database is niet aangepast! neem contact op met de beheerder.

wat ik opzich al niet snap!

en dan lijkt het ook nog of hij mijn query gewoon negeert:evil:

ik kan maar 1 oplossing bedenken ik defineer $id later in de code maar all wel als de pagina geladen wordt. zou het kunnen dat hij id nog niet kent?
 
Je moet $id in een hidden field stoppen, dan kun je 'm op d evolgende pagina weer met $_POST['id'] opvragen.

<input type="hidden" name="id" value="<?php echo $row['id']; ?>" />

Leer jezelf overigens af om variabelen over te pompen.

$volgorde = $row['volgorde'] is nergens voor nodig, gebruik gewoon $row['volgorde'].
 
Je echoot ook voor elk record formulier elementen met dezelfde naam. Dat is ook niet erg handig, aangezien je dan waarschijnlijk aalleen de laatste waarde kunt gebruiken.
 
het is dezelfde pagina dus zou niet uit moeten maken dat variabelen overpompen zou voor de werking geen problemen moeten hebben.

@erikyboy007:

ja, dat heb ik all een keer proberen te zeggen:thumb:
 
Variabelen overpompen heeb voor de werking ook geen invloed... Maar geef me één reden om het te doen...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan