$_POST waarde wordt niet doorgegeven bij tweede ajax functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marijn Struijlaart

Marijn Struijlaart

29/01/2013 23:05:21
Quote Anchor link
Hallo allemaal, ik ben bezig een module te maken waarmee iemand foto's op zijn website kan uploaden in albums en subalbums. Daarvoor gebruik ik nu een option list waarbij men een bestaand album kan selecteren. omdat er soms een keuze moet worden gemaakt uit zowel soort, album en subalbum wilde ik ajax gebruiken zodat je niet de hele tijd hoeft door te klikken. ik had eigenlijk nog geen ervaring met ajax, dus daar loopt het misschien ook wel ergens fout.

dit is de html code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
[code]<?php
session_start();
if(!isset($_SESSION["login"]))
    {

    header("location:login.php");
        exit();
    }

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<script>
function getAlbums(str)
    {
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("albumlist").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","getalbums.php?id="+str,true);
    xmlhttp.send();    
    }

function getSubalbums(str)
    {
    var xmlhttp2;
    xmlhttp2=new XMLHttpRequest();
    
    xmlhttp2.onreadystatechange=function()
      {
      if (xmlhttp2.readyState==4 && xmlhttp2.status==200)
        {
        document.getElementById("subalbumlist").innerHTML=xmlhttp2.responseText;
        }
      }
    xmlhttp2.open("GET","getsubalbums.php?subid="+str,true);
    xmlhttp2.send();    
    }        
</script>
<link href="cmscss.css" rel="stylesheet" type="text/css" />
<title>FransVledder - CMS - upload foto's</title>
</head>
<body>
<table>
<form action="pictureupload.php?albumid=<?php echo "".$albumid.""; ?>&subalbumid=<?php echo "".$subalbumid.""; ?>" method="post" enctype="multipart/form-data">
<tr><td>voeg foto's toe</td><td>
<input type="file" name="file[]" multiple id="file" accept="image/jpeg" /></td></tr>
<tr><td>Soort: </td><td>
<select name="soort" onchange="getAlbums(this.value);">
<option value="">selecteer een soort</option>
<option value="1">abstract</option>
<option value="2">bergwandelingen</option>
<option value="3">concerten</option>
<option value="4">reisthema's</option>
<option value="5">reisverslag</option>
<option value="6">sport</option>
</select></td></tr>
<tr><td>
albumnaam: </td>
<td>
<select name="albums" id="albumlist" onchange="getSubalbums(this.value)">
<option value="">selecteer een album</option>
</select>
</td></tr>
<tr><td>
Subalbumnaam: </td><td>
<select name="subalbums" id="subalbumlist">
<option value="">selecteer een subalbum</option>
</select>
</td></tr>
<tr><td></td><td>
<input type="submit" value="upload" /></td></tr>
</form>
</table>
</body>
</html>
?>


en dit zijn de 2 php scripts

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
session_start();
if(!isset($_SESSION["login"]))
    {

    header("location:login.php");
        exit();
    }


require("connect.php");

echo "<option value=''>selecteer een album</option>";
if(empty($_GET["id"]))
    {

        exit();
    }

else
    {
    $link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    if(!$link)
        {

        header("location:uploadpicturesform.php?error=1");
            exit();
        }

    
    $result = mysqli_query($link, "SELECT albumnaam, albumid FROM albums WHERE albumsoort = ".mysqli_real_escape_string($link, $_GET["id"])."");
            
    if(!$result)
        {

        header("location:uploadpicturesform.php?error=2");
            exit();
        }

            
    while($row = mysqli_fetch_assoc($result))
        {

        echo "<option value='".$row["albumid"]."'>".$row["albumnaam"]."</option>";
        }
    }

?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
session_start();
if(!isset($_SESSION["login"]))
    {

    header("location:login.php");
        exit();
    }


require("connect.php");

echo "<option value=''>selecteer een subalbum</option>";
if(empty($_GET["subid"]))
    {

        exit();
    }

else
        {
    $link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    if(!$link)
        {

        header("location:pictureuploadform.php?error=1");
            exit();
        }

    $albums = (int)$_POST["albums"];
    if(!is_int($albums) or $albums <= 0)
        {

        die("ongeldige invoer voor albumnaam");
        }

    
        echo "".$albums."";
                
    $result = mysqli_query($link, "SELECT subalbumnaam, subalbumid FROM subalbums WHERE albumid = ".$albums."");
    
    if(!$result)
        {

        header("location:pictureuploadform.php?error=2");
            exit();
        }

            
    while($row = mysqli_fetch_assoc($result))
        {

        echo "<option value='".$row["subalbumid"]."'>".$row["subalbumnaam"]."</option>";
        }
        }

?>


het probleem zit m in dat ik deze melding terugkrijg. "ongeldige invoer voor albumnaam".
ik heb het even gechecked en dit komt doordat $_POST["albums"] continu een lege waarde blijft.

weet iemand hiervoor de oplossing?
 
PHP hulp

PHP hulp

06/11/2024 04:07:28
 
Erwin H

Erwin H

29/01/2013 23:24:26
Quote Anchor link
In de eerste plaats gebruik je de GET methode en lees je POST uit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
xmlhttp.open("GET","getalbums.php?id="+str,true);

Dat werkt al niet. Maar tevens, kijkende naar je code, krijg ik het idee dat je ervanuit gaat dat bij een ajax request (net als bij een gewoon request) de parameters van je form automatisch meegaan. Dat is niet het geval. Je roept de ajax functie namelijk als volgt aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
getSubalbums(this.value)

Dan gaat dus de waarde van de select mee, maar niet de naam. Die heb je nergens gedefinieerd (in je ajax request) en blijft dus onherkenbaar voor de server.
 
Marijn Struijlaart

Marijn Struijlaart

29/01/2013 23:30:28
Quote Anchor link
de naam van het album staat nergens direct gedefineerd in mijn script, omdat dat niet nodig is. ik haal een albumid op uit mijn database. dus als HTML ouput krijg ik dan het volgende

<option value="8">test</option>

maar die waarde wordt dus niet uitgelezen. veranderen naar POST helpt trouwens niet. Bij de eerste aanvraag wordt hij dus wel correct uitgelezen, wat in essentie hetzelfde script is
Gewijzigd op 29/01/2013 23:32:42 door Marijn Struijlaart
 
Erwin H

Erwin H

29/01/2013 23:33:13
Quote Anchor link
Het veranderen naar POST is niet voldoende, maar wel een noodzakelijke voorwaarde.

Het tweede punt wuif je direct weg, maar is de verdere oplossing voor je probleem. De naam van het select is 'albums' en je leest het in je php script uit met $_POST['albums']. Alleen, je voegt het in de parameterslijst niet toe als albums, maar als id. Dus ofwel verander het in javascript naar albums, ofwel verander het in php naar id.

Toevoeging op 29/01/2013 23:34:23:

Marijn Struijlaart op 29/01/2013 23:30:28:
maar die waarde wordt dus niet uitgelezen. veranderen naar POST helpt trouwens niet. Bij de eerste aanvraag wordt hij dus wel correct uitgelezen, wat in essentie hetzelfde script is

Alleen daar lees je het uit als $_GET["id"] wat toch iets heel anders is als $_POST["albums"]
Gewijzigd op 29/01/2013 23:36:28 door Erwin H
 
Marijn Struijlaart

Marijn Struijlaart

29/01/2013 23:46:01
Quote Anchor link
ah nee, ik zag t al. puur een naamgevingsdingetje. Ik moest ook die is_int check nog in mijn eerste php script stoppen, maar dat doet er verder niet toe. heeft te maken dat ik hetzelfde script ook gebruikte via een andere pagina. merci!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.