5 invoervelden tegelijk verwerken in MYSQL dbase?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Johan West

Johan West

06/06/2015 13:37:42
Quote Anchor link
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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTML sjabloon</title>
</head>

<body>
<form action="index.php" method="post" accept-charset="UTF-8"><?php
for ($i=0; $i < 5; $i++) {
    ?>
<p>
        <label for="runame_<?php echo $i ?>">veld <?php echo ($i + 1) ?></label>
        <input type="text" name="runame[]" id="runame_<?php echo $i ?>" value="" />
    </p><?php
}
?>
<p>
    <button type="submit">Save</button>
</p>
</form>
</body>
</html>

<?php

// ... maak connectie database
//


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['runame']) && is_array($_POST['runame'])) {
        echo '<pre>'.print_r($_POST['runame'], true).'</pre>';

// de volgende code is nieuw toegevoegd

If (isset($_POST['runame'])) {
        $runame = $_POST['runame'] ;    
        $sql = "CREATE TABLE  `$runame` (linkoms VARCHAR(80), linkadd VARCHAR (80) )" ;
        }    



    }
else {
        ?>
<p>fout: veld 'runame' niet aanwezig of is geen array</p><?php
    }
}

?>


Bovenstaande script kan ik gaan gebruiken om de variabelen toe te voegen in de database
Ik krijg helaas de foutmelding Array to string conversion en daarna het volgende:

Fout: CREATE TABLE `Array` (linkoms VARCHAR(80), linkadd VARCHAR (80) )
Table 'array' already exists
 
PHP hulp

PHP hulp

19/04/2024 07:53:47
 
Thomas van den Heuvel

Thomas van den Heuvel

06/06/2015 14:12:26
Quote Anchor link
$_POST['runame'] is nog steeds een array.

Een array kun je beschouwen als een functie: je stopt er een waarde in en er komt een (mogelijk andere) waarde uit.

Wat jij in het bovenstaande fragment probeert te doen is in één keer van een hele lijst een tabel te maken terwijl je deze lijst zou moeten doorlopen en in elke stap van het doorlopen van de lijst een tabel aanmaken.

Ik weet niet of je deze opzet moet volgen, te meer omdat het er op lijkt dat deze tabellen enige structuur missen.

Je moet het zo zien, in beginsel heb je een database, vaak gebruik je in je hele applicatie slechts één database.

In een database zitten tabellen. Elke tabel heeft een specifiek doel, m.a.w., slaat specifieke informatie op. Je hebt bijvoorbeeld een "users" tabel, hierin staat informatie over gebruikers.

Elke tabel heeft een structuur, deze staat omschreven in zijn tabeldefinitie waarin de verschillende informatie-elementen staan omschreven.

In een tabel kun je meerdere "sets" gegevens opslaan, elke rij gegevens (ook wel "record" genaamd) in de tabel bevat één set. Vaak wordt een uniek nummer toegevoegd aan de structuur om de sets onderling te kunnen onderscheiden.

Vergelijk dit met een spreadsheet: als elke tab verschillende informatie bevat zijn je tabs je tabellen. Elke rij in je spreadsheet is een record. Elke kolomheading bevat een structuuromschrijving van die kolom.

Wat jij in het bovenstaande codefragment probeert te doen, is het aanmaken van een tabel die elke keer dezelfde structuur heeft. Dit is helemaal niet nodig, want je kunt meerdere regels (records) informatie opslaan in één enkele tabel.

Tenzij de tabelnaam op een of andere manier betekenis heeft? Maar zelfs dan is het beter om een andere opzet te gebruiken.

Maar om tot een goede opzet te komen, moeten we weten wat je precies probeert te bereiken. Anders kunnen we slechts raden naar de beste structuur die je moet gebruiken om je doel te bereiken.

En daar hebben we nu al ongeveer 20x om gevraagd... Wat probeer je uiteindelijk te doen?

(nogmaals) Zolang je deze vraag niet beantwoord kunnen we je niet helpen.
Gewijzigd op 06/06/2015 14:14:14 door Thomas van den Heuvel
 
- SanThe -

- SanThe -

06/06/2015 14:24:05
Quote Anchor link
Thomas van den Heuvel op 06/06/2015 14:12:26:
Een array kun je beschouwen als een functie


Nee geen functie. Een functie doet iets en een array() niet.
Een array() is gewoon een manier voor opslag van gegevens.
Eigenlijk gewoon een variabele met meerdere vakjes (of sets).
 
Ward van der Put
Moderator

Ward van der Put

06/06/2015 16:07:56
Quote Anchor link
Als je weet dat het Engelse array in het Nederlands gewoon een matrix is, dan gaat er bij velen eerder een lampje branden. Dat is dus een datastructuur die veel wegheeft van een tabel (of een rij in een tabel) en waarmee je verschillende (matrix)operaties kunt uitvoeren.
 
Thomas van den Heuvel

Thomas van den Heuvel

06/06/2015 16:32:37
Quote Anchor link
- SanThe - op 06/06/2015 14:24:05:
Nee geen functie. Een functie doet iets en een array() niet.
Een array() is gewoon een manier voor opslag van gegevens.
Eigenlijk gewoon een variabele met meerdere vakjes (of sets).

Ik bedoelde meer een wiskundige functie (f(x)). Het mapt een waarde x naar een andere waarde y. Een array doet niet veel anders?
 
Ward van der Put
Moderator

Ward van der Put

06/06/2015 17:37:01
Quote Anchor link
Uitgaande van ƒ(x) = y lijkt het inderdaad erg veel op elkaar, maar bij een functie gaat het vooral om een transformatie en bij een array meer om een locatie of translatie voor het “mappen” van x naar y.
 
Johan West

Johan West

06/06/2015 20:42:38
Quote Anchor link
Thomas van den Heuvel op 06/06/2015 14:12:26:
$_POST['runame'] is nog steeds een array.



Wat moet $runame dan zijn ipv een array?

Ik heb het idee dat het in aparte variabelen moet worden 'ontleed'. Als dit zo is, op welke manier doet php dit?
 
- SanThe -

- SanThe -

06/06/2015 21:24:54
Quote Anchor link
Met foreach().
 
Johan West

Johan West

06/06/2015 23:40:46
Quote Anchor link
mbv implode gooit hij bij mij 5 variabelen in 1 tabel en niet als 5 verschillende tabellen.
 
- Ariën  -
Beheerder

- Ariën -

07/06/2015 07:45:36
Quote Anchor link
Implode zet een array om in een string.

Maar nog steeds blijf ik benieuwd wat voor vijf tabellen het zijn?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/06/2015 11:14:57
Quote Anchor link
Johan West op 06/06/2015 23:40:46:
mbv implode gooit hij bij mij 5 variabelen in 1 tabel en niet als 5 verschillende tabellen.


Sorry dat ik er even tussen kom Johan maar ik denk dat we het eerst even over definities moeten hebben:

Het onderstaande plaatje laat één tabel zien.
In die tabel zie je kolommen. Een kolom loopt van boven naar beneden (verticaal)
Ook zie je rijen. een rij loopt van links naar rechts. Beiden bestaan uit verschillende vakjes.

In database termen praten we over een tabel, een kolom of een record/rij. een vakje is een field

Afbeelding
Gewijzigd op 07/06/2015 11:16:12 door Frank Nietbelangrijk
 
Johan West

Johan West

07/06/2015 11:59:03
Quote Anchor link
Frank Nietbelangrijk op 07/06/2015 11:14:57:
Johan West op 06/06/2015 23:40:46:
mbv implode gooit hij bij mij 5 variabelen in 1 tabel en niet als 5 verschillende tabellen.


Sorry dat ik er even tussen kom Johan maar ik denk dat we het eerst even over definities moeten hebben:

Het onderstaande plaatje laat één tabel zien.
In die tabel zie je kolommen. Een kolom loopt van boven naar beneden (verticaal)
Ook zie je rijen. een rij loopt van links naar rechts. Beiden bestaan uit verschillende vakjes.

In database termen praten we over een tabel, een kolom of een record/rij. een vakje is een field

Afbeelding
 
Eddy E

Eddy E

07/06/2015 12:05:26
Quote Anchor link
Wil je tabellen opslaan die gebruikers aanmaken?
Waarom niet dit als een JSON-array opslaan?
Want dat is is een tabel in feite. En dat kan dan in 1 tekst-veld, in 1 rij, 1 kolom, 1 tabel.
 
Johan West

Johan West

07/06/2015 12:39:21
Quote Anchor link
het probleem is dat ik $sql[$i] niet kan gebruiken in deze code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ($conn->query($sql) === TRUE) // het lukt niet om zomaar de brackets te gebruiken


Het lijkt met niet logisch 5 x verbinding te maken, maar welke oplossingen biedt php om van een array meerdere tabellen te maken.

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
84
85
86
87
88
89
90
91
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>invoeren tekst</title>
        <link rel="prefetch" href="http://">
        <link rel=" stylesheet" type="text/css" href="TekstInvoerCascade.css" media="screen" />
    </head>    
    <body>
 <form action="kies5cat6.php" method="post" accept-charset="UTF-8"><?php
for ($i=0; $i < 5; $i++) {
    ?>
<p>
        
        <label for="runame_<?php echo $i ?>">
        Naamveld<?php echo ($i + 1) ?>
        </label>
        
        
        <input type="text" name="runame[]"
        id="runame_<?php echo $i ?>"
        value="" />
    
    </p><?php
}
?>
<p>
    <button type="submit">Opslaan</button>
</p>
</form>
</body>
</html>

<?php
// hieronder het verbindings script met de database
    
$servername = "localhost";
$username = "****";
$password = "*****";
$dbname = "databasenaam";

// maak verbinding met localhost via mijn gebruikersnaam.

$conn = new mysqli($servername, $username, $password, $dbname);

// Controleer de verbinding

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}


//

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    if (isset($_POST['runame']) && is_array($_POST['runame'])) {
        echo '<pre>'.print_r($_POST['runame'], true).'</pre>';
        
        
        If (isset($_POST['runame']) && (is_array($_POST['runame'])) && ($runame = " ") && ($newvar = " ") ) {
            
            //
            $runame = $_POST['runame'];
            $newvar = implode ("," , $runame);
            
            for ($i=0; $i < 5; $i++) {
            
            $sql[$i] = "CREATE TABLE  `$newvar2` (linkoms VARCHAR(80), linkadd VARCHAR (80) )" ;
                                        }
                }
                          
    
    
        
     if ($conn->query($sql) === TRUE) // het lukt niet om zomaar de brackets te gebruiken
    
     {
        
    echo "Nieuwe tabellen zijn aangemaakt genaamd". $newvar ;

}
else {
    
    echo "Fout: " . " <br>" . $conn->error;
}

    
 $conn->close();
        
        
    }
else {
        echo "fout: tabel 'runame' niet aanwezig of is geen array";
    }

}

?>
Gewijzigd op 07/06/2015 12:56:26 door Johan West
 
- Ariën  -
Beheerder

- Ariën -

07/06/2015 12:44:20
Quote Anchor link
Door foreach() te gebruiken. Maar toch blijft er nog steeds een vraag open staan.....
 
Johan West

Johan West

07/06/2015 15:35:13
Quote Anchor link
ik heb het script inmiddels gefixed.

Wat ik voor ogen heb Aar zijn wat proefjes. Het is meer om de werking van PHP en MYSQL te begrijpen.

Achter de variabelen gaat niet veel schuil, bijv. een image uploaden of een link of tekst en deze in de database verwerken.

Wat ik me afvraag is of programmeurs via een bepaalde structuur te werk gaan. Ik weet dat er UML is, maar dat is nog erg abstract.

Is er niet een soort procedure die tussen UML en de code in zit die je kunt doorlopen om bepaalde oplossingen te verkrijgen?
 
Thomas van den Heuvel

Thomas van den Heuvel

07/06/2015 17:27:23
Quote Anchor link
Je kunt PHP en MySQL in afzondering bestuderen. Ik denk niet dat het de snelheid waarmee je inzicht verkrijgt wordt verhoogd door te proberen beide tegelijkertijd aan te leren...

Persoonlijk zou ik met PHP beginnen, en misschien daarvoor nog met HTML/CSS/JavaScript. En daarna pas MySQL.

Johan West op 07/06/2015 15:35:13:
Is er niet een soort procedure die tussen UML en de code in zit die je kunt doorlopen om bepaalde oplossingen te verkrijgen?

Mja, dat heet een functionele specificatie. Eerst bepaal je wat je gaat doen, en vervolgens hoe. Dat proberen we nou al een tijdje duidelijk te krijgen. Als je ons niet vertelt wat je wilt doen, kunnen wij je ook niet vertellen hoe.

Ik bespeur trouwens een zeker patroon in je topics. Vaak geef je ofwel aan dat een topic is opgelost zonder de oplossing te plaatsen en in andere gevallen reageer je helemaal niet meer, laat je de status van je vraagstuk onduidelijk of geef je na herhaaldelijk verzoek nog steeds geen nadere toelichting op wat je probeert te bereiken. Ik weet niet hoor, maar volgens mij is dat niet helemaal zoals een hulpforum zou moeten werken.

Er wordt vaak veel en enthousiast gereageerd maar er wordt niet zoveel mee gedaan. Misschien is het naïef van mij om te verwachten dat het toch (ook) een beetje geven (is) en (niet enkel) nemen is, maar als ik zie hoeveel tijd/reacties er in jouw topics gaan, en hoeveel er uit terugkomt dan komt mij het reageren op jouw threads over als complete tijdsverspilling.
Gewijzigd op 07/06/2015 17:29:03 door Thomas van den Heuvel
 
Johan West

Johan West

07/06/2015 22:34:12
Quote Anchor link
@Thomas:

Ik doe wel degelijk iets met de posts hier. Ik wil ook best de oplossing laten zien van mijn vraagstuk. Je hulp is zeer welkom dus bij deze:

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
<?php
// script vervolg nadat verbinding is gelegd met db


if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    
    
    if (isset($_POST['runame']) && is_array($_POST['runame'])) {
        echo '<pre>'.print_r($_POST['runame'], true).'</pre>';
        
        
        If (isset($_POST['runame']) && (is_array($_POST['runame'])) && ($runame = " ") && ($newvar2 = " ") ) {
            
            // implode en foreach toegepast
            // de accolades die bij foreach horen moeten op de juiste plek worden gezet

            
            
            $runame = $_POST['runame'];
            $newvar2 = implode (", " , $runame);
            foreach ($runame as $newvar2)
            
            {
$sql = "CREATE TABLE IF NOT EXISTS `$newvar2` (linkoms VARCHAR(80), linkadd VARCHAR (80) )" ;
                
        
        if ($conn->query($sql) === TRUE)
            {
echo "De volgende tabellen zijn aangemaakt : ". $newvar2 ; } // haat ging om de input in de database niet om de browser output
        else { echo "Fout: " . " <br>" . $conn->error;}
            }
            $conn->close();  
        }

    else { echo "fout: 'runame' niet aanwezig of is geen array"; }
        
        }
}


//

?>




Toevoeging op 08/06/2015 09:58:46:

@Thomas

Wat ik doe met php en mysql stelt nog niet heel veel voor. Ik heb bij het maken van scripts niet altijd een specifiek doel voor ogen, anders dan het begrijpen van de code. Ik heb geen groter plan, behalve wat code die ik wil kunnen toepassen.

Zodra je gaat programmeren en php code wilt oefenen kom je al snel met databases in aanraking. Ik vind databases erg verhelderend en ze brengen structuur aan in het programmeren. In excel kun je redelijk een goede template maken van een database, maar ik weet nog lang niet alles van mysql en databases.

Jij schrijft bijvoorbeeld het volgende:

Thomas van den Heuvel op 06/06/2015 14:12:26:
Vergelijk dit met een spreadsheet: als elke tab verschillende informatie bevat zijn je tabs je tabellen. Elke rij in je spreadsheet is een record. Elke kolomheading bevat een structuuromschrijving van die kolom.


Ten eerste de kolomheading. Ik neem aan dat dit een aparte rij is. In excel moet je zelf een rij met omschrijvingen maken. Erg handig zou het zijn als een matrix raster standaard variabele kolomhoofden en rijhoofden zou hebben. Ik weet dit echter niet zeker; want het is niet zo dat je VERPLICHT bent om een kolomhoofd of rijhoofd te maken. Of wel?

Verder ben ik benieuwd wat er bedoeld wordt met structuuromschrijving? Is dit de naam die de kolom- of rijhoofden hebben?

Nu ik nog weinig kennis heb van databaes is het niet makkelijk in te schatten welke structuur een database met hebben. Vooral omdat ik niet altijd een doelgericht plan heb, maar juist wat code wil testen.
Gewijzigd op 08/06/2015 10:00:39 door Johan West
 
Ivo P

Ivo P

08/06/2015 16:13:22
Quote Anchor link
je geeft wel steeds aan dat je wat doet met de info etc, maar 1 belangrijk punt doe je niet:

je hebt in dit topic, en ook niet in een topic van een week of zo geleden, aangegeven WAAROM je meerdere tabellen aanmaakt.

Hierboven wordt het aangegeven en in een vorig topic heb ik het ook gezegd: de structuur van een database hoort te staan. Deze verandert niet meer zolang de applicatie niet verandert.

Dat is een dingetje dat volgens ons erg belangrijk is, maar dat door jou hardnekkig genegeerd wordt. Kennelijk zit je helemaal vast in de tunnelvisie dat dat de weg is, zodat je je daar niet meer vanaf laat leiden.

Als dat labeltje "runame" betekenis heeft (je kijkt trouwens niet of je wel een geldige naam binnen krijgt, of dat zo'n tabel al bestaat)
dan zou je ook 1 tabel kunnen maken, eenmalig dus, met 1 extra kkolom

dus naast linkoms en linkadd nog een kolom "runame"

Dan kun je volstaan met die ene tabel.

ipv "SELECT linksom, linkadd FROM myruname" wordt het dan

"SELECT linksom, linkadd FROM tabel WHERE runame = 'myruname'"

En dan heb je dus maar 1 tabel nodig en niet 500

Toevoeging op 08/06/2015 16:16:38:

Ik maak trouwens al flink wat jaar applicaties in PHP, maar afgezien van een enkel install-tooltje of een database-beheerstool, zorg ik altijd dat de user waarmee met de database geconnect wordt, nooit méér rechten heeft dan nodig.

En CREATE (tabel, of database) heeft die user dus noooit.

Het is dus een erg uitzonderlijke route als jij dat wél nodig zou hebben.
 
Johan West

Johan West

08/06/2015 21:42:08
Quote Anchor link
Ivo P op 08/06/2015 16:13:22:
je geeft wel steeds aan dat je wat doet met de info etc, maar 1 belangrijk punt doe je niet:

je hebt in dit topic, en ook niet in een topic van een week of zo geleden, aangegeven WAAROM je meerdere tabellen aanmaakt.

Hierboven wordt het aangegeven en in een vorig topic heb ik het ook gezegd: de structuur van een database hoort te staan. Deze verandert niet meer zolang de applicatie niet verandert.

Dat is een dingetje dat volgens ons erg belangrijk is, maar dat door jou hardnekkig genegeerd wordt. Kennelijk zit je helemaal vast in de tunnelvisie dat dat de weg is, zodat je je daar niet meer vanaf laat leiden.

Als dat labeltje "runame" betekenis heeft (je kijkt trouwens niet of je wel een geldige naam binnen krijgt, of dat zo'n tabel al bestaat)
dan zou je ook 1 tabel kunnen maken, eenmalig dus, met 1 extra kkolom

dus naast linkoms en linkadd nog een kolom "runame"

Dan kun je volstaan met die ene tabel.

ipv "SELECT linksom, linkadd FROM myruname" wordt het dan

"SELECT linksom, linkadd FROM tabel WHERE runame = 'myruname'"

En dan heb je dus maar 1 tabel nodig en niet 500

Toevoeging op 08/06/2015 16:16:38:

Ik maak trouwens al flink wat jaar applicaties in PHP, maar afgezien van een enkel install-tooltje of een database-beheerstool, zorg ik altijd dat de user waarmee met de database geconnect wordt, nooit méér rechten heeft dan nodig.

En CREATE (tabel, of database) heeft die user dus noooit.

Het is dus een erg uitzonderlijke route als jij dat wél nodig zou hebben.


Daar had ik nog niet eerder over nagedacht. Mijn idee is dat een user kan inloggen op een database. 20 users hebben dan 20 x een eigen database.

Ik ben nog niet aan authenticatie toegekomen, misschien ga ik me er later in verdiepen, maar zitten er gevaren aan het geven van schrijf rechten aan een user?

1 van de gevaren van php is dat het nog onstabiel zou zijn als je te weinig alert bent op mysql injecties, maar uiteindelijk moet een mysql dbase toch op een normale wijze mbv php te beveiligen zijn?
 

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.