array invoeren in mysql_query()
Ik ben net begonnen met php en tot dus ver heb ik al heel veel aan deze website gehad. Op het volgende probleem heb ik echter nog geen oplossing kunnen vinden ook via google en andere sites kan ik niks vinden. Hopelijk kan een van jullie me helpen.
Ik probeer een beheerpagina te maken voor mysql waarin ik in alle tabellen in mijn database kan toevoegen, wijzigen en verwijderen. Ik wil niet voor elke tabel een apart script schrijven omdat ik nog niet weet hoeveel tabellen er uiteindelijk in de database gaan komen en ook het aantal en de namen van de velden kunnen nog wijzigen.
Nu heb ik het volgende gedaan om iets te kunnen toevoegen in een geselecteerde tabel ($titel = tabelnaam eerder gespecificeerd). Onderstaande form werkt prima maar laat ik zien om jullie een idee te geven van wat ik bedoel:
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
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
<?
echo "<form method='post' target='_self'>";
echo "<table width='100%' cellspacing='5' border='1'>";
echo "<tr>";
$tabel = "SELECT * FROM $titel";
$tabel_result = mysql_query($tabel) or die(mysql_error());
while ($field = mysql_fetch_field($tabel_result))
{
echo "<td bgcolor=blue>$field->name</td>\n";
}
echo "<tr>";
for ($j = 0; $j < mysql_num_fields($tabel_result); $j++) {
echo "<TD><input type='text' name='$j'></TD>";
}
echo "<tr>";
echo "<td class='none'><input type='submit' name='toevoegen' value='go' ><br>";
echo "</tr>";
echo "</table>";
echo "</form>";
?>
echo "<form method='post' target='_self'>";
echo "<table width='100%' cellspacing='5' border='1'>";
echo "<tr>";
$tabel = "SELECT * FROM $titel";
$tabel_result = mysql_query($tabel) or die(mysql_error());
while ($field = mysql_fetch_field($tabel_result))
{
echo "<td bgcolor=blue>$field->name</td>\n";
}
echo "<tr>";
for ($j = 0; $j < mysql_num_fields($tabel_result); $j++) {
echo "<TD><input type='text' name='$j'></TD>";
}
echo "<tr>";
echo "<td class='none'><input type='submit' name='toevoegen' value='go' ><br>";
echo "</tr>";
echo "</table>";
echo "</form>";
?>
Nu wil ik deze waarden in een “mysql_query(INSERT INTO (velden) VALUES (waarden)” statement invoeren. En dit is dus mijn probleem...
Ik heb 2 dingen geprobeerd. Ten eerste om het via een array op te lossen:
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
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
<?
$select = mysql_query("SELECT * FROM $titel") or die(mysql_error());
$aantal = mysql_num_fields($select);
$teller = 1;
$tel = 1;
$t = 1;
$veld = array();
$waarde = array();
while($teller <= $aantal){
while ($field = mysql_fetch_field($select))
{
array_push($veld, $field->name);
$teller++;
}
}
while($tel <= $aantal){
array_push($waarde, $_POST[$tel-1]);
$tel++;
}
while($t <= $aantal){
mysql_query(INSERT INTO $titel ($veld[$t-1]) VALUES ($waarde[$t-1])or die(mysql_error());
$t++;
}
?>
$select = mysql_query("SELECT * FROM $titel") or die(mysql_error());
$aantal = mysql_num_fields($select);
$teller = 1;
$tel = 1;
$t = 1;
$veld = array();
$waarde = array();
while($teller <= $aantal){
while ($field = mysql_fetch_field($select))
{
array_push($veld, $field->name);
$teller++;
}
}
while($tel <= $aantal){
array_push($waarde, $_POST[$tel-1]);
$tel++;
}
while($t <= $aantal){
mysql_query(INSERT INTO $titel ($veld[$t-1]) VALUES ($waarde[$t-1])or die(mysql_error());
$t++;
}
?>
Dit genereerd de volgende fout melding:
Parse error: syntax error, unexpected T_STRING in /home/myfitness/domains/myfitnessmanager.com/public_html/prog/stseig/nwreg.php on line 36
De andere manier die ik geprobeerd heb is:
Code (php)
Maar ook dit werkt niet omdat ik while niet kan gebruiken om een variabele te declareren. Heeft iemand een idee hoe ik de veldnamen en de waardes uit het FORM in mijn database krijg zonder vooraf de veldnamen van al mijn tabellen in te voeren?
Alvast heel erg bedankt voor jullie hulp!
<li><input name="naam[]"><input name="achernaam[]"></li>
<li><input name="naam[]"><input name="achernaam[]"></li>
<li><input name="naam[]"><input name="achernaam[]"></li>
<li><input name="naam[]"><input name="achernaam[]"></li>
Om te kijken wat dit oplevert kan je eens print_R($_POST); doen.
Iig, om alle veldnamen te weten te komen kan je de keys uit de eerste (of de tweede, doet er niet toe) array pakken.
Die kan je mooi in je query zetten met implode();
Nu breiden we de query uit met de waarden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$values = array();
for($i = 0; $i < count($_POST); $i++) //alle insert-setjes klaarzetten
{
for($j = 0; $j < count($_POST[$i]); $j++)
{
$_POST[$i][$j] = mysql_real_escape($_POST[$i][$j]; // voor de veiligheid
}
$values[] = "('".implode("','", $_POST[$i]."')";
}
$query .= implode(',', $values);
echo $query; //of natuurlijk uitvoeren.
?>
$values = array();
for($i = 0; $i < count($_POST); $i++) //alle insert-setjes klaarzetten
{
for($j = 0; $j < count($_POST[$i]); $j++)
{
$_POST[$i][$j] = mysql_real_escape($_POST[$i][$j]; // voor de veiligheid
}
$values[] = "('".implode("','", $_POST[$i]."')";
}
$query .= implode(',', $values);
echo $query; //of natuurlijk uitvoeren.
?>
helemaal super! Implode was de functie die ik zocht. Ik heb hem iets anders gebruikt, maar het geheel werk voorlopig zoals ik het hebben wil.
Hartstikke bedankt!
Groetjes uit Australie