php functie bij bestaan of niet bestaan van tables

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michel Bak

Michel Bak

23/06/2017 09:08:57
Quote Anchor link
Hallo,

Ik ben bezig met een formulier schrijven die wanneer deze is ingevuld een mailtje stuurt naar 2 verschillende adressen. Dit lukt echter zit ik met een probleem:
Ik krijg het niet voor elkaar om ervoor te zorgen dat het formulier niet ingevuld kan worden wanneer de tables in de database nog niet bestaan. Ik heb veel gezocht en verschillende manieren geprobeerd waaronder de volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql
= "SELECT * FROM table ORDER BY datum ASC" && "SELECT * FROM table ORDER BY datum ASC";
$result = mysqli_query($connect, $sql);

if (mysqli_num_rows($result) < 1){
   echo "De tabellen voor het invoeren van de gegevens zijn nog niet aangemaakt. Probeer het later nog eens.";
   }
else{
?>


Hierbij krijg ik de volgende melding (maakt niet uit of de tables wel of niet bestaan):
Error: Oeps er is iets fout gegaan op deze pagina! Probeer later nog eens aan te melden, of klik hier om terug te keren en opnieuw te proberen.Error type: 2: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given

Ook heb ik de volgende manier geprobeerd
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$result
= mysql_query('select 1 from `table`');

if($result !== FALSE)
else
{
   echo "table bestaat niet";
     }

?>


Ook deze krijg ik niet werkend, evenals andere constructies. Hoe los ik dit op?
Alvast bedankt :)

PS: er zijn 2 tables die ik gebruik voor dit formulier
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 23/06/2017 13:54:03 door - Ariën -
 
PHP hulp

PHP hulp

29/03/2024 15:02:41
 
Willem vp

Willem vp

23/06/2017 09:34:54
Quote Anchor link
Ik zou als query SHOW TABLES LIKE 'table' uitvoeren en kijken of je in het resultaat de gewenste tabel terugkrijgt.
 
- Ariën  -
Beheerder

- Ariën -

23/06/2017 13:56:52
Quote Anchor link
Vanwaar die controle of de tabellen bestaan? Zijn er momenten dat je verwacht dat deze niet zullen bestaan?
Normaal zou je met foutafhandeling al een 'Table 'database.tabelnaam' doesn't exist' moeten krijgen dan.

En als je wilt controleren of de tabellen bestaan, moet je inderdaad Willem vp's methode proberen.
 
Michel Bak

Michel Bak

24/06/2017 15:04:41
Quote Anchor link
Ik wil een volledig formulier zodat wanneer iemand anders het nodig heeft, er aan wordt herinnerd om de tables aan te maken. (gebruik op meerdere servers)

Verder snap ik het gedeelte niet van show tables, ik wil de tables niet zien. Ik wil alleen controleren of ze aangemaakt zijn, zijn ze niet aangemaakt moet er een melding komen dat de tables niet zijn aangemaakt, zijn ze wel aangemaakt moet het formulier verschijnen.
 
Ozzie PHP

Ozzie PHP

24/06/2017 15:40:11
Quote Anchor link
Als het goed is zal je foutmelding laten zien dat een tabel niet bestaat op het moment dat de query mislukt.
 
Pipo Clown

Pipo Clown

24/06/2017 19:05:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
 
Willem vp

Willem vp

24/06/2017 21:09:03
Quote Anchor link
Michel Bak op 24/06/2017 15:04:41:
Verder snap ik het gedeelte niet van show tables, ik wil de tables niet zien. Ik wil alleen controleren of ze aangemaakt zijn

Het is maar goed dat we hier niet in het leger zitten, want daar weten ze wel raad met eigenwijze personen... :-/

Wat is de gemakkelijkste manier om te testen of een tabel bestaat? Juist, je vraagt een overzicht van tabellen op en kijkt vervolgens of de gewenste tabel ertussen staat. Vind ik een stuk netter dan een willekeurige query af te vuren op de database en vervolgens óf te kijken of er een foutmelding terugkomt, óf niets te toen met de teruggekomen data.
 
Ozzie PHP

Ozzie PHP

24/06/2017 23:25:20
Quote Anchor link
>> Vind ik een stuk netter dan een willekeurige query af te vuren op ...

Hangt van de situatie af. Als de normale situatie is dat de tabel zou moeten bestaan, dan is het zonde van je resources (en hoogst ongebruikelijk) om voorafgaand aan ieder request te gaan controleren of de tabel wel bestaat. Het controleren of een tabel bestaat zou mijns inziens enkel een onderdeel kunnen zijn van een of andere initialisatieprocedure.
Gewijzigd op 24/06/2017 23:26:22 door Ozzie PHP
 
Willem vp

Willem vp

25/06/2017 12:22:05
Quote Anchor link
> Hangt van de situatie af.

De situatie die ik hier beschreef (en waar het in de OP om gaat, getuige de 'select 1 from table') is dat je een bogus-select doet, alleen maar om te controleren of de tabel bestaat. Bestaat de tabel, dan doe je vervolgens niets met de geselecteerde data. Dat vind ik databasemisbruik.
 
Thomas van den Heuvel

Thomas van den Heuvel

25/06/2017 14:50:23
Quote Anchor link
TL;DR bij het uitvoeren van queries zou je moeten kijken of deze goed zijn verlopen en anders zou je foutmeldingen moeten produceren. Alle fouten zitten hier dan in principe al in inbegrepen zodat je geen onnodig programmeerwerk hoeft te verrichten voor het controleren van (alle) specifieke dingen die mis (zouden) kunnen gaan.

Michel Bak op 24/06/2017 15:04:41:
Ik wil een volledig formulier zodat wanneer iemand anders het nodig heeft, er aan wordt herinnerd om de tables aan te maken. (gebruik op meerdere servers)


Dit lijkt mij de verkeerde insteek. Zo zou je alles wel in twijfel kunnen trekken (en overal -herhaaldelijk- op kunnen controleren) tijdens de uitvoer van een script. Zorg er gewoon voor dat op het moment dat deze formulierfunctionaliteit beschikbaar is, de tabellen ook daadwerkelijk bestaan zodat je hier aannames over kunt doen. Plan voor een situatie waarin iets werkt, niet voor alle situaties waarin iets mogelijk niet werkt.

Je zou hier dus geen specifieke controles moeten doen maar dingen gewoon zijn beloop laten gaan (loopt een query mis, laat deze lekker mislopen). Wanneer de tabel niet zou bestaan zou de query ook een fout moeten produceren. Als je zorgt dat je ergens foutafhandeling hebt of op zijn minst dingen logt dan zou vrij snel opgemerkt moeten worden dat er iets mis is. Wat de precieze verschijningsvorm van een fout is is niet echt relevant want het is aan een programmeur om aan de hand van logs of errormails of wat dan ook uit te zoeken wat er aan de hand is en eventueel om vast te stellen wie er steken heeft laten vallen. Het niet aanmaken van een tabel lijkt mij tot op zekere hoogte het niet volgen van een zeker protocol...

Ik zou inzetten op een werkende situatie in plaats van allerlei zeer specifieke controles van scenario's doen waarin de applicatie (mogelijk) niet werkt. Een bijkomend probleem van die aanpak is dat, omdat die scenario's zo specifiek zijn, je deze eigenlijk allemaal zou moeten definiëren om je ervan te vergewissen dat de applicatie (misschien) werkt. Het is dan ook heel makkelijk om een situatie die je niet hebt voorzien over het hoofd te zien.

Het is vele malen simpeler om stelregels te hebben waaraan iets moet voldoen in tegenstelling tot het definiëren van ALLE stelregels die niet van toepassing mogen zijn (vergelijk: whitelist vs blacklist).

En als een applicatie staakt wanneer een query niet werkt (bijvoorbeeld omdat een tabel niet bestaat) dan hoef je hier ook geen speciale kunstgrepen voor te programmeren. Laat de applicatie gewoon onderuit gaan (zij het enigszins stijlvol naar bezoekers toe) als er iets misgaat.
Gewijzigd op 25/06/2017 14:57:58 door Thomas van den Heuvel
 
Ozzie PHP

Ozzie PHP

25/06/2017 15:51:42
Quote Anchor link
Volledig eens met Thomas.

Om het iets korter/simpeler te verwoorden. Wat jij (Michel) doet of lijkt te doen, is voorafgaand aan iedere autorit snel even de motorklep open te doen en handmatig te gaan peilen of er nog wel genoeg olie in de motor zit, terwijl als dat niet het geval zou zijn er vanzelf een waarschuwingslampje gaat branden.

Daarmee wil ik niet zeggen dat je nooit je oliepeil moet (laten) controleren, maar dat doe je niet bij iedere autorit. Net zomin als dat je bij iedere query gaat controleren of de tabel wel bestaat. En net zomin als dat je van ieder bestand waarvan je weet dat het zou moeten bestaan, je eerst gaat controleren of het wel echt bestaat.
 
Ivo P

Ivo P

25/06/2017 17:14:41
Quote Anchor link
want bij de check of de table wel bestaat, heb je nog niet gecontroleerd of alle kolommen wel aanwezig zijn.
en of die van het juiste type zijn.

Deze controle hoort thuis in een installatie procedure.
Of controleer jij bij elke include ook of de betreffende file wel aanwezig is?

Ergens houdt de controle op en ga je er vanuit dat de scripts+database aanwezig zijn.

Userdata wel controleren uiteraard (is de geuploade file aanwezig etc)
 
Michel Bak

Michel Bak

26/06/2017 11:20:12
Quote Anchor link
Bedankt voor al deze informatie,

Willem ik wil niet eigenwijs overkomen maar probeer het geheel gewoon te snappen, bedankt voor de informatie.

Allemaal bedankt voor de informatie erg fijn dat er zo gereageerd wordt. Ik ben nog maar net begonnen.

Echter zie ik dat ik het niet helemaal goed heb uitgelegd (excuses hiervoor) Het is nl een opdracht die ik moet maken en later als basis wil gebruiken voor meerdere formulieren op verschillende servers. In de opdracht wordt gevraagd dat wanneer de tabellen niet bestaan het formulier niet moet werken, wat is volgens jullie dan de beste oplossing? Moet ik het if else helemaal vergeten en een totaal andere aanpak gebruiken?

Nogmaals bedankt voor alle info!

Michel
 
Pipo Clown

Pipo Clown

26/06/2017 12:06:23
Quote Anchor link
Wanneer je dit op verschillende, willekeurige, servers wilt laten draaien, hoe kom je dan op dat moment aan de databasenaam, gebruikersnaam en het paswoord voor MySQL op die betreffende server ?

Zonder begin je namelijk echt niets.

En is dat dan de enige tabel ? Of zijn er ook nog ergens tabellen waar afhankelijkheden in staan ? Een database met slechts één tabel kom je namelijk niet zo erg vaak tegen.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/06/2017 12:40:06
Quote Anchor link
@Michel op het moment dat je het formulier beschikbaar stelt / implementeert moet je er voor zorgen dat de tabel aangemaakt is/wordt, dit is onderdeel van de installatie / initialisatie van de formulier-functionaliteit.

Een metafoor. Je bent van plan om een autorit te gaan maken. Om je er verzekerd van te zijn dat je onderweg niet stil komt te staan zorg je ervoor dat je een volle tank hebt voordat je op stap gaat. Dan hoef je onderweg ook niet continu op de brandstofmeter te kijken omdat je dit vantevoren al geregeld hebt.

Hetzelfde geldt voor je formulier: vast onderdeel van de installatie is het aanmaken van de tabellen. Vervolgens zou je er van uit moeten kunnen gaan dat zodra deze functionaliteit actief is, de tabellen ook beschikbaar zijn. Er is dan geen reden om hier nogmaals expliciet in code op te controleren.

En wat natuurlijk altijd een goed idee is is het testen of de functionaliteit werkt. Dus nadat je tabellen+formulier+whatever ergens hebt geïnstalleerd doorloop je deze eenmalig en controleer je of alles het doet.
 



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.