array invoeren in mysql_query()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sandra

Sandra

06/03/2006 08:06:00
Quote Anchor link
Hi!

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)
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
<?
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)
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
<?
$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)
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
<?
$velden
= while($teller <= $aantal){
    while ($field = mysql_fetch_field($select)) {
    if($teller != 1){
    echo ", ";
    };

    echo $field->name;
    $teller++;
    };                      
    };

                                    
    $waarden = while($tel <= $aantal){
    if($tel != 1){
    echo ", ";
    };

    echo $_POST[$tel-1];
    $tel++;
    };

?>


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!
 
PHP hulp

PHP hulp

26/12/2024 07:35:47
 
Jelmer -

Jelmer -

06/03/2006 08:27:00
Quote Anchor link
Stel je hebt zo je velden in je forumlier genoemd:

<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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$velden
= array_keys($_POST[0]);
?>


Die kan je mooi in je query zetten met implode();

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "INSERT INTO $titel (".implode(','$velden).")";
?>


Nu breiden we de query uit met de waarden:

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
<?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.
?>
 
Sandra

Sandra

06/03/2006 13:59:00
Quote Anchor link
Hey Jelmer,

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
 



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.