Avatar billede michael_f Nybegynder
13. april 2005 - 13:16 Der er 46 kommentarer og
1 løsning

problemer med at overføre variabel

Jeg kan ikke overføre variabel imellem 2 php sider. Variablen er erklæret således: $delete = $_POST['delete'];. Det er så meningen at når man trykker på "YES" så bliver man ledt over på en anden side men DESVÆRRE ikke med indholdet af variablen.

Her er side 1:

<?php

$delete = $_POST['delete'];
echo "<font size=5px>";
echo "Are you sure you want to delete pc(s) with serial nr:"."<br>" ;
echo "<font color=red>";
echo "<font size=10px"."<br>"."<br>";
?>
<div id="deleteconfirm">
<?php

for($i=0;$i<20;$i++)
{

    echo "$delete[$i]";
    echo "<br>";
    if($delete[$i]=="")
      {
      break;
      }
}



?>
<tr>
<td>
<div id="deleteyes">
<form action="http://risserver/deleteconfirmyes.php" method="POST">

<input type="submit" value="YES"></td>
</form>
</div>


<div id="deleteno">

<form action="http://risserver/deletepc.php" method="POST">

<input type="submit" value="NO">
</td>
</tr>
</form>
</div>

Efter tryk på YES:

<?php
$delete = $_POST['delete'];
include("C:\inetpub\wwwroot\config.php");
echo "$delete[0]";
?>

Hvad gøres forkert her - for der bliver ikke udskrevet noget på skærmen med denne kommando: echo "$delete[0]";
Avatar billede busschou Praktikant
13. april 2005 - 13:18 #1
så skal du lægge den som en hidden i din form så kommer den med
Avatar billede busschou Praktikant
13. april 2005 - 13:19 #2
<form action="http://risserver/deleteconfirmyes.php" method="POST">
<input type="hidden" value="<?echo $delete?>">
<input type="submit" value="YES"></td>
</form>
Avatar billede barklund Nybegynder
13. april 2005 - 13:20 #3
Altså efter

<form action="http://risserver/deleteconfirmyes.php" method="POST">

Skrive:

<input type="hidden" name="delete" value="<?php print $delete;?>">
Avatar billede barklund Nybegynder
13. april 2005 - 13:20 #4
damn, alt for sent :/
Avatar billede busschou Praktikant
13. april 2005 - 13:21 #5
;o)
Avatar billede michael_f Nybegynder
13. april 2005 - 13:56 #6
Det ændrer desværre ingenting. Kan stadig ikke udskrive noget efter der er blevet trykket på YES og følgende programlinger køres igennem:

<?php
$delete = $_POST['delete'];
include("C:\inetpub\wwwroot\config.php");
echo "$delete[0]";
?>

Any clues?
Avatar billede barklund Nybegynder
13. april 2005 - 13:58 #7
$delete[0]? Det er jo bare en streng.
Avatar billede busschou Praktikant
13. april 2005 - 13:58 #8
så kan barklund komme på banen igen :o)
Avatar billede michael_f Nybegynder
13. april 2005 - 14:14 #9
skulle det så være nok at skrive: echo $delete;
???
Avatar billede barklund Nybegynder
13. april 2005 - 14:18 #10
Ja, hvis du bare vil udskrive den :)
Avatar billede michael_f Nybegynder
13. april 2005 - 14:21 #11
der bliver ikke udskrvet noget. Samme problem som i starten :(
Avatar billede barklund Nybegynder
13. april 2005 - 14:28 #12
Du giver os ikke meget at arbejde med. Har du prøvet at debugge det den mindste smule selv? For eksempel skrive var_dump($_POST) for at se, om der overhovedet blive overført noget til deleteconfirmyes.php. Vi andre kan jo ikke se dine filer, så vi kan kun gætte.
Avatar billede michael_f Nybegynder
13. april 2005 - 14:35 #13
ok men er ny til at programmere så vidste ikke man kunne det. Prøver lige nu.
Avatar billede michael_f Nybegynder
13. april 2005 - 14:36 #14
Den skriver: array(0) { }

Så jeg tror ikke der kommer noget med over.
Avatar billede barklund Nybegynder
13. april 2005 - 14:55 #15
Ah, i busschou's version var der ikke noget name - du skal skrive:

<input type="hidden" name="delete" value="<?php print $delete;?>">
Avatar billede busschou Praktikant
13. april 2005 - 14:57 #16
doh godt set barklund...så var jeg alligevel for hurtig trods alt
Avatar billede michael_f Nybegynder
13. april 2005 - 15:35 #17
Nu bliver den overført. Genialt tak!!! Men nu får jeg bare udskrevet array på skærmen. Jeg har prøvet at lave en løkke som skal udskrive arrayet men uden held.
Avatar billede barklund Nybegynder
13. april 2005 - 15:59 #18
Skal du da have det udskrevet? Skal du ikke bare slette det? Og du har den vel liggende i din $delete-variabel?
Avatar billede michael_f Nybegynder
13. april 2005 - 16:00 #19
jeg skal bare skrive at "nu har slettet pc med serienummer $delete". Derfor skal jeg bruge indholdet.
Avatar billede stokke Nybegynder
13. april 2005 - 16:54 #20
Hvis du skal have overført $delete som et array, skal du måske bruge flg. name i stedet:

<input type="hidden" name="delete[]" value="<?php print $delete;?>">
Avatar billede barklund Nybegynder
13. april 2005 - 16:58 #21
Men ligger den ikke i din $delete variabel?
Avatar billede stokke Nybegynder
13. april 2005 - 17:07 #22
OK - den har jeg misforstået. Hvis $delete allerede er et array inden den lægges i input, skal man lige bruge serialize for at lave en byte-stream version af værdierne inden den lægges i value feltet.

<?php
$delete = serialize($delete);
?>

<input type="hidden" name="delete" value="<?php print $delete;?>">

Og efter valiablen er overført, skal man bruge unserialize for at lave den om til array igen:

<?php

$delete = $_POST['delete'];
$delete = unserialize($delete);
?>
Avatar billede barklund Nybegynder
13. april 2005 - 17:11 #23
Jeg tror altså bare, at $delete er en almindelig tekststreng - så vidt jeg har forstået det.
Avatar billede michael_f Nybegynder
14. april 2005 - 13:13 #24
Stokke: Dette gør desværre ingen forskel. Her er output ved brug af var_dump($_POST)  :

array(1) { ["delete"]=> array(1) { [0]=> string(14) "a:1:{i:0;s:10:" } }
Avatar billede barklund Nybegynder
14. april 2005 - 13:52 #25
Men hvad giver:

var_dump(unserialize($_POST['delete']));

så?
Avatar billede stokke Nybegynder
14. april 2005 - 13:58 #26
Jeg tror ikke man skal bruge unserialize på den måde. $_POST er jo i forvejen et array, som ikke er serialized.

serialize/unserialize er en metode til at overføre komplekse variabler som arrays - også flerdimensionelle
Avatar billede michael_f Nybegynder
14. april 2005 - 13:59 #27
bool(false)
Avatar billede barklund Nybegynder
14. april 2005 - 14:03 #28
Hm, så er det jo:

var_dump(unserialize($_POST['delete'][0]));

Ud fra din yderst mærkelige struktur :)

--
Morten Barklund
Avatar billede stokke Nybegynder
14. april 2005 - 14:15 #29
Nej, det har jeg aldrig skrevet. Jeg forstår ikke hvorfor du insisterer på at bruge var_dump, unserialize og $_POST i samme instruktion.

Forklaringen er:

Man har et array, som hedder $delete, med et antal værdier i.
Sådan et array kan du ikke overføre intakt via et input text field. Derfor konverterer man arrayet delete til en ren strengvariabel ved at bruge:

serialize($delete);

Nu er $delete ikke et array, men en "underlig" tekststreng. Herefter kan kan lægge værdien i et input field:

<input type="text" name="delete" value="<?php echo "$delete"; ?>">

Når man har submittet siden, henter man værdien af variablen sådan:

$delete = $_post['delete'];

Nu er $delete stadig en "underlig" og ubrugelig tekststreng. For at konvertere den tilbage til det oprindelige array bruger man så:
$delete = unserialize($delete);

Og nu kan du så lave en:

var_dump($delete);

Som viser værdien af arrayet.
Avatar billede barklund Nybegynder
14. april 2005 - 14:24 #30
stokke, jeg kommunikerer ikke lige umiddelbart med dig - men med spørgeren michael_f. Og min sætning er skam ganske rigtig og gyldig og alt mulig andet. Hvis du ikke kan overskue det uden at bruge en masse variabler, så er det op til dig - jeg giver blot spørgeren nogle tips til, hvordan han kan få løst sit problem :)

Og nej, du har aldrig skrevet ovenstående udtryk - det har jeg - til spørgeren, og ikke til dig.
Avatar billede michael_f Nybegynder
14. april 2005 - 14:29 #31
Stokke: Jeg har gjort som du har sagt men den skriver stadig bool(false)
Avatar billede barklund Nybegynder
14. april 2005 - 14:36 #32
michael_f, fra din var_dump af $_POST læser jeg, at delete er et array - jeg forstår ikke hvorfor, men prøv at skrive:

$delete = $_POST['delete'][0];
$delete = unserialize($delete);
var_dump($delete);

Så er det også delt op, som stokke synes det skal se ud :D

--
Morten Barklund
Avatar billede michael_f Nybegynder
14. april 2005 - 14:49 #33
hvor skal jeg skrive det - før eller efter jeg sender output med formen?
Avatar billede barklund Nybegynder
14. april 2005 - 15:00 #34
Efter - der hvor du skal læse den. $_POST findes jo kun, når du rent faktisk har sendt noget til en side.
Avatar billede michael_f Nybegynder
14. april 2005 - 15:18 #35
barklund: den skriver det samme desværre  med og uden [] :(
Avatar billede barklund Nybegynder
14. april 2005 - 15:43 #36
Prøv lige at skrive:

var_dump($_POST);
var_dump($_POST['delete']);
var_dump($_POST['delete'][0]);
Avatar billede michael_f Nybegynder
17. april 2005 - 13:16 #37
Output bliver dette:

array(1) { ["delete"]=> string(5) "Array" } string(5) "Array" string(1) "A"
Avatar billede barklund Nybegynder
17. april 2005 - 15:03 #38
Hm, så er delete altså blot teksten "Array" nu? Nu bruger du ikke længere serialize?

Du har et array på den første side, som du vil have med over på den næste, right?

Hvorfor bruger du ikke session - nu spørger jeg lige dumt?

Derudover, ret lige:

for($i=0;$i<20;$i++)
{

    echo "$delete[$i]";
    echo "<br>";
    if($delete[$i]=="")
      {
      break;
      }
}

Til:

foreach($delete as $s) {
    printf("%s<br>", $s);
}

Det er lidt pænere.

Og så kan du overføre dine numre til næste side som:

<input type="hidden" name="delete" value="<?php print join("¤¤",$delete);?>">

Og så skriver du på næste side:

$delete = explode("¤¤", $_POST['delete']);
var_dump($delete);

Så får vi også lige testet værdien til sidst :)
Avatar billede michael_f Nybegynder
18. april 2005 - 08:41 #39
Barklund: jo variablen er erklæret som serialize($delete) før den sendes for derefter at blive unseriales($delete). Kommandoes serialize gør tilsyneladende ingen forskel. Jeg prøver lige det du har skrevet med foreach.
Avatar billede michael_f Nybegynder
18. april 2005 - 12:53 #40
Det var nok at skrive det sådanne her:

foreach($delete as $s)
{
    printf("%s<br>", $s);
}

.. og så overføre det i formen med print $s

Tusind tak for hjælpen.
Avatar billede barklund Nybegynder
18. april 2005 - 13:01 #41
Okay :)
Avatar billede michael_f Nybegynder
18. april 2005 - 13:12 #42
ovenstående virkede for sig selv men ikke med dette:

input type="hidden" name="delete" value="<?php print join("¤¤",$delete);?>">
$delete = explode("¤¤", $_POST['delete']);
var_dump($delete);

output med dette er:

array(1) { [0]=> string(169) "
Warning: join() [function.join]: Bad arguments. in c:\\Inetpub\\wwwroot\\deleteconfirm.php on line 27
" }
Avatar billede barklund Nybegynder
18. april 2005 - 13:24 #43
Vis mig lige den samlede script nu til den første fil. For det er meget mærkeligt!
Avatar billede michael_f Nybegynder
18. april 2005 - 14:57 #44
side 1:

foreach($delete as $s)
{
    printf("%s<br>", $s);
}


?>


<tr>
<td>
<div id="deleteyes">
<form action="http://risserver/deleteconfirmyes.php" method="POST">

<input type="hidden" name="delete" value="<?php print join("**",$s);?>">
<input type="submit" value="YES"></td>



</form>
</div>


<div id="deleteno">

<form action="http://risserver/deletepc.php" method="POST">

<input type="submit" value="NO">

Efter tryk på YES:

<?php
include("C:\inetpub\wwwroot\config.php");
$delete = explode("**",$_POST['delete']);
var_dump($delete);
?>
Avatar billede barklund Nybegynder
18. april 2005 - 14:59 #45
$s er da ikke et array:

<input type="hidden" name="delete" value="<?php print join("**",$delete);?>">
Avatar billede michael_f Nybegynder
18. april 2005 - 15:35 #46
Jo det var det som var buggen. Endnu engang tak for hjælpen.
Avatar billede barklund Nybegynder
18. april 2005 - 15:56 #47
Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester