/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problemer med indsættelse af data i databa~
Fra : Steffen Jespersen


Dato : 07-01-10 11:05

Der er en ting som jeg simpelthen ikke forstår. Det er et problem
med indsættelse af tekst vha. formular.
Der opstår nemlig en fejl ved indsættelse af en vis mængde tekst
vha. formular. Samme tekst kan nemt indsættes igennem phpmyadmin.

Selve teksten er ca. 2000 tegn. Jeg har læst mig frem til at
datatypen "text" kan rumme fra "1 to 65535 Characters" og derfor
burde det ikke være noget problem. Er der et kendt problem ved
større tekster og formularer? eller er det et helt tredje
problem.

Ellers er der ingen problemer overhovedet mht indsættelse af
tekst og billeder via formularen. Det er kun præcis den tekst som
ikke kan indsættes. Jeg har prøvet alt; slette teksten, sætte det
ind igen, kun tilføje et ord af gangen: ingenting ser ud til at
fungere.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Martin Larsen (07-01-2010)
Kommentar
Fra : Martin Larsen


Dato : 07-01-10 11:45

Steffen Jespersen wrote:

> Der er en ting som jeg simpelthen ikke forstår. Det er et problem
> med indsættelse af tekst vha. formular.
> Der opstår nemlig en fejl ved indsættelse af en vis mængde tekst
> vha. formular. Samme tekst kan nemt indsættes igennem phpmyadmin.

Prøv at indsætte følgende debuglinje i dit script:

echo "<pre>", print_r($_POST,1), "</pre>";

Hvad er så outputtet fra dit tekstfelt?

Martin


Steffen Jespersen (07-01-2010)
Kommentar
Fra : Steffen Jespersen


Dato : 07-01-10 11:49

Martin Larsen wrote in dk.edb.internet.webdesign.serverside.php:
> Steffen Jespersen wrote:
>
> > Der er en ting som jeg simpelthen ikke forstår. Det er et problem
> > med indsættelse af tekst vha. formular.
> > Der opstår nemlig en fejl ved indsættelse af en vis mængde tekst
> > vha. formular. Samme tekst kan nemt indsættes igennem phpmyadmin.
>
> Prøv at indsætte følgende debuglinje i dit script:
>
> echo "<pre>", print_r($_POST,1), "</pre>";
>
> Hvad er så outputtet fra dit tekstfelt?
>
> Martin
>

Hvor skal jeg indsætte det i følgende?
         // opbyg forespørgsel til visning af pågældende række
         $query = "SELECT * FROM whiskey WHERE id=$id";
         $result = mysql_query($query);
         // hent resultatet ind i et array
         $row = mysql_fetch_array($result);
         ?>
      
         <h3>Rediger Indhold</h3>
         <form action="index_edit_do.php" method="post">
         <fieldset>
         <input type="hidden" name="id" value="<?php echo $row['id'];?>" />
         Titel: <br/>
         <input type="text" name="titel" value="<?php echo $row['titel'];?>"
/>
         <br/>
         Indhold: <br/>
<?php
         $Indhold = stripslashes($row['indhold']);
         $Indhold = str_replace("<br />", "", $Indhold);
         ?>
         <textarea name="indhold" cols="30" rows="9"><?php echo
$Indhold;?></textarea>
         <br/>
<input type="text" name="billede" value="<?php echo
$row['billede']; ?>" />
<br />
         <input type="submit" value="Gem Ændringer" />
         </fieldset>
         </form>


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin Larsen (07-01-2010)
Kommentar
Fra : Martin Larsen


Dato : 07-01-10 11:57

Steffen Jespersen wrote:

> Hvor skal jeg indsætte det i følgende?

Aller øverst i index_edit_do.php, evt. efterfulgt af en die:

echo "<pre>", print_r($_POST,1), "</pre>";
die;

"die" bevirker at scriptet stopper med det samme så resultatet vises.

Steffen Jespersen (07-01-2010)
Kommentar
Fra : Steffen Jespersen


Dato : 07-01-10 12:01

Martin Larsen wrote in dk.edb.internet.webdesign.serverside.php:
> Steffen Jespersen wrote:
>
> > Hvor skal jeg indsætte det i følgende?
>
> Aller øverst i index_edit_do.php, evt. efterfulgt af en die:
>
> echo "<pre>", print_r($_POST,1), "</pre>";
> die;
>
> "die" bevirker at scriptet stopper med det samme så resultatet vises.

Outputtet:
Array
(
[id] => 13
[titel] => Fremstilling
[indhold] => Whisky fremstilles af fermenteret byg, rug, hvede
eller majs, der destilleres. Maltwhisky er lavet af byg og kan have en
udpræget røgsmag, da bygmalten ryges over tørv inden brygningen.

Whisky brygges på samme måde som øl, og destilleres dernæst. Det er kun
30-40% af destillatet, der bruges til whisky. Det første såkaldte
"fusel" hældes bort, da det indeholder forskellige ubehagelige
organiske forbindelser. Det sidste har for lav alkoholprocent til at
kunne bruges til whisky og hældes traditionelt over enebær og sælges
som gin. Whiskyen opbevares på fade "casks" af egetræ.

Ud over de traditionelle aftapninger som destillerierne sælger, sælges
også "uafhængige aftapninger". Det er whiskykøbmænd, der køber et eller
flere fade hos destillerierne, og opbevarer dem og sælger dem, som de
vil. Det er derfor et anderledes produkt end standardproduktet.

En whisky skal være på 40% og mindst 3 år gammel for at kunne kaldes
for whisky. Når den kommer fra fadet er den ofte på 50-60% Cask
strength, og fortyndes derfor ofte ned til 42%-46%.

Under lagringen trænger væske - herunder alkohol - ud gennem porerne i
træfadene. Denne del som udgør op til 1½-2½% årligt betegnet som
angel's share (englenes andel). Udtrykket stammer fra den franske
cognac og armagnac-distrikter, hvorfra det har bredt sig til de
whiskyproducerende områder.

Farven på whisky kan være justeret med karamel (E150), og whiskyen kan
desuden være koldfiltreret. Dette vil sige, at den har været kølet ned
for at fjerne urenheder. Koldfiltreringen blev indført efter at navnlig
amerikanerne havde returneret whisky fordi man fejlagtigt troede at der
var noget galt med whiskyen da den blev uklar ved kølig opbevaring pga
fortætning af olierne i whiskyen. En del af de stoffer, der frasorteres
er dog smagsstoffer (olier) dvs. filtreringen fjerner en del af smagen.
Derfor er nogle aftappere og destillerier begyndt at aftappe whiskyen
uden koldfiltrering. For at undgå at whisky bliver uklar (cloudy)
aftappes i stedet ved højere alkoholprocent (46+ procent)

Kilde:Wikipedia
[billede] => billeder/pic3.jpg
)


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin Larsen (07-01-2010)
Kommentar
Fra : Martin Larsen


Dato : 07-01-10 12:09

Steffen Jespersen wrote:

> Outputtet:
> Array

Vis mig line de linjer hvor du indsætter indholdet i databasen ...

Steffen Jespersen (07-01-2010)
Kommentar
Fra : Steffen Jespersen


Dato : 07-01-10 12:13

Martin Larsen wrote in dk.edb.internet.webdesign.serverside.php:
> Steffen Jespersen wrote:
>
> > Outputtet:
> > Array
>
> Vis mig line de linjer hvor du indsætter indholdet i databasen ...

Jeg har ikke nogen problemer med at indsætte data, men det er
åbenbart efter en vis længde.

      <?php
include("../../inc_adgang.php");
         // hent formulardata ind i variable
         $id=$_REQUEST['id'];
         $titel=$_REQUEST['titel'];
         $indhold=$_REQUEST['indhold'];
         $billede=$_REQUEST['billede'];
         
         // opbyg forespørgsel til indsættelse af data
         $query = "UPDATE whiskey
          SET titel='$titel', indhold='$indhold',
billede='$billede'
                                     WHERE id='$id'";
         $result = mysql_query($query);
         if (mysql_affected_rows() == 1) {
          echo "Siden $titel er rettet";
         } else {
          echo "Der er opstået en fejl";
         }
         
         // luk forbindelse til databasen
         mysql_close();

?>


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin Larsen (07-01-2010)
Kommentar
Fra : Martin Larsen


Dato : 07-01-10 12:36

Steffen Jespersen wrote:

> Jeg har ikke nogen problemer med at indsætte data, men det er
> åbenbart efter en vis længde.

Prøv med :

$indhold = mysql_real_escape_string($_REQUEST['indhold']);

Også gerne på de andre felter ...


Steffen Jespersen (07-01-2010)
Kommentar
Fra : Steffen Jespersen


Dato : 07-01-10 12:41

Martin Larsen wrote in dk.edb.internet.webdesign.serverside.php:
> Steffen Jespersen wrote:
>
> > Jeg har ikke nogen problemer med at indsætte data, men det er
> > åbenbart efter en vis længde.
>
> Prøv med :
>
> $indhold = mysql_real_escape_string($_REQUEST['indhold']);
>
> Også gerne på de andre felter ...
>

Det virker!!! Mange tak!

Kan du forklare mig, hvad der sker i den linje?

På forhånd tak.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Bertel Lund Hansen (07-01-2010)
Kommentar
Fra : Bertel Lund Hansen


Dato : 07-01-10 12:51

Steffen Jespersen skrev:

> > $indhold = mysql_real_escape_string($_REQUEST['indhold']);

> Det virker!!! Mange tak!

> Kan du forklare mig, hvad der sker i den linje?

Jeg kan give dig et eksempel i PHP som viser samme problem.

Nul problem:
   $text = "Bertel Lund Hansen";
   echo $text;

Problem
   $text = "Bertel "Kanon" Hansen";
   echo $text;

Det går galt fordi der optræder anførselstegn midt i strengen.
Løsningen er at skrive sådan (som du måske ved):

   $text = "Bertel \"Kanon\" Hansen";

Det kaldes "at escape anførselstegnene", og \ kaldes et
escapetegn (i PHP - andre sprog bruger andre tegn) fordi man
'flygter fra' (escaper) den almindelige behandling af
anførselstegn.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Stig Johansen (07-01-2010)
Kommentar
Fra : Stig Johansen


Dato : 07-01-10 13:44

Bertel Lund Hansen wrote:

> Det går galt fordi der optræder anførselstegn midt i strengen.

Og som sædvanligt, er løsningen _altid_ at bruge parameterized
queries/prepared statements, for så er man ude over det fis.

--
Med venlig hilsen
Stig Johansen

Martin Larsen (07-01-2010)
Kommentar
Fra : Martin Larsen


Dato : 07-01-10 13:43

Steffen Jespersen wrote:

> Kan du forklare mig, hvad der sker i den linje?

Bertel har givet en udmærket forklaring.

Jeg kan så tilføje at det også gør din kode meget mere sikker overfor
såkaldt SQL-injection, dvs. hvor en person indsætter noget snedigt kode
i dit tekstfelt og derved får uautoriseret adgang!

Derfor bør man altid escape tekst som kommer fra browseren, fx med
mysql_real_escape_string().

Martin

Steffen Jespersen (07-01-2010)
Kommentar
Fra : Steffen Jespersen


Dato : 07-01-10 13:45

Martin Larsen wrote in dk.edb.internet.webdesign.serverside.php:
> Steffen Jespersen wrote:
>
> > Kan du forklare mig, hvad der sker i den linje?
>
> Bertel har givet en udmærket forklaring.
>
> Jeg kan så tilføje at det også gør din kode meget mere sikker overfor
> såkaldt SQL-injection, dvs. hvor en person indsætter noget snedigt kode
> i dit tekstfelt og derved får uautoriseret adgang!
>
> Derfor bør man altid escape tekst som kommer fra browseren, fx med
> mysql_real_escape_string().
>
> Martin

Ja jeg forstår det egentlig godt, men hvad er det for nogle tegn som gør,
at jeg ikke kunne indsætte yderligere tekst?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Martin Larsen (07-01-2010)
Kommentar
Fra : Martin Larsen


Dato : 07-01-10 14:03

Steffen Jespersen wrote:

> Ja jeg forstår det egentlig godt, men hvad er det for nogle tegn som gør,
> at jeg ikke kunne indsætte yderligere tekst?

Det kan være flere tegn, men i hvert fald vil apostroffen i angel's
share gøre det!

Martin

Stig Johansen (07-01-2010)
Kommentar
Fra : Stig Johansen


Dato : 07-01-10 11:52

Steffen Jespersen wrote:

> Jeg har læst mig frem til at
> datatypen "text" kan rumme fra "1 to 65535 Characters" og derfor
> burde det ikke være noget problem.

Du skal muligvis over i dk.edb.database, for datatypen 'text' er stærkt
afhængig af hvilken database du bruger.

Men hvis du bruger en get og ikke post, så kan det meget vel tænkes, at der
er en begrænsning dér (=sikkerhedsmæssige årsager).

--
Med venlig hilsen
Stig Johansen

Steffen Jespersen (07-01-2010)
Kommentar
Fra : Steffen Jespersen


Dato : 07-01-10 11:58

Stig Johansen wrote in dk.edb.internet.webdesign.serverside.php:
> Steffen Jespersen wrote:
>
> > Jeg har læst mig frem til at
> > datatypen "text" kan rumme fra "1 to 65535 Characters" og derfor
> > burde det ikke være noget problem.
>
> Du skal muligvis over i dk.edb.database, for datatypen 'text' er stærkt
> afhængig af hvilken database du bruger.
>
> Men hvis du bruger en get og ikke post, så kan det meget vel tænkes, at der
> er en begrænsning dér (=sikkerhedsmæssige årsager).
>
> --
> Med venlig hilsen
> Stig Johansen

Jeg bruger "POST", så der burde ikke være nogen begrænsning.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste