[PHP] $_POST gegevens verdwijnen

Pagina: 1
Acties:
  • 447 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
Hoi,

Ik heb een form op de volgende wijze:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<FORM action="edit.php?act=save&file=<? echo $file; ?>&dir=<? echo $sofar; ?>" method="POST">
<TEXTAREA NAME="contents" COLS="94" ROWS="30" ID="codepress" CLASS="codepress php linenumbers-on">                     
<? 
  // open handle
  $handle = fopen($fullpath, "r+");
  $contents = fread($handle, filesize($fullpath));
  //    echo contents and close handle
    echo $contents;
    fclose($handle);
?>
</TEXTAREA>
<input type="submit" value="Save">
<input type="button" value="Cancel" onclick="history.go(-1)">
</FORM>


Zoals je ziet gebruik ik hierin zowel NAME alswel ID
- Name voor het verwerken van het form
- ID voor het aanroepen van Codepress

Zodra ik echter dit vervolgens echo:

PHP:
1
2
3
4
5
6
7
<?
if($act == "save") {
echo "Savetext ";
echo $_POST['contents'];
echo $_POST['codepress'];
}
?>


Krijg ik geen results :?
Als ik ID="codepress" verwijder werkt het perfect .. maar dan kan ik dat dus niet gebruiken.

NAME en ID zouden toch volledig los van elkaar moeten staan? Of zie ik hier iets over het hoofd?

[ Voor 4% gewijzigd door r0b op 22-04-2007 01:57 ]


Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
Volgens je eigen site ;) [link weggehaald, terwijl ik gewoon op 'project' heb geklikt op je homepage']niet worden meegegeven. Enkel de class name.

code:
1
2
3
<textarea id="myCpWindow" class="codepress javascript linenumbers-off">
   // your code here
</textarea>


Haal dus die ID weg. Blijkbaar komt je browser/php/whatever in de war door 2 verschillende namen.

[ Voor 131% gewijzigd door mrFoce op 22-04-2007 02:15 ]


Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
gideon82 schreef op zondag 22 april 2007 @ 01:58:
Volgens je eigen site ;) *knip*
hoeft ID="codepress'' niet worden meegegeven. Enkel de class name.

code:
1
2
3
<textarea id="myCpWindow" class="codepress javascript linenumbers-off">
   // your code here
</textarea>


Haal dus die ID weg. Blijkbaar komt je browser/php/whatever in de war door 2 verschillende namen.
Nada. ID weghalen zorgt ervoor dat CodePress helemaal niet werkt. Maar ik ga daar ook even nazoeken of dat eerder voorgekomen is.

zou je de link naar de dev-site even weg willen halen? :+

"[link weggehaald, terwijl ik gewoon op 'project' heb geklikt op je homepage']"
klopt, was een foutje van mij. dus bedankt :*



Volgens de docs zou codepress inderdaad ook zonder ID moeten werken, dit is echter niet het geval.
De fout zal dan ook ergens hier in zitten:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CodePress.run = function() {
    CodePress.engine = CodePress.getEngine();
    s = document.getElementsByTagName('script');
    for(var i=0,n=s.length;i<n;i++) {
        if(s[i].src.match('codepress.js')) {
            CodePress.path = s[i].src.replace('codepress.js','');
        }
    }
    t = document.getElementsByTagName('textarea');
    for(var i=0,n=t.length;i<n;i++) {
        if(t[i].className.match('codepress')) {
            id = t[i].id;
            t[i].id = id+'_cp';
            eval(id+' = new CodePress(t[i])');
            t[i].parentNode.insertBefore(eval(id), t[i]);
        } 
    }
}

Ik kan aanwijzen waar ik "id" voor zou komen, maar dan houdt mijn JavaScript kennis echt op .. :+

[ Voor 43% gewijzigd door r0b op 22-04-2007 02:25 ]


Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
Ik weet niet wat de functie className.match doet. Maar misschien doet die een regExp op Class=" ".. Daar moet volgende de docs wel codepress instaan. Dus als class="codepress .." erin zit, gaat die de textarea bewerken. Anders skipt die hem. Zover ik kan zien. Misschien wel even handig om te vermelden welke versie je gebruikt

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
gideon82 schreef op zondag 22 april 2007 @ 02:44:
Ik weet niet wat de functie className.match doet. Maar misschien doet die een regExp op Class=" ".. Daar moet volgende de docs wel codepress instaan. Dus als class="codepress .." erin zit, gaat die de textarea bewerken. Anders skipt die hem. Zover ik kan zien. Misschien wel even handig om te vermelden welke versie je gebruikt
Inderdaad, die had ik ook gezien.
Mijn interpretatie ervan is:if classname matches 'codepress' {
evaluate id+: initiate new codepress window

Maar de class staat dus op codepress (en het werkt ook). Haal ik de ID geheel weg, werkt codepress niet. Laat ik ID erin; krijg ik geen $_POST resultaat van m'n textarea.

Ik heb de laatst publiekelijke versie (0.9.3)

Acties:
  • 0 Henk 'm!

Verwijderd

Moet $act niet $_GET['act']; zijn? Afaik zijn er wel servers die dat accepteren. Maar lang niet alle.

Wat zeggen de variablen als ze buiten het if statement zijn?

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
Verwijderd schreef op zondag 22 april 2007 @ 17:02:
Moet $act niet $_GET['act']; zijn? Afaik zijn er wel servers die dat accepteren. Maar lang niet alle.

Wat zeggen de variablen als ze buiten het if statement zijn?
Het werkt al zodra ik ID uit de textarea weghaal, dus dat deel lijkt wel te werken.
Het probleem is alleen dat ik een ID én NAME nodig heb.

Acties:
  • 0 Henk 'm!

Verwijderd

Het werkt al zodra ik ID uit de textarea weghaal, dus dat deel lijkt wel te werken.
Volgens mij moet je niet kijken naar wanneer het wel werkt, maar je moet kijken naar waarom het niet werkt. Ik denk namenlijk, dat de ID en de NAME niets met het resultaat van het posten van de form te maken hebben. De method die je in de form hebt gezet (ben ff de volledige naam vergeten) is POST. Waarom gebruik je dan
HTML:
1
.....edit.php?act=save&file=<? echo $file; ?>&dir=<? echo $sofar; ?>"........

Wat gebeurt er, als je
PHP:
1
<?php print_r( $_POST ); ?>
doet?
(dus zonder if act=="save")

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
Verwijderd schreef op zondag 22 april 2007 @ 17:58:
[...]


Volgens mij moet je niet kijken naar wanneer het wel werkt, maar je moet kijken naar waarom het niet werkt. Ik denk namenlijk, dat de ID en de NAME niets met het resultaat van het posten van de form te maken hebben. De method die je in de form hebt gezet (ben ff de volledige naam vergeten) is POST. Waarom gebruik je dan
HTML:
1
.....edit.php?act=save&file=<? echo $file; ?>&dir=<? echo $sofar; ?>"........
Wat bedoel je precies?
Wat gebeurt er, als je
PHP:
1
<?php print_r( $_POST ); ?>
doet?
(dus zonder if act=="save")
Getest, geeft hetzelfde resultaat.

Acties:
  • 0 Henk 'm!

Verwijderd

je kan probleemloos get en post door elkaar gebruiken:
formdata via post en nog wat andere data via de action-tag, zoals hij doet

Acties:
  • 0 Henk 'm!

Verwijderd

Als je edit.php nou eens zo doet:
<pre>
<?php print_r($_GET);print_r($_POST);?>
</pre>

En vervolgens de output hier neerzet?

Acties:
  • 0 Henk 'm!

Verwijderd

Hij bedoelt dat je GET data (alles achter .php?) en POST data (je formulier) door elkaar gebruikt, maar dat hoort inderdaad gewoon te werken.

Acties:
  • 0 Henk 'm!

Verwijderd

En lees dit even:
http://nl3.php.net/manual/en/security.globals.php

(zal je probleem niet oplossen, maar zou je wel moeten weten)

Acties:
  • 0 Henk 'm!

Verwijderd

Gooi je HTML anders even door de validator van w3c en test hem daarna met javascript uitgeschakeld in je browser, dan weet je gelijk waar je de fout moet zoeken.

Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23-08 23:43
Ik heb ergens gelezen dat id en name niet met verschillende inhoud gebruikt mogen worden. Kan het niet gelijk terugvinden, maar zal bij w3.org moeten zijn geweest.

Acties:
  • 0 Henk 'm!

  • r0b
  • Registratie: December 2002
  • Laatst online: 14:54
Verwijderd schreef op zondag 22 april 2007 @ 20:01:
Als je edit.php nou eens zo doet:
<pre>
<?php print_r($_GET);print_r($_POST);?>
</pre>

En vervolgens de output hier neerzet?
Array ( [file] => /old/test/boo/bla.txt [dir] => /old/test/boo ) Array ( )
Verwijderd schreef op zondag 22 april 2007 @ 20:05:
En lees dit even:
http://nl3.php.net/manual/en/security.globals.php

(zal je probleem niet oplossen, maar zou je wel moeten weten)
Weet ik vanaf, ja. Bedankt :)
Bolukan schreef op zondag 22 april 2007 @ 20:09:
Ik heb ergens gelezen dat id en name niet met verschillende inhoud gebruikt mogen worden. Kan het niet gelijk terugvinden, maar zal bij w3.org moeten zijn geweest.
Zelfs als deze gelijk staan werkt het niet?

Wat betreft de $_GET vars: deze worden gebruikt voor een ander onderdeel van het script. Ik zal echter eens deze uitzetten en kijken wat dat doet ...

Acties:
  • 0 Henk 'm!

Verwijderd

Wat vind de w3c-validator van je HTML?
Heb je het geprobeerd zonder javascript?

edit:
NB: Dit is vrijwel zeker geen PHP-probleem, maar het lijkt of je browser gewoon geen data stuurt. Zoek het probleem dus niet bij PHP, maar bij je browser. Probeer verschillende browsers, check je HTML, javascript, etc. Om 100% uit te sluiten dat het een PHP-probleem is: ontdek wat je browser stuurt door middel van wireshark oid en bekijk de 'raw post data' die PHP binnen krijgt (zou je even moeten googlen hoe dat moet).

->
Try the poorly documented $GLOBALS['HTTP_RAW_POST_DATA'] variable and the
always_populate_raw_post_data configuration directive in php.ini

[ Voor 86% gewijzigd door Verwijderd op 23-04-2007 11:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

je hebt op dit moment 2 verschillende dingen codepress... een id en een class. waarschijnlijk worden die u door elkaar gegooid.

met andere woorden.. verander eens de naam van je ID. dus bijvoorbeeld codepress2 en kijjk of die wel goed data mee geeft.
Pagina: 1