[PDO]Namen genereren

Door Teun Beijers, 14 jaar geleden, 3.424x bekeken

Dit script haalt uit 2 arrays een combinatie van een voornaam en een achternaam. Deze stopt ie vervolgens met behulp van PDO in een database. Was eigenlijk vooral gemaakt om PDO te testen, maar altijd leuk om te delen, misschien heeft iemand er nog iets aan ^^.

Voorbeeld stopt niks in database, doet alleen maar echo.

Voorbeeld: http://scriptfreakz.nl/voorbeelden/namen.php

Gesponsorde koppelingen

PHP script bestanden

  1. pdonamen-genereren

 

Er zijn 17 reacties op 'Pdonamen genereren'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Kees Schepers
kees Schepers
14 jaar geleden
 
0 +1 -0 -1
Goeie grutten, hier maak je toch een topic voor aan als je dit wilt delen, toch geen script. Een script is iets functioneels wat een andere gebruiker eventueel kan gebruiken in mijn ogen. Dit is iets waar een andere gebruiker eventueel van kan leren.

Comments:
- $aantalnamen hoef je toch niet te maken? count($voornamen);

Voor de rest zou ik een volgende array maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$names
= array();
$names[] = array('firstname' => 'Kees', 'lastname' => 'schepers');
//etc..
?>


Succes ermee :)
Teun Beijers
Teun Beijers
14 jaar geleden
 
0 +1 -0 -1
$aantalnamen is wel nodig hoor, stel je voor dat je een array hebt van 1000 namen? En je wilt er maar 10 maken.
Ik had het eerst trouwens op jouw manier, maar die vond ik onhandig omdat je dan iedere keer firstname en lastname erbij moet doen EN omdat je dan eigenlijk net zoveel voor als achternamen moet hebben.

Het kan ook gebruikt worden hoor, denk aan een script voor een fantasy voetbalmanager ofzo. Makkelijk spelers maken op deze manier.
Jurgen assaasas
Jurgen assaasas
14 jaar geleden
 
0 +1 -0 -1
Vrij nutteloos script maar aantal namen slaat nergens op, gewoon in een foreach loop dan hoef je niet te tellen hoeveel namen er zijn.
Jelmer -
Jelmer -
14 jaar geleden
 
0 +1 -0 -1
Het leuke van statements is dat je ze kan hergebruiken met andere variabelen. Je zou de PDO::prepare aanroep zonder problemen buiten je for-lus kunnen halen.

Sterker nog, je zou zelfs de twee PDOStatement::bindParam aanroepen buiten de for-lus kunnen halen. Je _bind_ een variabele aan een placeholder. Dat betekent dat die variabele pas wordt uitgelezen op het moment dat je PDOStatement::execute aanroept. De waarden die ze dan op dat moment hebben, wordt in de query gebruikt. Of je script er leesbaarder door wordt... ik denk het niet.
Kees Schepers
kees Schepers
14 jaar geleden
 
0 +1 -0 -1
Nettere manier:

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
<?php
define('KEY_FIRSTNAME',0);
define('KEY_LASTNAME',1);

$names = array();
$names[] = array('Teun','Beijers');
$names[] = array('Henk','Jansen');
$names[] = array('Piet','De Vries');

try {
    $dbConnection = new PDO($db_soort.':host='.$db_host.';dbname='.$db_naam , $db_user , $db_pass , array(PDO::ATTR_PERSISTENT => true));
    $stmt = $dbConnection->prepare('INSERT INTO namen SET voornaam = ?, achternaam = ?');
    
    foreach ($names as $name) {
        $stmt->bindParam(1,$name[KEY_FIRSTNAME],PDO::PARAM_STR);    
            
        if(!array_key_exists(KEY_FIRSTNAME,$name) || is_null($name[KEY_LASTNAME])) {
            $stmt->bindValue(2,null,PDO::PARAM_NULL);
        }
else {
            $stmt->bindParam(2,$name[KEY_LASTNAME],PDO::PARAM_STR);        
        }

        $stmt->execute();
        echo implode(' ',$name).'<br />';
        
    }
}
catch( PDOException $e ) {
  die($e->getMessage());
}

?>
Toby hinloopen
toby hinloopen
14 jaar geleden
 
0 +1 -0 -1
@ kees:
wat is er netter aan?
Roel -
Roel -
14 jaar geleden
 
0 +1 -0 -1
Leuk tooltje...
Teun Beijers
Teun Beijers
14 jaar geleden
 
0 +1 -0 -1
En ik zal het nog een keer zeggen: op al die manieren die jullie beschrijven kun je EN niet kiezen hoeveel namen je wilt genereren(bij jullie gaat het gewoon tot de voornamen op zijn) EN je moet eigenlijk evenveel voor als achternamen hebben
Toby hinloopen
toby hinloopen
14 jaar geleden
 
0 +1 -0 -1
@teuneboon:
ze willen gewoon lopen zeuren... maar dit is gewoon té erg. Hun "verbeteringen" zijn nog slechter dan het originele script.
Teun Beijers
Teun Beijers
14 jaar geleden
 
0 +1 -0 -1
Dus je zegt dat het originele script slecht is? :P.

Ik snap je wel hoor :P.
Toby hinloopen
toby hinloopen
14 jaar geleden
 
0 +1 -0 -1
Enige "verbetering" die ik kan bedenken is het gebruik van deze functie:
http://w3schools.com/php/func_array_rand.asp
http://nl3.php.net/manual/en/function.array-rand.php

alhoewel het erg weinig verschil maakt.
btw, raar dat er geen functie is voor het ophalen van een random array VALUE ipv een key...
Remie
remie
14 jaar geleden
 
0 +1 -0 -1
Heb het originele script iets veranderd zodat er geen dubbele mogelijk zijn :D
Oja heb ook random toegevoegd :D
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
<?php
/*
CREATE TABLE `namen` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT ,
`voornaam` VARCHAR( 50 ) NOT NULL ,
`achternaam` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`id`
)
) ENGINE = MYISAM
*/

$db_soort = 'mysql';
$db_host = 'localhost';
$db_naam = 'namendb';
$db_user = 'root';
$db_pass = '***';

$voornamen = array("Teun","Henk","Piet","Jan","Frederik","Ido","Joost","Gerrit","Pieter","Jodie","Marijke");
$achternamen = array("Beijers","Jansen","de Vries","Hanssen","van Hamburger","van Friet");
$aantalnamen = 70;
$mogelijkheden = array();
foreach($voornamen as $Vnum => $voornaam)
{

    foreach($achternamen as $Anum => $achternaam)
    {

        $mogelijkheden[] = array($Vnum,$Anum);
    }
}

shuffle($mogelijkheden);
try
{
    $mysql = new PDO($db_soort.':host='.$db_host.';dbname='.$db_naam , $db_user , $db_pass , array(PDO::ATTR_PERSISTENT => true));
    $sql = $mysql->prepare('INSERT INTO namen SET voornaam = ?, achternaam = ?');
    $i = 0;
    for($i = 0; $i < $aantalnamen; $i++)
    {

        if(!isset($mogelijkheden[$i]))
        {

            break;
        }

        $voornaam = $voornamen[$mogelijkheden[$i][0]];
        $achternaam = $achternamen[$mogelijkheden[$i][1]];      
        $sql->execute(array($voornaam,$achternaam));
        echo $voornaam.' '.$achternaam.'<br />';
    }
}

catch( PDOException $e )
{

    die( $e->getMessage() );
}

?>
Teun Beijers
Teun Beijers
14 jaar geleden
 
0 +1 -0 -1
Bedankt, heb het als alternatief erbij gezet.
Frank -
Frank -
14 jaar geleden
 
0 +1 -0 -1
Quote:
Heb het originele script iets veranderd zodat er geen dubbele mogelijk zijn

En waarom staat er dan geen UNIQUE-constraint op de kolom/kolommen die uniek moeten zijn? Ja, er staat een UNIQUE op het id, maar die wordt toch al automatisch aangemaakt, dat helpt dus niet bij unieke namen.

Kortom:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE UNIQUE INDEX
  u_voor_achternaam
ON
  namen (
    voornaam,
    achternaam
);
Onbekend Onbekend
Onbekend Onbekend
14 jaar geleden
 
0 +1 -0 -1
Goed script! Leuk dat als je ?aantal=1000 doet ook vaker de zelfde naam krijgt. En er zijn tegenwoordig wel veel mensen familie van me kaar.

Waarom is dit ook al weer nuttig?
Teun Beijers
Teun Beijers
14 jaar geleden
 
0 +1 -0 -1
Denk aan een sportmanagerscript waar je toch ergens de spelerdatabase van moet genereren
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Haras
Haras
14 jaar geleden
 
0 +1 -0 -1
Ik vind het een heel goed script.
Het is voor beginners, daaruit kunnen ze wat leren.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. pdonamen-genereren

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

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.