inhoud checkbox in mysql db

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

29/07/2014 10:26:49
Quote Anchor link
fetch_array(1) houdt in dat het een associative array is. soms staat het er ook zo;
fetch_array(MYSQLI_ASSOC)

Het is inderdaad de bedoeling dat $fotos alles krijgt, maar op dit moment lijkt het erop dat hij er maar 1 pakt :(

Regel 81 is overigens;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
in het form:
echo '<input type="text" name="title[]" value="'.$fotos['title'].'" />';

?>
 
PHP hulp

PHP hulp

28/04/2024 06:23:10
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/07/2014 10:39:28
Quote Anchor link
dan moet je fetchen volgens mijn voorbeeld.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

29/07/2014 12:01:20
Quote Anchor link
Frank jouw voorbeeld is net als over Rotterdam van Amsterdam naar Utrecht rijden.

Erwin zijn voorbeeld is beter.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/07/2014 13:09:30
Quote Anchor link
Ger, ja om de gegevens enkel op het scherm te krijgen wel maar de TS wil ook na een post UPDATEN. En dat is iets waar hij door niemand behalve door mij bij geholpen wordt tot nu toe. (dit in combinatie met name="title[]" inputs en checkboxen die alleen een postwaarde geven als ze aanstaan). En dat maakt het geheel best wel ingewikkeld voor iemand die er nog niet zo heel lang mee aan het stoeien is
Gewijzigd op 29/07/2014 13:31:49 door Frank Nietbelangrijk
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

29/07/2014 14:00:56
Quote Anchor link
>> En dat is iets waar hij door niemand behalve door mij bij geholpen wordt tot nu toe ..
Hoezo alleen door jou?
Ger van Steenderen op 25/07/2014 17:51:50:
Je geeft het id mee in de naam van de input, als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" name="title[<?php echo $row['id']; ?>]" value="<?php echo $row['title']; ?>>
Als je dit ook voor de andere inputs doet, kan je die als volgt uitlezen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
foreach ($_POST['title'] as $id => $title) {
    $home = (in_array($id, $_POST['checkboxHome'])) ? : false;
    // je kan de anderen velden dan aanroepen met
    // $_POST['veldnaam'][$id]

}
?>
 

29/07/2014 14:27:11
Quote Anchor link
Frank Nietbelangrijk op 29/07/2014 13:09:30:
En dat maakt het geheel best wel ingewikkeld voor iemand die er nog niet zo heel lang mee aan het stoeien is

Ik krijg inderdaad wel de indruk dat het lastig is. Zat gister al te denken of een option-box niet eenvoudiger is. 4 opties die je kan kiezen, offline, homepage, fotoboek, home en fotoboek.
Is dat ook eenvoudiger of lijkt het maar zo?
Gewijzigd op 29/07/2014 14:27:27 door
 
Ward van der Put
Moderator

Ward van der Put

29/07/2014 15:27:11
Quote Anchor link
Je zou het eigenlijk moeten testen met echte gebruikers (is het objectieve antwoord), maar mijn inschatting is dat twee checkboxes hier toch het duidelijkst zijn:

[ ] Fotoalbum [ ] Homepage

Je hebt namelijk niet echt vier keuzen, maar slechts twee keuzen die logisch samenhangen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+----+-----------------------+
| 00 | Offline               |
| 10 | Fotoalbum             |
| 01 | Homepage              |
| 11 | Fotoalbum en homepage |
+----+-----------------------+
Gewijzigd op 29/07/2014 15:27:31 door Ward van der Put
 

30/07/2014 08:17:14
Quote Anchor link
Ben in middels al een stukje verder... met alle input van jullie heb ik alles samengevoegd maar ik ben er helaas nog niet helemaal.... Ik kon net updaten maar ik ben toen iets gaan aanpassen en nu kan ik opeens niet meer updaten, terwijl als ik de array uitprint, dan zie ik wel de juiste tekst in de juiste variabele...
vinkjes staat nu altijd aan, ookal is het in de DB op false. dit veranderd ook niet als ik de vinkjes uitzet of weer aan...

Als ik een vinkje UIT zet, dan zie ik ook dat hij in de POST goed meepakt, wat ik mis een ID bij de HOME (als ik die uitvink) dus hij ziet wel dat ik iets doe maar hij is en blijft aangevinkt.

Wat ik heb is. Weer volledige code omdat ik $fotos[$i] in de $_POST heb moeten aanpassen omdat $fotos niet bestond. Dat klopte ook omdat ik die array niet had (zat niveau lager) en daardoor kon ik alles via $_POST['title'] aanroepen.

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

require('../lib/dbconnection.php');

$query = 'SELECT * FROM gallery where image_deleted = "false" order by id desc';
$result=$conn->query($query);
$rows=$result->num_rows;

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    /*
     eerst alle ['homepage'] elementen op false!
     Dit is ook een loop door alle elementen van $fotos maar met een for() ipv een foreach().
     Dit doen we omdat we de array $fotos moeten veranderen (en niet alleen uitlezen).
    */

    for($i = 1 ; $i < count($rows) ; $i++)
        $_POST['id'][$i]['home'] = false;
    
    /*
     checkboxen worden alleen maar gepost als ze aanstaan.
     Als ze allemaal uitstaan dan is er ook geen variabele $_POST['home'] en we moeten
     dit dus eerst controleren.
    */

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

        // loop door alle elementen van $fotos
        for($i = 1 ; $i < count($rows) ; $i++) {
            // indien het id van de foto in de array $_POST['home'] voorkomt
            if(in_array($_POST[$i], $_POST['home']))
                $_POST['id'][$i]['home'] = true;
        }
    }

    


    /*
     text-inputs worden altijd gepost.
     We hoeven dus niet nog eens te controleren of $_POST['title'] wel bestaat.
    */
//    $i = 0;
//    foreach($_POST['title'] as $title)
//    {
//        $_POST[$i++]['title'] = $title; // de ++ achter $i++ zorgt er voor dat $i met 1 verhoogd wordt.
//    }


    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
    
    $id = $_POST['id'];
    $title = $_POST['title'];
    $caption = $_POST['caption'];
    $home = $_POST['home'];
    $fotoboek = $_POST['fotoboek'];
    for($i=0;$i<$rows;$i++){
            $result1=mysqli_query($conn, "UPDATE gallery SET title='$title[$i]', caption='$caption[$i]', home='$home[$i], fotoboek='$fotoboek[$i]' WHERE id='$id[$i]'");
    }

header("location:phphulp.php");
//
//mysqli_free_result($result);
//mysqli_close($conn);

}

<
form action="" method="post">
while($fotos=$result->fetch_array(1) ){
    echo '<input type="text" name="id[]" value="'.$fotos['id'].'" />';
    echo '<input type="text" name="title[]" value="'.$fotos['title'].'" />';
    echo '<input type="text" name="caption[]" value="'.$fotos['caption'].'" />';
    echo '<input type="checkbox" name="home[]" value="'.$fotos['id'].'"';
    echo $fotos['home']?' checked="checked"':'false';
    echo ' /> home';
        echo '<input type="checkbox" name="fotoboek[]" value="'.$fotos['id'].'"';
    echo $fotos['fotoboek']?' checked="checked"':'false';
    echo ' /> fotoboek<br>';
}
<
input type="submit" value="Verzenden" />
<
/form>

?>


kortom; vinkjes werken niet en ondanks dat mijn aangepaste tekst in de post zit, krijg ik het niet in de DB.
Gewijzigd op 30/07/2014 08:19:02 door
 
Erwin H

Erwin H

30/07/2014 08:59:19
Quote Anchor link
Dus na doe je eerst al deze moeite om de aangezette vinkjes in de POST array om te vormen:
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
    for($i = 1 ; $i < count($rows) ; $i++)
        $_POST['id'][$i]['home'] = false;

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

        // loop door alle elementen van $fotos
        for($i = 1 ; $i < count($rows) ; $i++) {
            // indien het id van de foto in de array $_POST['home'] voorkomt
            if(in_array($_POST[$i], $_POST['home']))
                $_POST['id'][$i]['home'] = true;
        }
    }

?>

Maar vervolgens gebruik je dat niet, want je kijkt weer gewoon naar $_POST['home']:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$home
= $_POST['home'];  //moet dit niet $_POST['id'] zijn?
$result1=mysqli_query(
  $conn,
  "UPDATE gallery
   SET title='$title[$i]',
       caption='$caption[$i]',
       home='$home[$i],            
       fotoboek='$fotoboek[$i]'
   WHERE id='$id[$i]'"
);       //en hier home='$home[$i]['home']'?
?>

Overigens mist er ook een quotje bij home='$home[$i] (geen afsluitende quote).
 

30/07/2014 09:27:29
Quote Anchor link
Ik zou dan toch moeten verwachten dat er in mijn DB false of true moet veranderen?
Dat zie ik niet gebeuren...

Tevens heb ik vinkjes terwijl de value in de DB false is en dan zou ik geen vinkje moeten hebben of werkt dat toch even anders?

en hoe kan het dat de waarde in mijn post, niet in mijn db komt? bij een print_r zie ik het wel staan maar vervolgens wordt er niets gedaan daarmee
Gewijzigd op 30/07/2014 09:35:28 door
 
Erwin H

Erwin H

30/07/2014 09:37:50
Quote Anchor link
Je hebt nog steeds: $home = $_POST['home'];

En verder is dit gewoon slordig: $home[$i]]['home']'
(na de $i staan twee sluitende blok haken, moet er 1 zijn)

Overigens kan het nu ook zijn dat je in de knoop komt met al die quotes binnen quotes. Als ik het mij goed herinner moet je array keys niet voorzien van quotes als de variabele binnen een string met dubbele quotes staat. Omdat ik het nooit zo gebruik ben ik er niet helemaal zeker van. Ik zou er in elk geval voor kiezen om alles buiten quotes te halen, persoonlijk vind ik dat overzichtelijker. Wat het 1 niet beter maakt dan het ander, puur persoonlijke voorkeur:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$result1
=mysqli_query($conn,
                    "UPDATE gallery SET title='".$title[$i]."',
                        caption='"
.$caption[$i]."',
                        home='"
.$home[$i]."',
                        fotoboek='"
.$fotoboek[$i]."'
                     WHERE home='"
.$home[$i]['home']."'");
?>


Edit: inmiddels heb je je post aangepast, dus geen idee of bovenstaande nog terechte opmerkingen zijn. Op wat je nu post kan ik geen zinnig antwoord geven. Anders dan dat je script vol fouten zat en het dus allemaal niet werkt.
Gewijzigd op 30/07/2014 09:40:06 door Erwin H
 

30/07/2014 09:47:20
Quote Anchor link
Erwin H op 30/07/2014 09:37:50:
Je hebt nog steeds: $home = $_POST['home'];

En verder is dit gewoon slordig: $home[$i]]['home']'
(na de $i staan twee sluitende blok haken, moet er 1 zijn)

Inderdaad had ik ook al gezien en ik poste te snel en zag nog foutje zoals $home = $_POST['home'];

Erwin H op 30/07/2014 09:37:50:
Overigens kan het nu ook zijn dat je in de knoop komt met al die quotes binnen quotes. Als ik het mij goed herinner moet je array keys niet voorzien van quotes als de variabele binnen een string met dubbele quotes staat. Omdat ik het nooit zo gebruik ben ik er niet helemaal zeker van. Ik zou er in elk geval voor kiezen om alles buiten quotes te halen, persoonlijk vind ik dat overzichtelijker. Wat het 1 niet beter maakt dan het ander, puur persoonlijke voorkeur:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$result1
=mysqli_query($conn,
                    "UPDATE gallery SET title='".$title[$i]."',
                        caption='"
.$caption[$i]."',
                        home='"
.$home[$i]."',
                        fotoboek='"
.$fotoboek[$i]."'
                     WHERE home='"
.$home[$i]['home']."'");
?>

Dit ga ik ook nog even aanpassen..
Erwin H op 30/07/2014 09:37:50:
Edit: inmiddels heb je je post aangepast, dus geen idee of bovenstaande nog terechte opmerkingen zijn. Op wat je nu post kan ik geen zinnig antwoord geven. Anders dan dat je script vol fouten zat en het dus allemaal niet werkt.

ga nog ff alles nalopen. Misschien kan Frank nog iets zinnigs zeggen.
Sorry dat ik nu echt veel vraag maar ik merk gewoon echt dat ik iets wilde wat in mijn hoofd simpel klonk maar echt lastig is voor een beginner.. Ben super blij met jullie hulp want anders was ik er echt niet gekomen en hoop dat ik nog even van jullie gebruik mag maken tot het werkt...

kudo's voor de helpers :)
 
Erwin H

Erwin H

30/07/2014 09:49:29
Quote Anchor link
Als je het hebt aangepast, post het dan nog eens, gaan we zoeken naar de volgende fouten (mochten die er nog in staan).
 

30/07/2014 09:57:23
Quote Anchor link
Erwin, Quick question;

wat betekend:
Illegal string offset 'home' in.....

snap de uitleg niet op inet...
melding geeft hij op regel 59, en dat is

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
                         WHERE home='".$home[$i]['home']."'");
?>
 
Erwin H

Erwin H

30/07/2014 10:30:13
Quote Anchor link
Dat betekent dat de key 'home' niet bestaat in die array. $home[$i] kan wel bestaan, maar $home[$i]['home'] dus niet.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/07/2014 10:40:30
Quote Anchor link
Meerdere malen updaten leent zich uitstekend voor prepared statements:
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
<?php
$update
= $conn->prepare('UPDATE
                            gallery
                         SET
                            title = ?,
                            caption = ?,
                            home = ?,
                            fotoboek = ?
                        WHERE
                            id = ?'
);
$update->bind_param('ssssi', $title, $caption, $home, $fotoboek, $id);
foreach ($_POST['title'] as $pid => $phototitle) {
    $title = $phototitle;
    $caption = $_POST['caption'][$pid];
    $id = $pid;
    $home = (isset($_POST['home']) && in_array($pid, $_POST['home'])) ?  'true' : 'false';
    $fotoboek = (isset($_POST['fotoboek']) && in_array($pid, $_POST['fotoboek'])) ?  'true' : 'false';
    $update->execute();
}

?>
 

30/07/2014 11:39:34
Quote Anchor link
Erwin, hier bijgewerkte code. met jouw uitleg snap ik inderdaad om de "where..." fout gaat. $home[$i] is geen array en daarom werkt ['home'] niet. Heb dat veranderd zoals je zult zien.

Ger; ik doe nog even geen prepare omdat ik eerst dit werkend wil krijgen zonder nog meer "voor mij lastige" codes toe te voegen. merk dat dit al een beetje boven mn pet gaat :)

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

require('../lib/dbconnection.php');

$query = 'SELECT * FROM gallery where image_deleted = "false" order by id desc';
$result=$conn->query($query);
$rows=$result->num_rows;

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    for($i = 1 ; $i < count($rows) ; $i++)
        $_POST['id'][$i]['home'] = false;
    

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

        for($i = 1 ; $i < count($rows) ; $i++) {
            if(in_array($_POST[$i], $_POST['home']))
                $_POST['id'][$i]['home'] = true;
        }
    }

    
    $i = 0;
    foreach($_POST['title'] as $title)
    {

        $_POST[$i++]['title'] = $title;
    }

    
    $id = $_POST['id'];
    $title = $_POST['title'];
    $caption = $_POST['caption'];
    $home = $_POST['id'];
    $fotoboek = $_POST['fotoboek'];
    for($i=0;$i<$rows;$i++){
    $result1=mysqli_query($conn,
                        "UPDATE gallery SET title='".$title[$i]."',
                            caption='"
.$caption[$i]."',
                            home='"
.$home[$i]."',
                            fotoboek='"
.$fotoboek[$i]."'
                         WHERE home='"
.$home[$i]."'");
    }

//header("location:/phphulp.php");

//mysqli_free_result($result);
//mysqli_close($conn);

}

<
form action="" method="post">
while($fotos=$result->fetch_array(1) ){
    echo '<input type="text" name="id[]" value="'.$fotos['id'].'" />';
    echo '<input type="text" name="title[]" value="'.$fotos['title'].'" />';
    echo '<input type="text" name="caption[]" value="'.$fotos['caption'].'" />';
    echo '<input type="checkbox" name="home[]" value="'.$fotos['id'].'"';
    echo $fotos['home']?' checked="checked"':'false';
    echo ' /> home';
        echo '<input type="checkbox" name="fotoboek[]" value="'.$fotos['id'].'"';
    echo $fotos['fotoboek']?' checked="checked"':'false';
    echo ' /> fotoboek<br>';
}
<
input type="submit" value="Verzenden" />
<
/form>

?>


Ik krijg geen foutmeldingen dus dat gaat goed :)
Echter werkt mn update totaal niet. Als ik tekst aanpas komt het niet in m'n database te staan terwijl het wel in mn post komt en in mn ARRAY-object (noem je dat zo???)
tevens zijn al mn checkboxen "gechecked" terwijl de waarde in de DB op false staat.

overigens, als ik alles probeer te snappen, snap ik niet waarom Frank onderstaande erin zette

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

for($i = 1 ; $i < count($rows) ; $i++)
        $_POST['id'][$i]['home'] = false;

?>


Deze wordt enkel geactiveerd als de POST-method wordt aangeroepen. Mn checkboxen zouden dan op false worden gezet (uitgevinkt ga ik vanuit dan...)
maar dat is in mn post al, terwijl ik daarvoor heb aangeven welke ik op "true" wil hebben, met bovenstaande wordt het dan weer op false gezet. Klopt die beredenering?
 
Erwin H

Erwin H

30/07/2014 11:57:17
Quote Anchor link
Dit stuk:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

for($i = 1 ; $i < count($rows) ; $i++)
        $_POST['id'][$i]['home'] = false;

?>

Gaat erom om een volledige array aan te maken voor elke checkbox. Zoals je inmiddels weet, worden alleen aangevinkte checkboxes naar de server gestuurd. Om ervoor te zorgen dat je ook een waarde hebt voor de niet aangevinkte, heeft Frank dit stuk (en de initialisatie erboven) voorgesteld, zodat je later in je query altijd voor elke checkbox een true of false waarde hebt.

Alleen zie ik nu dat er in de for loop iets mis gaat.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$rows
=$result->num_rows;
for($i = 1 ; $i < count($rows) ; $i++) {
?>

$rows is het aantal rijen dat je ophaalt uit je database. Het is een getal. count($rows) gebruik je om het aantal element uit een array te tellen. Dat werkt dus niet op een getal. Die for loop (op regel 11 en 17) moet dus zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
for($i = 1; $i < $rows; $i++) {
?>

Dan krijg je compleet gevulde arrays in $_POST['id'] en dan kan je ook je update statement goed maken, want die gaat nu fout:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
WHERE home='".$home[$i]."'");
?>

(kleurtjes kloppen even niet omdat ik maar een deel van de string copieer)
$home[$i] is in feite $_POST['id'][$i]. En dat is een array nu (met bovenstaande aanpassing) en dat wil je niet, je wil de waarde van het element 'home' in die array. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
WHERE home='".$home[$i]['home']."'");
?>

Dat was boven al correct, alleen omdat die for loops verkeerd liepen werkte het niet.
 
- SanThe -

- SanThe -

30/07/2014 12:08:46
Quote Anchor link
Ik volg dit steeds vol verbazing.
Waarom alles zo moeilijk.

Als je nou in het formulier overal het id meegeeft dan weet je toch wat bij wat hoort.
Uit je dubbelpost: http://www.phphulp.nl/php/forum/topic/checkbox-waarden-in-mysqltabel/95525/#686307

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
while($fotos=$result->fetch_array(1) ){
    echo '<input type="text" name="id['.$fotos['id'].']" value="'.$fotos['id'].'" />';
    echo '<input type="text" name="title['.$fotos['id'].']" value="'.$fotos['title'].'" />';
    echo '<input type="text" name="caption['.$fotos['id'].']" value="'.$fotos['caption'].'" />';
    echo '<input type="checkbox" name="home['.$fotos['id'].']"'.($fotos['home'] ? ' checked="checked"' : '').' /> home';
    echo '<input type="checkbox" name="fotoboek['.$fotos['id'].']"'.($fotos['fotoboek'] ? ' checked="checked"' : '').' /> fotoboek<br>';
}

?>


En dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
foreach($_POST['id'] as $id)
{

    $title = $_POST['title'][$id];
    $caption = $_POST['caption'][$id];
    $home = isset($_POST['home'][$id]);
    $fotoboek = isset($_POST['fotoboek'][$id]);
   // updaten
}
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/07/2014 12:38:06
Quote Anchor link
Nice,

Ik vul in in het id veld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
1 OR 1=1

Dit wordt allemaal voorkomen door met een prepared statement te werken.
 

Pagina: « vorige 1 2 3 volgende »



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.