Eerste waarde van array opvragen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ren

Ren

14/05/2008 14:32:00
Quote Anchor link
Ik heb een probleem met een array en ik ben al de hele dag bezig om het op te lossen, maar ik kom er niet uit.

ik heb een array met gegevens erin en er op deze manier ingestopt.
Tags worden doorgestuurd vanuit de html code naar de verwerkingscode

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$taglist
= mysql_real_escape_string($_POST['tags']);

// haalt alle tags uit de invoer en stopt het in een array
$newtaglist = explode(" ", $taglist);
?>


nu moet met elke array-item een aparte bewerking uitgevoerd worden alleen krijg ik steeds alle arrayitems tegelijk door deze code

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
foreach($newtaglist as $aantal => $tagnamen){

$tagnaam = $tagnamen;

}

?>

ik snap dat het bovenstaande niet werkt, maar ik wil graag dat er van de array steeds het volgende item wordt gepakt en dan in $tagnaam wordt gestopt.

1. pakt eerste array item in de variable $tagnaam
2. voert code uit met $tagnaam (insert in database enzo)
3. gaat weer terug naar het begin en pakt het volgende array item
om deze loop te herhalen.

kunnen jullie mij asjeblieft helpen ik ben helemaal frustie aan het worden.
Gewijzigd op 01/01/1970 01:00:00 door Ren
 
PHP hulp

PHP hulp

23/12/2024 00:08:54
 
Jan Koehoorn

Jan Koehoorn

14/05/2008 14:35:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
    foreach($newtaglist as $tagnamen) {
        foreach ($tagnamen as $value) {
            // hier $value in je insert proppen
        }
    }

?>
 
- SanThe -

- SanThe -

14/05/2008 14:37:00
Quote Anchor link
Met de explode haal je ze uit elkaar en dan met de foreach wil je ze weer aan elkaar. Wat is daar het nut van?
 
Ren

Ren

14/05/2008 14:46:00
Quote Anchor link
nee dat wil ik niet

ik ontvang deze reeks bijvoorbeeld van een inputveld:

tag tag2 tag3 tag4

en dan zorgt explode() ervoor dat het in een array komt.

ik ga daarna elke tag controleren als het al bestaat in de database dan hoeft er geen nieuwe tag toegevoegd te worden in de TAGS(tag_id, tag_naam) tabel en hoeft er alleen in de koppelingstabel en BOOKMARKS_TAGS(bookmark_id, tag_id) toegevoegd te worden.

als het nog niet bestaat dan komt de tag in de database in de TAGS(tag_id, tag_naam) tabel en koppelt met BOOKMARKS_TAGS(bookmark_id, tag_id) tabel aan BOOKMARKS (bookmark_id, bookmark_naam, bookmark_url)

die onderste code heb ik af.. alleen hoef ik dan alleen maar de tag te hebben die steeds gecontroleerd moet worden.

ik heb die code van jan geprobeerd maar dat werkt nog niet.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
    foreach($newtaglist as $tagnamen) {
        foreach ($tagnamen as $value) {
        $tagnaam = $value;
         //alle code die uitgevoerd moet worden
}


ik krijg deze foutmelding:
Warning: Invalid argument supplied for foreach() in D:\website2\bookmarks\admin\bookmark.php on line 48
Gewijzigd op 01/01/1970 01:00:00 door Ren
 
Jan Koehoorn

Jan Koehoorn

14/05/2008 15:32:00
Quote Anchor link
Je moet $newtaglist blijkbaar nog exploden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    foreach (explode (' ', $newtaglist) as $value) {
        // doe iets met $value
    }
?>
 
Jesper Diovo

Jesper Diovo

14/05/2008 15:36:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<pre>'.print_r($newtaglist, true).'</pre>';
?>


Wat geeft die terug?
 
Ren

Ren

14/05/2008 15:52:00
Quote Anchor link
@jan koehoorn zijn code geeft dit terug

Notice: Array to string conversion in D:\website2\bookmarks\admin\bookmark.php on line 47

dat klopt wel want $newtaglist is een array namelijk, want die heb ik van te voren al explode() gedaan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$newtaglist
= explode(" ", $taglist);
    foreach($newtaglist as $tagnamen) {
        foreach ($tagnamen as $tagnaam) {
?>


dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<pre>'.print_r($newtaglist, true).'</pre>';
?>

en dit laat de hele array zien..

ik heb het gevoel dat in$tagnaam nog steeds de hele query zit ipv de eerste
 
Jesper Diovo

Jesper Diovo

14/05/2008 15:59:00
Quote Anchor link
En laat dat eens zien dan, die array die print_r() teruggeeft. Dan weten we hoeveel foreaches we nodig hebben om de boel juist te laten verlopen.
 
Ren

Ren

14/05/2008 16:13:00
Quote Anchor link
dat ligt eraan hoeveel tags ik invoer in het html formulier

als ik vier tags invoer krijg ik bijvoorbeeld dit.

Array
(
[0] => aaaaaa
[1] => bbbbbb
[2] => ccccccc
[3] => dddddd
)

er kan een verschillend aantal tags ingevoerd worden daarom is de array altijd van een verschillende lengte.

als ik twee tags invoer dan krijg ik dit:

Array
(
[0] => aaaaaa
[1] => bbbbbb
)
 
Jesper Diovo

Jesper Diovo

14/05/2008 16:19:00
Quote Anchor link
Ja, dat snap ik. We hebben dus maar één array, en daar zitten verder geen arrays meer in.

Dan zou dit toch moeten werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($newtaglist as $tagnaam) {
  echo $tagnaam."<br />".PHP_EOL;
}

?>

Wat geeft die als uitkomst? Ook alle tags?
 
Ren

Ren

14/05/2008 16:23:00
Quote Anchor link
ja maar nu zitten alle tags in $tagnaam :( en dat is niet de bedoeling. ja alle tags dus :/

ik kan alleen met 1 tag gelijk de code uitvoeren en hij pakt nu steeds alles
Gewijzigd op 01/01/1970 01:00:00 door Ren
 
Robert Deiman

Robert Deiman

14/05/2008 16:49:00
Quote Anchor link
@René

Dan snap jij de werking van de foreach niet:

Hij gaat die lus in voor elk arrayitem die er is. Oftewel, als je binnen de foreach jou actie/ functie aanroept over $tagnaam, zal die voor elke $tagnaam op zichzelf deze functie aanroepen.
 
Ren

Ren

14/05/2008 16:54:00
Quote Anchor link
nee dat wist ik inderdaad niet, want het is de eerste keer dat ik het gebruik bedankt voor de uitleg.

dus als ik dit doe dan zou het moeten werken?

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
<?php
// haalt alle tags uit de invoer
$newtaglist = explode(" ", $taglist);

foreach($newtaglist as $tagnaam) {

        // kijkt als een tag al bestaat
        $tagexist = mysql_query("SELECT tag_naam FROM tags WHERE tag_naam ='{$tagnaam}'");
        // kijkt als een tag al bestaat
        while ($row = mysql_fetch_array($tagexist)) {
            // kijkt als de variable tagnaam niet gelijk is aan de opgevraagde tagnaam
            if ($tagnaam != $row["tag_naam"]) {
                // insert alle nodige data in de database en pakt de laatst ingevoegde bookmarkid
                    $sql = "INSERT INTO bookmarks (bookmark_naam, bookmark_url, cat_id) VALUES ('{$bookmarknaam}', '{$bookmarkurl}', {$categorieid})";
                    $laatstebookmarkid = mysql_insert_id();
                // insert alle nodige data in de database en pakt de laatst ingevoegde tagid
                    $sql2 = "INSERT INTO tags (tag_naam) VALUES ('{$tagnaam}')";
                    $laatstetagid = mysql_insert_id();
                    // gebruikt de laatste toegevoegde bookmarkid en tagid om de bookmark met de tags te koppelen.
                    $sql3 = "INSERT INTO bookmark_tags (bookmark_id, tag_id) VALUES ('{$laatstebookmarkid}, {$laatstetagid} ')";
            // als de tagnaam wel gelijk is en dus al bestaat in de database
            } else {
            // controleert of de bookmark al is toegevoegd bij de vorige code
                $bookmarkidexist = mysql_query("SELECT bookmark_id FROM bookmarks WHERE bookmark_naam ='{$bookmarknaam}' AND bookmark_url ='{$bookmarkurl}'");
                // controleert of de bookmark al bestaat door het aantal rows te tellen.
                if (count($bookmarkidexist) == 1) {
                // selecteert de tag id waar tag_naam gelijk is aan de eerder toegevoegde tagnaam
                $result1 = mysql_query("SELECT tag_id FROM tags WHERE tag_naam ='{$tagnaam}'");
                    while ($row1 = mysql_fetch_array($result1)) {
                        for ( $counter1 = 0; $counter1 <= $result1; $counter1 += 1) {
                            $sql6 = "INSERT INTO bookmark_tags (bookmark_id, tag_id) VALUES ('{$bookmarkidexist}, {$laatstetagid} ')";
                        }
                    }

                // als de bookmark nog niet bestaat.
                } else {
                    $sql4 = "INSERT INTO bookmarks (bookmark_naam, bookmark_url, cat_id) VALUES ('{$bookmarknaam}', '{$bookmarkurl}', {$categorieid})";
                    $laatstebookmarkid = mysql_insert_id();
                    $result1 = mysql_query("SELECT tag_id FROM tags WHERE tag_naam ='{$tagnaam}'");
                    while ($row1 = mysql_fetch_array($result1)) {
                        for ( $counter1 = 0; $counter1 <= $result1; $counter1 += 1) {
                            $sql5 = "INSERT INTO bookmark_tags (bookmark_id, tag_id) VALUES ('{$laatstebookmarkid}, {$laatstetagid} ')";                    
                        }
                    }
                }
            }
        }
    }


?>
 
Jesper Diovo

Jesper Diovo

14/05/2008 18:57:00
Quote Anchor link
Het zou kunnen werken, ja. Maar je controleert nergens iets. Bovendien voer je sommige queries niet eens uit. Je gebruikt count() op een result??? Je hoeft niet te fetchen om daarna alleen te kijken of de tag die eruit komt gelijk is aan de tag die je hebt als je de tag al in de where-clausule opneemt. Haal variabelen buiten quotes en doe ook wat aan SQL injection :-).
 
Ren

Ren

14/05/2008 20:03:00
Quote Anchor link
foreach werkt nu en heb al die troep aangepast ik had eigenlijk nog niet gecontroleerd toen ik het vanmiddag poste.

Ik geloof dat het wel zo wel werkt behalve dan dat het niet aan de tabellen toevoeg :P. Ik denk dat ik iets stoms over het hoofd zie, omdat ik er de hele dag al naar staar, maar misschien zien jullie het euvel. Al erg bedankt voor alle andere hulp.

de code is nu zo.

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

$bookmarknaam
= mysql_real_escape_string($_POST['bookmark_naam']);
$bookmarkurl = mysql_real_escape_string($_POST['bookmark_url']);
$categorieid = mysql_real_escape_string($_POST['cat_id']);
$taglist = mysql_real_escape_string($_POST['tags']);

// haalt alle tags uit de invoer
$newtaglist = explode(" ", $taglist);

foreach ($newtaglist as $tagnaam) {

        // kijkt of de tag al bestaat.
        $tagexist = mysql_query("SELECT tag_id FROM tags WHERE tag_naam = '{$tagnaam}'");

        if (empty($tagexist))
        {

                // insert alle nodige data in de database en pakt de laatst ingevoegde bookmarkid
                    $sql = "INSERT INTO bookmarks (bookmark_naam, bookmark_url, cat_id) VALUES ('{$bookmarknaam}', '{$bookmarkurl}', {$categorieid})";
                    $laatstebookmarkid = mysql_insert_id();
                    if ($sql)
                    {

                        echo "De bookmark is toegevoegd";
                    }

                    
                // insert alle nodige data in de database en pakt de laatst ingevoegde tagid
                    $sql2 = "INSERT INTO tags (tag_naam) VALUES ('{$tagnaam}')";
                    $laatstetagid = mysql_insert_id();
                    if ($sql2)
                    {

                        echo "De tag is toegevoegd";
                    }
        
                // gebruikt de laatste toegevoegde bookmarkid en tagid om de bookmark met de tags te koppelen.
                    $sql3 = "INSERT INTO bookmarks_tags (bookmark_id, tag_id) VALUES ({$laatstebookmarkid}, {$laatstetagid})";
                    if ($sql3)
                    {

                        echo "De koppeling is toegevoegd";
                    }
        }
//bestaat al in de database
        else
        {
            // controleert of de bookmark al is toegevoegd bij de vorige code
                $bookmarkidexist = mysql_query("SELECT bookmark_id FROM bookmarks WHERE bookmark_naam ='{$bookmarknaam}' AND bookmark_url ='{$bookmarkurl}'");
                // controleert of de bookmark al bestaat
                if (isset($bookmarkidexist))
                {

                // selecteert de tag id waar tag_naam gelijk is aan de eerder toegevoegde tagnaam
                $result1 = mysql_query("SELECT tag_id FROM tags WHERE tag_naam ='{$tagnaam}'");
                    while ($row1 = mysql_fetch_array($result1))
                    {

                        $sql6 = "INSERT INTO bookmarks_tags (bookmark_id, tag_id) VALUES ({$bookmarkidexist}, {$row1['tag_id']})";
                        if ($sql6)
                        {

                            echo "De koppeling is toegevoegd";
                        }
                    }
                }
    // als de bookmark nog niet bestaat.
                else
                {    
                    $sql4 = "INSERT INTO bookmarks (bookmark_naam, bookmark_url, cat_id) VALUES ('{$bookmarknaam}', '{$bookmarkurl}', {$categorieid})";
                    $laatstebookmarkid = mysql_insert_id();
                    if ($sql4)
                        {

                            echo "De bookmark is toegevoegd";
                        }

                    $result2 = mysql_query("SELECT tag_id FROM tags WHERE tag_naam ='{$tagnaam}'");
                    while ($row1 = mysql_fetch_array($result2))
                    {

                        $sql5 = "INSERT INTO bookmarks_tags (bookmark_id, tag_id) VALUES ({$laatstebookmarkid}, {$row1['tag_id']})";
                        if ($sql5)
                        {

                            echo "De koppeling is toegevoegd";
                        }
                    }     
                }
            }
        }
    }

}
else {
    echo "je moet alle velden invullen";
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Ren
 
Jesper Diovo

Jesper Diovo

14/05/2008 21:09:00
Quote Anchor link
Je voert nog steeds niet alle queries uit en wat moet je nou weer met empty() en isset() bij een SQL resultset? Ga eens kijken naar de mysql_* functies op php.net. Voorbeeldje: mysql_num_rows(), mysql_query().
 



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.