database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

30/01/2012 15:56:03
Quote Anchor link
Ola, voor het maken van een database en database tabellen (structuur) heb ik tot op heden gebruik gemaakt van PhpMyAdmin. Aangezien ik een CMS ga maken wil ik nu dat de database structuur vanuit PHP code gegenereerd word. Hierover 2 vragen.

- Kan ik via code de charset van een (lege) database instellen op UTF8?

- Kan ik via code kijken of een tabel bestaat, en zoniet deze laten genereren?
 
PHP hulp

PHP hulp

27/11/2024 03:58:41
 
Wouter J

Wouter J

30/01/2012 16:01:48
Quote Anchor link
Allebei de antwoorden zijn ja. Zie ook de syntax voor het aanmaken van databases: http://dev.mysql.com/doc/refman/5.0/en/create-database.html
En tabellen: http://dev.mysql.com/doc/refman/5.0/en/create-table.html

Voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
CREATE DATABASE IF NOT EXISTS deDBname CHARACTER SET utf8

En voor een tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE TABLE IF NOT EXISTS deTableName (
  id int NOT NULL auto_increment,
  name varchar(50) NOT NULL,
  PRIMAIR KEY (id)
)

Zie ook: http://phptuts.nl/view/41/2/
Gewijzigd op 30/01/2012 16:18:43 door Wouter J
 
Ozzie PHP

Ozzie PHP

30/01/2012 16:15:31
Quote Anchor link
Kijk dat is nog eens een schitterend antwoord :-)))

Even dan toch nog een vraagje...

Ik schrijf nu in de "manual" van mijn CMS dat men een database moet aanmaken met charset utf8. Maar als ik het dus goed begrijp is dit helemaal niet nodig en kan ik de database volledig vanuit de code zelf aanmaken? Maar waar moet ik dan het wachtwoord en de gebruikersnaam opgeven? En werkt dit ook op een shared host?
 
Wouter J

Wouter J

30/01/2012 16:37:53
Quote Anchor link
Er stond een fouten in de syntax, heb ze er even uitgehaald.

Wat je doet is het volgende:
Je maakt connectie met de MySQL server met mysql_connect. Vervolgens gebruik je niet mysql_select_db. Je voert eerst de query zoals hij hierboven staat uit.
Vervolgens selecteer je de DB door met mysql_select_db en dan voer je de CREATE TABLE queries uit:
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
<?php
    $sql
= mysql_connect('localhost', 'user', 'pass');
    if( $sql === false )
      echo '[ERROR] We could not connect: '.mysql_error();
    else
    {
      $cQuery = "CREATE DATABASE IF NOT EXISTS ozzieCMS CHARACTER SET utf8;";
      $createDb = mysql_query($cQuery, $sql);
      if( $createDb === false )
        echo '[ERROR] We could not make DataBase: '.mysql_error();
      else
      {
        $cQuery = "
          CREATE TABLE IF NOT EXISTS users(
            id int NOT NULL auto_increment,
            name varchar(50) NOT NULL,
            pass varchar(50) NOT NULL,
            PRIMAIR KEY (id)
          );
          CREATE TABLE IF NOT EXISTS pages(
            id int NOT NULL auto_increment,
            name varchar(50) NOT NULL,
            content longtext NOT NULL,
            PRIMAIR KEY (id)
          );
        "
;
        $createTables = mysql_query($cQuery, $sql);
        if( $createTables === false )
          echo '[ERROR] We could not make tables: '.mysql_error();
      }
    }

?>
 
Ozzie PHP

Ozzie PHP

30/01/2012 16:49:05
Quote Anchor link
Wouter, thanks!!!!

Nog even wat onduidelijkheid over die user en die pass. Waar komen die nou precies vandaan?

Stel je dus voor... iemand gaat mijn CMS gebruiken en er moet dus een database worden aangemaakt. Kan ik dan een invoerveld tonen waar men een gebruikersnaam en wachtwoord in moet vullen? En dat ik die dan in de $sql verwerk? Of moet ik eerst via phpMyAdmin al een gebruikersnaam / wachtwoord instellen? En hoe koppel ik dan een user aan een database? Sorry... ik ben het eventjes helemaal kwijt...
 
Wouter J

Wouter J

30/01/2012 16:51:27
Quote Anchor link
Je moet je installatie in meerdere delen opsplitsen. Bij stap 1 laat je ze de MySQL gegevens (host, user en pass) invullen. Deze sla je ergens op en dan bij stap 2 laat je deze code lopen. De pass en user haal je op vanuit het geen ze net hebben ingevoerd. In stap 2 maak je dus jou database en tabellen.
Vervolgens kun je bij Stap 3 de gebruiker basis informatie, als sitenaam korte omschrijving enz., laten invullen. Deze sla je dan op in de database.

PS: Heb je ooit ook een andere CMS systeem gebruikt? Zo niet dan raad ik je aan dat eerst te doen, iets als Drupal of WordPress. Want dan zie je meteen hoe die zulke dingen oplossen.
Gewijzigd op 30/01/2012 16:52:08 door Wouter J
 
Ozzie PHP

Ozzie PHP

30/01/2012 17:01:50
Quote Anchor link
Thanks Wouter... ik heb er nog nooit een geinstalleerd, maar wel mee gewerkt :)

Maar even om terug te komen op mijn vraag... bij een shared host dan heb je toch al een gebr. naam en wachtwoord? En op je eigen server mag je die dan zelf "verzinnen" of moet je die eerst ergens instellen?

"Bij stap 1 laat je ze de MySQL gegevens (host, user en pass) invullen."
Dus zijn deze user en pass al bekend, of moeten ze die hier aanmaken?
 
Wouter J

Wouter J

30/01/2012 17:05:38
Quote Anchor link
Als je een nieuwe domeinnaam aan een host koppelt krijg je automatisch de MySQL gegevens. Deze weet iedereen die een host heeft dus. Dus ja, deze gebruikers zijn al bekent. Die kun je niet zomaar even aanmaken, zou wel makkelijk zijn. Dan kun je zo'n beetje bij elke website in de database...
 
Ozzie PHP

Ozzie PHP

30/01/2012 18:31:16
Quote Anchor link
Wouter, ik heb even gekeken hoe het bij mijn shared host werkt.

Ik log dan met mijn gegevens in op cPanel (ken je dat?). Hier kan ik dan een nieuwe database aanmaken (ik hoef geen geberuikersnaam en wachtwoord op te geven). Vervolgens maak ik een "user" aan en die moet ik wel een gebruikersnaam en wachtwoord geven. Vervolgens koppel ik deze "user" aan de database die ik zojuist heb gemaakt. De vraag is nu dus hoe dit dan werkt in combinatie met jouw code. Het lijkt erop dat ik vanuit cPanel een database en een user moet aanmaken en dat dit dan dus niet geautomatiseerd kan. Of zit ik ernaast?
 
Pieter Jansen

Pieter Jansen

30/01/2012 20:16:29
Quote Anchor link
Nee je zit er niet naast, PHP kan geen databases aanmaken. Daar heeft het de rechten niet voor. Je kunt wel de queries uitlezen die je ook gebruikt om een database te maken, maar als je die in PHP zou uitvoeren zou je een error terug krijgen. Het is gebruikelijk bij een CMS dat de gebruiker zelf de host, gebruiker, wachtwoord en database aanlevert. Dit is vaak weinig werk en vergt weinig inspanning. Van daar uit kun je als CMS de tabellen toe gaan voegen die het nodig heeft.

Toevoeging op 30/01/2012 20:16:30:

Nee je zit er niet naast, PHP kan geen databases aanmaken. Daar heeft het de rechten niet voor. Je kunt wel de queries uitlezen die je ook gebruikt om een database te maken, maar als je die in PHP zou uitvoeren zou je een error terug krijgen. Het is gebruikelijk bij een CMS dat de gebruiker zelf de host, gebruiker, wachtwoord en database aanlevert. Dit is vaak weinig werk en vergt weinig inspanning. Van daar uit kun je als CMS de tabellen toe gaan voegen die het nodig heeft.
 
Ozzie PHP

Ozzie PHP

30/01/2012 20:21:43
Quote Anchor link
Hoi Merijn,

Dankjewel voor je toelichting!

Dus dit stukje uit de code van Wouter gaat dan niet werken?

CREATE DATABASE IF NOT EXISTS deDBname CHARACTER SET utf8

Kan ik wel (na het aanmaken van een database) de character set via php code aanpassen? Of moet ik dat ook handmatig doen?
 
Pieter Jansen

Pieter Jansen

30/01/2012 20:53:53
Quote Anchor link
Uhm, goede vraag, dat zou ik voor je moeten controleren. Over de create DATABASE, nee PHP zal dat niet slikken. Je kunt het proberen maar dit wordt door heel veel hosts geblokkeerd, dus als het op de localhost werkt betekent het niet dat het ook op de hosts van de hosting bedrijven werken.

Wat je wel kunt doen is kijken of een database een bepaalde charset hanteert. Het enige nadeel is dat je met charsets vrij weinig kunt als het eenmaal ingesteld is. Heeft ook te maken met de "engines" ofwel algoritmes te maken. Defacto standaard is de myISAM, hier zul je de charset wel kunnen wijzigen maar of dat met de rest ook kan.. Dat durf ik niet te zeggen. Daarnaast doet het er niet toe wat de default is voor de database zelf, zolang de tabellen maar UTF8 hanteren en daar heb jij gelukkig zelf controlle over :)
 
- SanThe -

- SanThe -

30/01/2012 21:07:24
Quote Anchor link
Merijn Venema op 30/01/2012 20:16:29:
Nee je zit er niet naast, PHP kan geen databases aanmaken. Daar heeft het de rechten niet voor.


Als je de juiste gebruikersnaam en password meegeeft die wel de juiste rechten heeft kan het wel. Ik doe het zelf ook zo.
 
Wouter J

Wouter J

30/01/2012 21:14:40
Quote Anchor link
@Merijn, ik test het altijd uit wat ik post en het werkt gewoon.

PHP heeft er een (deprecated) functie voor: mysql_create_db alleen daarin geeft PHP ook aan dat je dit moet doen met een CREATE DATABASE query. Dus volgens mij is het de manier zoals het hoort?
 
Ozzie PHP

Ozzie PHP

30/01/2012 21:17:30
Quote Anchor link
Oke, eerst kan het wel, dan weer niet, dan weer wel... I'm getting confused :-s

In het geval dat het WEL kan, kan het dan in alle gevallen, dus ook op shared hosts???
 
- SanThe -

- SanThe -

30/01/2012 21:19:45
Quote Anchor link
Dat ligt er maar net aan welke gebruikergegevens je hebt. Heeft die gebruiker CREATE rechten dan kan het gewoon.
 
Aad B

Aad B

30/01/2012 21:21:25
Quote Anchor link
Het kan zoals Wouter al zegt en bijvoorbeeld wanneer je de juiste rechten hebt. Kan je (via php) op MySQL inloggen met root en bijbehorend password dan lukt het wel. Het zal dus een rechten kwestie zijn. Het is geen php kwestie, immers php komt met een bepaalde user binnen en het maakt MySQL niet uit of je met php of commandline of weetikveel tooling inlogt.
 
Ozzie PHP

Ozzie PHP

30/01/2012 21:28:12
Quote Anchor link
Oké, maar ik heb dus een site op een shared host. Daar log ik op cPanel en kan ik een database aanmaken (zonder gebruikersnaam / wachtwoord op te geven). Ik kan ook users aanmaken en die kan ik dan aan een database koppelen. Deze users moet je wel een gebruikersnaam / wachtwoord geven.

Op mijn werk echter heb ik geen toegang tot cPanel (of iets dergelijks) en kan ik alleen inloggen in PhpMyAdmin. Ik kan hier (volgens mij) wel een database aanmaken, maar in PhpMyAdmin is er geen sprake van users (toch)??? Of wel?

Ik weet nu dus niet exact hoe ik dit moet aanpakken voor mijn CMS. Moet ik de gebruiker nu zelf een database aan laten maken, of moet ik dit door het CMS laten doen. En zo ja, werkt dit dan wel in alle gevallen?
 
Pieter Jansen

Pieter Jansen

30/01/2012 21:32:21
Quote Anchor link
@iedereen, excuses voor de verwarring. Ja PHP kan databases aanmaken. Getuige PHPmyAdmin natuurlijk ,maar waar ik op doelde is dat je nimmer die rechten hebt om dat te doen in een shared of zelfs soms VPS omgeving.

In ieder geval moet je dan wel volle rechten hebben inderdaad, dat heb je op een shared hosting nimmer. Vaak ben je ook gelimiteerd aan x aantal databases dus levert dat ook problemen op. Root access op shared hosting ? Ik ken er geen enkele. Sorry voor de verwarring, het is mogelijk in PHP echter niet raadzaam voor een CMS die je makkelijk en snel wilt kunnen uitrollen.
 
Wouter J

Wouter J

30/01/2012 21:39:38
Quote Anchor link
Je moet even onthouden dat PHPMyAdmin gewoon een handig tooltje is om databases te beheren, maar meer niet.

Laten we even bij het echte begin beginnen: De MySQL server. Deze server bevat alle databases met tabellen erin en de MySQL users.
Om een overzicht te krijgen van wat er nou op deze server staat hebben een aantal developers PhpMyAdmin geschreven. Dit is eigenlijk gewoon een website die heel veel queries uitvoert waarmee hij de hele SQL server uitleest. PhpMyAdmin heeft ook een gebruikersnaam + wachtwoord nodig die je instelt in de config file van PhpMyAdmin. Je merkt er dus niks van, maar ook PhpMyAdmin logt in.

Je hebt om toegang te hebben tot de SQL server altijd een gebruikersnaam + wachtwoord nodig, anders kom je er niet in.
 
Ozzie PHP

Ozzie PHP

30/01/2012 22:31:02
Quote Anchor link
Dank heren. Om dan nog even terug te komen bij mijn basisvraag. Is het dan toch niet het handigst om de gebruiker handmatig een database aan te laten maken? En dan deze gegevens in te voeren in het cms en dat het cms dan de tabellen aanmaakt?
 

Pagina: 1 2 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.