PDA

Volledige versie bekijken : tekst in database bewerken


bkersten
%Europe/Berlin %452 %2006, 11:50
Hoi,

Weet iemand een tutorial over hoe je tekst die je via een script in de database hebt gezet, kunt bewerken met een form?
Ik heb een script proberen te bewerken maar ik krijg het niet klaar.

Dus weet iemand een tutorial of een goede site waar ik dit kan vinden?

B.v.d.

Bram

eagle
%Europe/Berlin %474 %2006, 12:23
Maw, je wilt de tekst die in de database staat, uitlezen naar een formulier, en dan (de gewijzigde tekst) terugsturen naar de database?

bkersten
%Europe/Berlin %482 %2006, 12:35
Ik heb een script waarmee ik tekst in de database heb gezet.
Het onderstaande script:

<?
require("../config.php");

// Verwijder deze comment en de onderstaande regel als je een eigen stylesheet gebruikt...
echo "<link rel=\"stylesheet\" content=\"text/css\" href=\"../style.css\">";

if(!$submit){
?>
<br>
<br>
</span><form action="<? echo $PHP_SELF ?>" method="POST" class="style11">
<span class="style12"><input type="hidden" name="submit" value="1">
Tekst op de beginpagina:
<br>
<textarea name="home" cols="40" rows="7"></textarea>
<br>
</span>
<span class="style12"><br>
<br>
<input type="submit" value="Toevoegen">
<input type="reset" value="Wis velden">
</p>
</p>
</span></form>
<span class="style10"><?
}
else{
$query = mysql_query("SELECT * FROM cms WHERE home = '$home'");
$result = mysql_num_rows($query);

if($result){
?>

De ingevoerde gebruikersnaam is al in gebruik.<br><br>
<a href="javascript:history.go(-1)">Ga terug</a>

<?
}
else{
if($home){

if($wachtwoord!=$wachtwoord2){
echo "De ingevoerde wachtwoorden zijn niet hetzelfde.";
}
else{
$geboortedatum = "$geb1-$geb2-$geb3";

$tekens=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$activeringscode;
for($c = 0; $c < 12; $c++){
srand((double)microtime() * 100000000000000);
$pass = $tekens[rand(0, 62)];
$activeringscode=$activeringscode.$pass;
}

if($actmail=="1"){
$activeringscode = 0;
}
elseif($actmail=="2"){
$activeringscode = 1;
}

mysql_query("INSERT INTO cms (home) VALUES ('$home')") or die(mysql_error());

$bericht = "Via onze website heb jij (als het goed is) een aanmeldingsformulier ingevuld waarmee je een lid van onze
website wordt, als dit niet het geval is kun je dit mailtje het beste verwijderen.\n\nAls je je wel wilt aanmelden voor een
account op onze website moet je op de onderstaande url klikken om je account te activeren:\n\n
<a href=\"$script_url/activeer.php?activate=$activeringscode\">$script_url/activeer.php?activate=$activeringscode</a>\n\nMet vriendelijke groet
Webmaster $webmaster_url";

if($actmail=="1"){
mail("$webmaster_email","Activeer nu je account $naam !","$bericht");
echo "De aanmelding is succesvol gelukt, er word nu een mailtje verstuurd aan <b>$email</b> waarin de activerings url staat...";
}
elseif($actmail=="2"){
echo "De mededeling is toegevoegd.";
}
else{
echo "De aanmelding is gelukt, het is nu aan de webmaster om te beslissen of hij/zij je accepteerd als member van deze website...";
}
}
}
else{
?>
(Bovenstaand script heb ik bewerkt, dus het kan zijn dat er nog wat onnodige code in staat want die heb ik nog niet verwijderd)

Maar met bovenstaand script heb ik de tekst in de database gezet.

Maar nu wil ik dus ook met zo'n soort script, de tekst kunnen bewerken.

eagle
%Europe/Berlin %518 %2006, 13:27
Kort samengevat:
Lees het veld uit met behulp van SELECT. Laadt dat in je textarea, steek de inhoud van de textarea via POST terug in de database met behulp van UPDATE.

bkersten
%Europe/Berlin %537 %2006, 13:54
EDIT:

Bedankt!

Ik heb nu dit, maar het werkt nog niet en ik heb het gevoel dat ik iets vergeet.
Ik moet er wel bij zeggen: Ik ben nog geen ervaren PHP'er!

Dit heb ik tot nu toe:
<?php
mysql_connect("localhost", "", "") or die(mysql_error());
mysql_select_db("") or die(mysql_error());

$result = mysql_query("SELECT * FROM cms")
or die(mysql_error());

while($row = mysql_fetch_array( $result )) {
?>

<form>
<input type="hidden" name="submit" value="1"><br>
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $row['home']; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<?
}
?>

Maar nu heb ik het nog niet van: als ik op 'Opslaan' druk, word het opgeslagen. Dus de UPDATE.

eagle
%Europe/Berlin %554 %2006, 14:18
Je hebt geen db-naam, paswoord en username ingegeven.
Die update kan je maken, door ofwel je formulier te verwijzen naar een andere pagina, of naar zichzelf. Ik bespreek de optie met de andere pagina:
Je textarea heeft de naam "home", dus laat je formulier verwijzen naar een andere pagina mbv:

<form action="anderepagina.php" method="POST">
//je moet ook een submit knop toevoegen uiteraard

In de andere pagina is dan volgende variable universeel beschikbaar:

$_POST['home'];

Je kan deze dan invoegen:

mysql_query("UPDATE cmd SET veldnaam='".$_POST."' WHERE id='1'");

//Kleine tip, ik zag dat je volgende code gebruikt om te selecteren:

mysql_query("SELECT * FROM cms);

Het is beter te specifieren wat je precies wil:

mysql_query("SELECT veldnaam_1,veldnaam_2,...,veldnaam_n FROM cms");
//eventueel kan je ook de exacte rij opgeven: WHERE id='recordid'

bkersten
%Europe/Berlin %568 %2006, 14:38
Ik heb nu dit:
(ik wou het in het php bestand zelf).

<?php
// Make a MySQL Connection
mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

// Get all the data from the "cms" table
$result = mysql_query("SELECT * FROM cms")
or die(mysql_error());

if(!$submit){
while($row = mysql_fetch_array( $result )) {
?>

<form action="<? echo $PHP_SELF ?>" method="POST">
<input type="hidden" name="submit" value="1"><br>
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $row['home']; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<?
}
mysql_query("UPDATE cms SET home='".$_POST."' WHERE id='0'") or die(mysql_error());
}
?>

Maar als ik dan op: 'Opslaan' druk en ik ververs de pagina, dan staat er in het tekstveld: Array.

Wat kan ik fout gedaan hebben?

eagle
%Europe/Berlin %576 %2006, 14:49
Wel, je moet

while ($row = mysql_fetch_assoc($result)){
echo $row['je_veldnaam'];
}

gebruiken ipv van de fetch_array

bkersten
%Europe/Berlin %579 %2006, 14:54
Sorry, maar werkt ook niet.

Dit heb ik nu maar dit werkt niet:

<?php
// Make a MySQL Connection
mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("db") or die(mysql_error());

// Get all the data from the "cms" table
$result = mysql_query("SELECT * FROM cms")
or die(mysql_error());

if(!$submit){
while ($row = mysql_fetch_assoc($result)){
echo $row['home'];
}
?>

<form action="<? echo $PHP_SELF ?>" method="POST">
<input type="hidden" name="submit" value="1"><br>
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $row['home']; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<?
}
mysql_query("UPDATE cms SET home='".$_POST."' WHERE id='0'") or die(mysql_error());
?>

eagle
%Europe/Berlin %586 %2006, 15:04
Hehe, je hebt je wachtwoord gewijzigd :), denk je dat ik op je localhost kom inbreken? :p
Anyway, wat werkt er niet? Is "home" een veldnaam van je database? Voeg ook eens een else toe, want anders zal hij altijd updaten.
Ik durf er mijn hand niet voor in het vuur te steken, maar ik denk dat $PHP_SELF geen correcte verwijzing is naar de eigen pagina.

Je moet je post variable in je laatste mysql_statement wel een naam geven hé:

$_POST['home'];

bkersten
%Europe/Berlin %592 %2006, 15:12
Als ik dit heb:

<?php

require("../config.php");

// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM cms")
or die(mysql_error());

if(!$submit){
while($row = mysql_fetch_array( $result )) {
?>

<form action="<? echo $PHP_SELF ?>" method="POST">
<input type="hidden" name="submit" value="1"><br>
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $row['home']; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<?
}
$_POST['home'];
mysql_query("UPDATE cms SET home='".$_POST."' WHERE id='0'") or die(mysql_error());
}
?>

Krijg ik dit te zien als ik ga testen:

http://home.planet.nl/~kerst542/Afbeelding 1.png

eagle
%Europe/Berlin %613 %2006, 15:43
Wel, je moet

while ($row = mysql_fetch_assoc($result)){
echo $row['je_veldnaam'];
}

gebruiken ipv van de fetch_array
Het is al ver gekomen dat ik mezelf moet beginnen quoten :p
Mijn vraag blijft: is "home" een veldnaam van je database?

bkersten
%Europe/Berlin %615 %2006, 15:45
sorry, ja is een veldnaam.

eagle
%Europe/Berlin %616 %2006, 15:47
En wat is de error als je het met assoc probeert?

bkersten
%Europe/Berlin %617 %2006, 15:49
Hij geeft dan geen error maar dan zie ik dit:

http://home.planet.nl/~kerst542/Afbeelding 1.png

Code is nu dit:

<?php

require("../config.php");

// Get all the data from the "example" table
$result = mysql_query("SELECT * FROM cms")
or die(mysql_error());

if(!$submit){
while ($row = mysql_fetch_assoc($result)){
echo $row['home'];
}
?>

<form action="<? echo $PHP_SELF ?>" method="POST">
<input type="hidden" name="submit" value="1"><br>
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $row['home']; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<?
}
else{
if(!$home){
echo "Vul de verplichte velden in.";
}
else{
mysql_query("UPDATE cms SET home='".$_POST."' WHERE id='0'") or die(mysql_error());

echo "Succesvol.";
}
}
?>

eagle
%Europe/Berlin %622 %2006, 15:56
Wel, ik verander even heel je script, en gooi er nog een gratis functietje bij van me:
<?php
require("../config.php");

function mysqlOne($query)
{
$result = mysql_query($query);
$row = mysql_fetch_row($result);
return $row[0];
}



if($_POST['submit'] == ""){
$tekst = mysqlOne("SELECT home FROM cms WHERE id='1'");
?>

<form action="<? echo $PHP_SELF ?>" method="POST">
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $tekst; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<?
}else{
mysql_query("UPDATE cms SET home='".$_POST['home']."' WHERE id='1'") or die(mysql_error());
}
?>
Je moet in je database wel nakijken dat de tekst waarover het hier gaat een recordid 1 heeft.

Opmerking: een record-id 0 bestaat niet

bkersten
%Europe/Berlin %628 %2006, 16:05
Ik heb het even allemaal getest en als het ID klopt, (ID = 1) dan krijg ik onderstaand te zien bij het laatste script (bewerkt door eagle):

http://home.planet.nl/~kerst542/Afbeelding 3.png

En krijg ik dit te zien bij mijn script: (vind je in mijn vorige post hieronder).

http://home.planet.nl/~kerst542/Afbeelding 1.png

eagle
%Europe/Berlin %632 %2006, 16:10
Voer de query rechtsreeks uit in je phpMyAdmin. Dan kan je zien of er iets aan je database scheelt. Post het resultaat in een screenshot.

bkersten
%Europe/Berlin %635 %2006, 16:15
Ik zal het proberen.

By the way: Dit is een screenshot van mijn tabel: cms genaamd:

http://home.planet.nl/~kerst542/Afbeelding 2.png

eagle
%Europe/Berlin %637 %2006, 16:18
Je wijzigt best een paar dingen daarin:
zet id op "primary key" en "autoincremendt".
Dit voor toekomstig gebruik, het heeft geen invloed op het al dan niet slagen van de query.

eagle
%Europe/Berlin %641 %2006, 16:23
Zoals in de bijlage.
De primary key kan je zien door het streepje onder "id".

bkersten
%Europe/Berlin %641 %2006, 16:23
Het script dat eagle het laatste heeft gepost krijg ik het woord: 'Array' in het tekstveld te staan. Het woord wat in de database staat is 'Array', dus het woord word goed uit de database gehaald.
Maar de UPDATE werkt hier niet goed.

eagle
%Europe/Berlin %642 %2006, 16:25
Je moet eens wat specifieker zijn, probeer zelf ook wat echo's te doen om je probeem op te lossen. Wat werkt er niet aan de UPDATE?

bkersten
%Europe/Berlin %646 %2006, 16:31
In het tekstveld staat wel gewoon de tekst 'Array', maar als ik dan iets anders er in typ en op 'Opslaan' druk, komt er weer gewoon Array in het tekstveld te staan.

eagle
%Europe/Berlin %648 %2006, 16:34
Als je de waarde array rechtstreeks in de database wijzigt in iets anders, komt die Array dan nog terug?

bkersten
%Europe/Berlin %651 %2006, 16:38
Ik heb Array gewijzigd in: Test.
Het rare is dat er nu niets meer in het tekstveld verschijnt.

eagle
%Europe/Berlin %654 %2006, 16:43
Goed, stuur me even die php pagina en een .sql bestand van die mysql tabel. Ik zal het voor je fixen.

bkersten
%Europe/Berlin %656 %2006, 16:45
Ik heb de tabel 'cms' opnieuw aangemaakt met de goede waardes voor id.
Nu word de tekst: 'Test' wel gewoon goed weergegeven in het tekstveld.

Als ik dan in het tekstveld wat anders typ en ik druk op: 'Opslaan', dan gaat hij terug naar het begin. Dus dat er gewoon: 'Test' in het tekstveld staat.

eagle
%Europe/Berlin %657 %2006, 16:46
Stuur even je code en .sql bestand.

bkersten
%Europe/Berlin %662 %2006, 16:54
Ik heb het verstuurd naar het hotmail adres van eagle.

eagle
%Europe/Berlin %682 %2006, 17:23
Het werkt, er waren twee problemen:
Het datatype blob is niet aangeraden, voer volgende sql code uit rechtstreeks in je db.:

--
-- Tabel structuur voor tabel `cms`
--

DROP TABLE IF EXISTS `cms`;
CREATE TABLE `cms` (
`id` int(11) unsigned NOT NULL auto_increment,
`home` tinytext NOT NULL,
`nieuws` tinytext NOT NULL,
`weer` tinytext NOT NULL,
`applicaties` tinytext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Gegevens worden uitgevoerd voor tabel `cms`
--

INSERT INTO `cms` VALUES (1, 'Test8', '', '', '');



En volgende php code:

<?php
//je require statement

function mysqlOne($query)
{
$result = mysql_query($query);
$row = mysql_fetch_row($result);
return $row[0];
}
if($_POST['home'] != ""){
mysql_query("UPDATE cms SET home='".$_POST['home']."' WHERE id='1'") or die(mysql_error());
$_POST['home'] = "";
}
$tekst = mysqlOne("SELECT home FROM cms WHERE id='1'");
?>

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="POST">
Tekst op de beginpagina:<br>
<textarea name="home" rows="3"><? echo $tekst; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>

bkersten
%Europe/Berlin %685 %2006, 17:27
Heel erg bedankt!

eagle
%Europe/Berlin %689 %2006, 17:32
Graag gedaan! :)

Durnez
%Europe/Berlin %700 %2006, 17:48
hier heb ik ook snel even gebruik van gemaakt om 'm te testen en hij doet het voortreffelijk :P :D

bedankt hiervoor !! (ik ga 'm uiteraard wel nog aanpassen om te integreren om m'n site)

De Kale
%Europe/Berlin %502 %2006, 13:03
vergeet niet dat je nooit direct $_POST of andere superglobal waarden in je query moet stoppen.
valideer eerst je data tot veilige waarden
$user_id = (int) $_POST['id'];//het zal nu een int zijn en niet bv" 1; DELETE FROM users"

Durnez
%Europe/Berlin %779 %2006, 19:41
Nog eventjes de hulp vragen van de specialisten hier.. :P

Ik probeer dus nu het script enkele posts hierboven zodanig aan te passen dat ik alle mogelijke velden (van bvb. cms) ik één keer kan aanpassen.

Ik kwam tot volgend resultaat maar de tekst verschijnt niet in het kader en krijg deze error.. :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /usr/export/www/hosting/***.php on line 7


en dit is de code :


<?php
require("config.php");

function mysqlOne($query)
{
$result = mysql_query($query);
$row = mysql_fetch_row($result);
return $row[0];
}
if($_POST['nieuws_titel'] != ""){
mysql_query("UPDATE phpfreakz_flash_tutorial SET nieuws_titel='".$_POST['nieuws_titel']."' WHERE nieuws_id='1'") or die(mysql_error());
$_POST['nieuws_titel'] = "";
}
if($_POST['nieuws_tekst'] != ""){
mysql_query("UPDATE phpfreakz_flash_tutorial SET nieuws_tekst='".$_POST['nieuws_tekst']."' WHERE nieuws_id='1'") or die(mysql_error());
$_POST['nieuws_tekst'] = "";
}
$tekst1 = mysqlOne("SELECT nieuws_titel FROM phpfreakz_flash_tutorial WHERE nieuws_id='1'");
$tekst2 = mysqlOne("SELECT nieuws_tekst FROM phpfreakz_flash_tutorial WHERE nieuws_id='1'");
?>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="POST">
Nieuws_titel:<br>
<textarea name="nieuws_titel" rows="4"><? echo $tekst1; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="POST">
Nieuws_tekst:<br>
<textarea name="nieuws_tekst" rows="4"><? echo $tekst2; ?></textarea><br><br>
<input type="submit" value="Opslaan">
</form>



edit : script gewijzigt met de bedoeling alle mysql data van de tutorial van de kale en die andere te wijzigen ;)

Durnez
%Europe/Berlin %546 %2006, 14:06
waar iemand waar m'n fout ligt (het zullen er wss wel meerdere zijn maar goed) ?

bkersten
%Europe/Berlin %640 %2006, 16:22
Nog een vraag:

Ik kan in het form maar een bepaald aantal karakters kwijt en niet meer.
Weet iemand hoe dit kan? Ik heb ook al geprobeerd om het form groter te maken maar dit heeft geen zin. Ik denk dat het ergens anders aan ligt.

Weet iemand waaraan?

B.v.d.