Kan geen leesteksn opslaan met input??

Status
Niet open voor verdere reacties.

nilix

Gebruiker
Lid geworden
5 aug 2009
Berichten
66
Hallo,

Ik heb een form gemaakt en hier kunnen mensen tekst in opslaan deze word dan naar een mysql data base geplakt.

Probleem is dat als er leestekens in de tekst staan zoals: ' of een : dan kan de tekst niet worden opgeslagen.
Krijg geen foutmelding maar er word niks opgeslagen of maar tot aan het leesteken


Moet ik hier iets aan toevoegen?? of veranderen??


<form method="post" action"=<?php echo $PHP_SELF; ?> ">
<textarea name fototekst rows=15 cols=50></textarea>
<input type=hidden name=action value=update>
<input type=submit name=submit value=opslaan>

</form>



iemand een idee???
 
oo hoe?

mm. oke dat zou ook kunnen dat ik het in mqsql hoek moet zoeken ikdacht aan de <input>

Heeft iemand hier een voorbeeld van voor me?
 
Als het goed is heb je ergens iets staan als
PHP:
mysql_query("INSERT INTO tabel (tekst) VALUES ('" . $_POST['fototekst'] . "')");
Hier moet je dan van maken
PHP:
mysql_query("INSERT INTO tabel (tekst) VALUES ('" . mysql_real_escape_string($_POST['fototekst']) . "')");
 
Als het goed is heb je ergens iets staan als
PHP:
mysql_query("INSERT INTO tabel (tekst) VALUES ('" . $_POST['fototekst'] . "')");
Hier moet je dan van maken
PHP:
mysql_query("INSERT INTO tabel (tekst) VALUES ('" . mysql_real_escape_string($_POST['fototekst']) . "')");



Oke dan moet ik de mijne ook veranderen.

Heb nu

PHP:
mysql_query ("UPDATE leden SET foto='$foto'  WHERE user='$id' ");


Ik doe wel iets fout want nu worden er steeds een \ geplaatste voor het ' of " teken

Ik gebruik update maar dat moet toch geen probleem zijn effect moet het zelfde zijn als insert lijkt me?
 
Laatst bewerkt:
Dat hoort zo. Met die backslash wordt aan de SQL-server verteld dat het teken letterlijk genomen moet worden en niet gezien moet worden als afsluiting van de aanhalingstekens in je query (of bedoel je dat de backslashes ook in de database komen? dat hoort niet).
 
toch een fout van mij moet wel :)

Ja klopt ik krijg nu de \ er voor en die slaat die ook op.

Als ik verder op de tekst weer opvraag staan de \ tekens er ook in dat lees niet makkelijk in een tekst dus doe ik fout.
 
Dat is vreemd. Als de backslashes ook in de database staan komt dat meestal omdat magic quotes aan staat. Alleen, in dat geval had je je oorspronkelijke probleem niet gehad.

Kan je eens controleren of magic quotes aan staat en je code (met name het deel waarbij je naar de database schrijft en het er weer uit haalt) hier posten?
 
Met het script

Hier de stukken uit mijn script zoals hij was. Onderaan het text veld dat de tekst weergeeft uit de database hier kan je deze gelijk veranderen en weer opslaan.
Maar helaas zonder de ' de : mag wel Maar de 'en "niet maar klopt ook volgens wat je eerder vertelde.

Hoop dat mijn script geen zooitje is :)

PHP:
if ($_POST['submit']=="opslaan") {
mysql_query ( "UPDATE leden SET fototekst='$fototekst' WHERE gebruikersnaam='$id'");
echo"<meta http-equiv=REFRESH content=0; url=index.php>";
}

verder op heb ik dit dat de tekst weer leest en waar je het ook weer kan veranderen.
PHP:
$result= mysql_query("SELECT fototekst FROM leden WHERE gebruikersnaam='$id'");
$data=mysql_fetch_assoc($result);
?>
<form method="post" action"=<?php echo $PHP_SELF; ?>">
<?php echo $data['gebruikersnaam'] ?><br>
<textarea name=fototekst rows=15 cols=50><?php echo $data['fototekst'] ?></textarea>
<br><BR>
<input type="hidden" name="action" value="update">
<input type="submit" name="submit" value="opslaan">
</form>
<?php
mysql_close();


groetjes
 
En als je regel 2 van het eerste stuk code verandert in
PHP:
mysql_query ( "UPDATE leden SET fototekst='" . mysql_real_escape_string($fototekst) . "' WHERE gebruikersnaam='$id'");
en de rest van de code hetzelfde laat, komen evt. backslashes in de database te staan?
 
En als je regel 2 van het eerste stuk code verandert in
PHP:
mysql_query ( "UPDATE leden SET fototekst='" . mysql_real_escape_string($fototekst) . "' WHERE gebruikersnaam='$id'");
en de rest van de code hetzelfde laat, komen evt. backslashes in de database te staan?


Ja nu werkt het wel.

Moet ik iets verkeert getyped hebben in de vorige optie van je.

heel erg bedankt voor je hulp.
 
Als eerst de backslashes ook te zien waren in de opgehaalde gegeven heb ik het vermoeden dat je mysql_real_escape_string "te vaak" hebt gebruikt waardoor "ge-escapete" tekst nogmaals "ge-escapet" werd, maar mooi dat het nu werkt.

Ik heb nog wel een paar opmerkingen over je code. Het is geen zooitje, maar er zijn een paar dingen die beter kunnen.
PHP:
if ($_POST['submit']=="opslaan")
Dit is geen betrouwbare controle. Er zijn browser die dit niet meesturen als iemand het formulier invult en op enter drukt i.p.v. op de submit-knop klikt. Een betrouwbare controle is
PHP:
 if ($_SERVER['REQUEST_METHOD'] == "POST")

In twee query's gebruikt je de variabele $id. Als deze door de gebruiker ingevoerd kan worden moet je die ook escapen met mysql_real_escape_string.

Ten slotte moet je nog even aanhalingstekens toevoegen aan de attributen van de textarea:
HTML:
<textarea name="fototekst" rows="15" cols="50">
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan