$i in $_POST

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Inge V

Inge V

15/03/2012 10:23:04
Quote Anchor link
Nu heb ik:
<td><input type="radio" name="' . $i . '"/>' . $rij1["antwoord"] . '</td>

Hoe kan ik die $i in een $_POST gebruiken. Of kan dit niet?
 
PHP hulp

PHP hulp

28/12/2024 13:14:29
 
Erwin H

Erwin H

15/03/2012 10:30:57
Quote Anchor link
Iets meer uitleg graag. Wat bedoel je met $i gebruiken in $_POST?
 
Jeroen VD

Jeroen VD

15/03/2012 10:32:40
Quote Anchor link
Als je de html van hierboven binnen php tags hebt staan, dan wel. Maar pas wel op dat je die $i altijd van weet wat het kan zijn.

Maar wat weerhoudt je om het zelf te proberen?
 
Inge V

Inge V

15/03/2012 10:41:34
Quote Anchor link
Ik wil wanneer je klikt op de radio en je submit, dat er in de tabel onder de juiste kolom een 1tje komt te staan. Daarbij heb ik dus de radio name $i genoemd en wil ik die gebruiken bij de VALUES $_POST...

Heb et nu zo:

$i = 0;
while ($rij = mysql_fetch_array($resultvraagids))
{
//15 x query om de vragen op te halen en deze beneden erbij te zetten
$resultvragen = mysql_query("SELECT vraag FROM vragen WHERE vraagID =" . $rij["vraagID"]);

//15x query om te kijken voor elke vraag welke antwoorden erbij horen
$resultantwoorden = mysql_query("SELECT antwoord FROM antwoorden WHERE vraagID =" . $rij["vraagID"]);

//vragen loop
while ($rij0 = mysql_fetch_array($resultvragen))
{
echo '<tr>
<td><b>' . $rij0["vraag"] . '</b></td>
</tr>
<tr><td></td></tr>';
}
//antwoorden loop
while ($rij1 = mysql_fetch_array($resultantwoorden))

{
$i++;
//echo $i;

echo '<tr>
<td><input type="radio" name="' . $i . '"/>' . $rij1["antwoord"] . '</td>
</tr>';

if (!empty($_POST))
{

$query = "INSERT INTO resultaten (resultaatID, datum, 1A, 1B, 1C, 1D)
VALUES
('$_POST[resultaatID]','$_POST[datum]','$_POST[??]','$_POST[??]','$_POST[??]','$_POST[??]')";
$result = mysql_query($query) or die(mysql_error());
}
 
Albert de Wit

Albert de Wit

15/03/2012 10:46:32
Quote Anchor link
ik snap het wel... ik doe het ook als ik met mijn CMSje werk.

je bedoelt dat je de naam van iets een getal hebt gegeven waarschijnlijk dat je je id uit je database meeneemt in de naam van het object.

in mijn voorbeeld kunnen mensen zelf een object aanmaken. die word opgeslagen in een database

kijk hier eens naar...

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

// categorie verwijderen
                  // ter bevestiging van het verwijderen

                  if (isset($_POST['ja']))
                  {

                    $query = mysql_query("DELETE FROM categorie WHERE naam = '".$_POST['cat_name']."'");
                    if ($query)
                    echo "Categorie ".$_POST['cat_name']." verwijdert.<br>";
                    die("<a href='categorie.php'>Terug</a>");
                  }

                  for ($i=1;$i<=99999;$i++)
                  {

                    // dit bedoel je waarschijnlijk  (!!!!!!!!!!!!!!!)
                    $verwijder_cat = "verwijder_categorie_$i";
                    if (isset($_POST[$verwijder_cat]))
                    // dit bedoel je waarschijnlijk  (!!!!!!!!!!!!!!!)
                    {
                      $hidden = $_POST['naam_cat'];
                      echo "Weet u zeker dat u de categorie $hidden wil verwijderen?<br>";
                      echo "<form action='categorie.php' method='POST'>
                            <input type='submit' value='ja' name='ja'>
                            <input type='submit' value='nee' name='nee'>
                            <input type='hidden' value='$hidden' name='cat_name'>
                            </form><br>"
;
                      die("<a href='categorie.php'>Terug</a>");
                    }
                  }

                  // categorie verwijderen


echo "<form action='categorie.php' method='POST'><table>";
  while ($rij = mysql_fetch_row($query))
  {
// categorien tonen en knop voor producten toevoegen aanmaken
    // rij[0] is de id van de categorie in de database

    echo "<tr>
    <td>"
.$rij[1]."</td>
    <td><input type='hidden' value='"
.$rij[1]."' name='naam_cat'></td>
    <td>"
."<input type='submit' value='Producten Toevoegen' name='add_".$rij[0]."'></td>
    <td><input type='submit' value='Toon Producten' name='toon_"
.$rij[0]."'></td>
    <td><input type='submit' value='Categorie Wijzigen' name='wijzig_"
.$rij[0]."'></td>
    <td><input type='submit' value='Categorie Verwijderen' name='verwijder_categorie_"
.$rij[0]."'></td></tr>";
  }

  echo "</table></form>";
?>
Gewijzigd op 15/03/2012 10:47:41 door Albert de Wit
 
Erwin H

Erwin H

15/03/2012 10:46:34
Quote Anchor link
Nog even afgezien van het feit dat je 30 queries gebruikt, terwijl het ook met 1 kan....

Als je nu gewoon probeert $_POST['1'] etc. Ik durf je alleen even niet te zeggen of de keys in de POST array strings worden of getallen (dus of je $_POST['1'] moet gebruiken, of toch $_POST[1]), dat mag je zelf proberen.
Alleen wat je nog wel even moet doen is controleren met isset() of elke POST waarde wel bestaat. Je test nu alleen of POST niet leeg is (met empty()), maar dat wil nog niet zeggen dat elke waarde die je wilt uitlezen ook bestaat.
 
Inge V

Inge V

15/03/2012 11:03:24
Quote Anchor link
Dankje Albert ik kijk er even naar..

@Erwin: Welke code kan ik dan gebruiken met isset()? en hoe kan ik dit verwerken in 1 query? sorry ben niet zo goed met php xD
 
Albert de Wit

Albert de Wit

15/03/2012 11:10:43
Quote Anchor link
Ik heb je verhaal eens gelezen en kan er niet veel uit opmaken sorry.
Ik help je graag maar...

Wat is je vraag
Wat is je doel
Wat gaat er mis

Ik heb het idee dat je het wat omslachtig doet.

Als je bijvoorbeeld 15 x een query uitvoerd.. doe je dat in 15 apparte querys? Gebruik je er een loop bij? Kan het zelfs misschien in 1 query?

Als je bijvoorbeeld 15 radiobuttons met allemaal dezelfde naam wilt hebben dan schrijf je niet 15 regels met een radio optie maar dan schrijf je gewoon simpel

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

for ($i=1;$i<=15;$i++)
{

  echo "<input type='radio' value='".$i."' name='Nummer'>";
}


?>
Gewijzigd op 15/03/2012 11:16:54 door Albert de Wit
 
Erwin H

Erwin H

15/03/2012 11:19:04
Quote Anchor link
isset() is een functie die test of een variabele bestaat. Dit is met $_POST en $_GET arrays zeer belangrijk, omdat je nooit weet of iemand je form correct en volledig heeft ingevuld (bewust of onbewust). Alle waardes die je dus verwacht in $_POST of $_GET moet je dus testen om te kijken of ze wel bestaan. Met isset kan dat als volgt:
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
<?php
if ( isset( $_POST['jouw_key'] ) ){
  //waarde bestaat
} else {
  //waarde bestaat niet
}

//meerdere tegelijk
if ( isset( $_POST['jouw_key1'], $_POST['jouw_key2'], $_POST['jouw_key3'] ) ){
  //alle waarden bestaat
} else {
  //een of meerdere waarden bestaan niet
}
?>


Voor je SQL statement kan je het volgende doen. Je hebt meerdere vragen nodig (15 zo te zien), maar als ik het goed lees weet je niet precies welke. Je haalt die ids op uit een database. Als je opgehaalde ids in een array stopt kan je die middels een implode() in een string krijgen gescheiden met komma's. Met die string kan je alle vragen in een keer uit je database halen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//array met vraag ids, die stop je erin uit je database resultaten, hier even hardcoded
$vraagids = array(1, 3, 5, 7, 8, 9, 10);

//maak er een string van in deze vorm: "1,3,5,7,8,9,10"
$vraagids = implode( ',', $vraagids );

//maak een SQL statement om alle vragen in een keer op te halen:
$resultvragen = mysql_query("SELECT vraag FROM vragen WHERE vraagID IN (".$vraagids.")");

//en een SQL statement om all antwoorden op te vragen:
$resultantwoorden = mysql_query("SELECT antwoord FROM antwoorden WHERE vraagID IN (".$vraagids.")");
?>

De twee SQL queries kan je ook nog in een keer doen door een join te maken. Hierbij moet je dan alleen wel weten dat je dan voor elk antwoord een rij krijgt in je resultaten en dus meerdere rijen per vraag!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$resultaatVraagEnAntwoorden
= mysql_query("
  SELECT vragen.vraag, antwoorden.antwoord
  FROM vragen
  INNER JOIN antwoorden ON vragen.vraagID = antwoorden.vraagID
  WHERE vragen.vraagID IN ("
.$vraagids.")
"
);
?>
 
Albert de Wit

Albert de Wit

15/03/2012 11:27:21
Quote Anchor link
ok dus...
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
<?php
if (isset($_POST['button']))
{

  for ($i=1;$i<=15;$i++)
  {

    if (empty($_POST[$i]))
    {

      die("Niet alle velden zijn ingevuld. <a href='index.php'>Ga terug</a>");
    }

    else
    {
      echo "Alle velden zijn ingevuld";
    }
  }
}

?>
Gewijzigd op 15/03/2012 11:28:24 door Albert de Wit
 
Inge V

Inge V

15/03/2012 11:28:01
Quote Anchor link
Albert de Wit op 15/03/2012 11:10:43:
Ik heb je verhaal eens gelezen en kan er niet veel uit opmaken sorry.
Ik help je graag maar...

Wat is je vraag
Wat is je doel
Wat gaat er mis

Ik heb het idee dat je het wat omslachtig doet.

Als je bijvoorbeeld 15 x een query uitvoerd.. doe je dat in 15 apparte querys? Gebruik je er een loop bij? Kan het zelfs misschien in 1 query?

Als je bijvoorbeeld 15 radiobuttons met allemaal dezelfde naam wilt hebben dan schrijf je niet 15 regels met een radio optie maar dan schrijf je gewoon simpel

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

for ($i=1;$i<=15;$i++)
{

  echo "<input type='radio' value='".$i."' name='Nummer'>";
}


?>


Ik gebruik een loop. Mijn database heeft 15 vragen erin en per vraag 4 antwoorden. Ik heb daarvoor een mysql_num_rows gedaan waarbij die telt hoeveel vragen er zijn. Daarom staat er bij mijn commentaar 15x, want hij voert de loop dan 15x uit.
Mijn uitkomst van de pagina is dit:
vraag 1
antwoord1A
antwoord1B
antwoord1C
antwoord1D

vraag2
antwoord2A enz...

het is de bedoeling dat wanneer er antwoord 1A wordt gekozen.. dat er in de tabel resulaten bij 1A een 1tje wordt neergezet. en als je ook antwoord 2C kiest dat er bij 2C een 1tje komt te staan en bij de rest van 2 een 0.
 
Erwin H

Erwin H

15/03/2012 11:29:50
Quote Anchor link
Albert, niet dus.
1 - nooit testen op de button, want niet alle browsers geven die mee in de POST waardes.
2 - als nu het 15e veld niet is ingevuld krijg je 14 keer te zien "Alle velden zijn ingevuld" en dan "Niet alle velden zijn ingevuld". Niet helemaal correct, wel?

Toevoeging op 15/03/2012 11:32:39:

Inge Verhagen op 15/03/2012 11:28:01:
het is de bedoeling dat wanneer er antwoord 1A wordt gekozen.. dat er in de tabel resulaten bij 1A een 1tje wordt neergezet. en als je ook antwoord 2C kiest dat er bij 2C een 1tje komt te staan en bij de rest van 2 een 0.

Kan je niet beter een kolom per vraag hebben waarin je een A, B, C of D (of 1,2,3,4) plaatst? Dan heb je veeeeeel minder kolommen nodig, je hoeft geen "lege" kolommen te vullen en je hebt nooit de kans dat er twee antwoorden voor een vraag in je tabel komen te staan.
 
Albert de Wit

Albert de Wit

15/03/2012 11:47:46
Quote Anchor link
Ok,

dus je hebt 15 multiple choice vragen met elk 4 antwoorden die in de database staan?

database =

id NULL (auto increment,primary) rij 0
antwoord_1 varchar (100) rij 1
antwoord_2 varchar (100) rij 2
antwoord_3 varchar (100) rij 3
antwoord_4 varchar (100) rij 4
vraag varchar (100) rij 5


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
<?php
mysql_connect('localhost','root','');
mysql_select_db('quiz'); // ik neem aan dat de database quiz heet :P

$query = mysql_query("SELECT * FROM quiz");
$aantal = mysql_num_rows($query);

echo "<form action='index.php' method='POST'>";
while ($rij = mysql_fetch_row($query))
{

  echo $rij[1]."<br>";
  for ($i=1;$i<=4;$i++)
  {

    echo "<input type='radio' value='".$i."' name='vraag_".$rij[0]."'>
          <input type='hidden' name='naam_vraag' value='"
.$rij[1]."'>
          "
.$rij[$i]."<br>";
  }
}

echo "<input type='submit' value='Verstuur antwoorden' name='send'>";
echo "</form>";
?>


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
<?php

if (isset($_POST['send']))
{

  for ($i=1;$i<=$aantal;$i++)
  {

    // dit deel vroeg je eerder om
    $p = "vraag_".$_POST[$i];
    if (empty($_POST[$p]))
    {

      die("Niet alle antwoorden zijn ingevuld. <a href='index.php'>Ga terug</a>");
    }

    else
    {// ouch...... nu loop ik vast.... kan iemand helpen en verdergaan?
      $o = "vraag_".$i
      mysql_query("INSERT INTO quiz WHERE vraag = ' ".$_POST['naam_vraag']." '
                   (id, antwoord_1,antwoord_2,antwoord_3,antwoord_4) VALUES ('','"
.$_POST[$o]."','".$_POST[$o]."','".$_POST[$o]."','".$_POST[$o]."')");
    }
  }
}


?>


Grote kans dat het fout is.... ik ging de mist ergens in en verloor overzicht
Gewijzigd op 15/03/2012 11:52:25 door Albert de Wit
 
Inge V

Inge V

15/03/2012 12:09:27
Quote Anchor link
Ik heb een tabel vragen, waar alle vragen in zitten.
vraagID, vraag
1 Wat vind je....
2 .....

Een tabel antwoorden met alle antwoorden erin..
antwoordID, vraagID, antwoord
1 1 A. het antwoord.
2 1 B. ..
3 1 C
4 1 D
5 2 A

Deze vragen en antwoorden haal ik uit de database en wordt dan goed weergeven op de pagina als:
vraag1
antwoord1A
antwoord1B
antwoord1C
antwoord1D

vraag2
antwoord2A
enz...

en een tabel resultaten:
resultaatID, 1A, 1B, 1C, 1D, 2A, 2B...
1 1 0 0 0 0 1
2 0 1 0 0 0 1

later tel ik de resultaten bij elkaar op met SUM hoeveel keer er bijvoorbeeld antwoord 2B is ingevuld.
 



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.