Eerste waarde van array opvragen
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)
1
2
3
4
5
6
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);
?>
$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
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
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?
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)
1
2
3
4
5
2
3
4
5
foreach($newtaglist as $tagnamen) {
foreach ($tagnamen as $value) {
$tagnaam = $value;
//alle code die uitgevoerd moet worden
}
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
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)
dit:
en dit laat de hele array zien..
ik heb het gevoel dat in$tagnaam nog steeds de hele query zit ipv de eerste
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.
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
)
Dan zou dit toch moeten werken:
Wat geeft die als uitkomst? Ook alle tags?
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
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.
dus als ik dit doe dan zou het moeten werken?
Code (php)
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
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} ')";
}
}
}
}
}
}
?>
// 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} ')";
}
}
}
}
}
}
?>
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 :-).
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)
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
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";
}
?>
$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
mysql_num_rows(), mysql_query().
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: