Problemen met verwerken van de fouten in de database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Rubensky PHP starter

Rubensky PHP starter

28/12/2016 19:50:29
Quote Anchor link
Mensen,

Ik gebruik een script om fouten met de database connectie te kunnen bekijken.

Ik heb alleen een fout waar ik niet uit kom. Wie kan er even kijken:

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
function safe_query($db, $query){
  global $ERRORS;
  return false;
}

  if (DEBUG_MODE) {
  if (!$result = @mysqli_query($db, $query)) {
    die("{$ERRORS['QUERY_ERROR_ADMIN']})
    <br> uitgevoerde query: $query .
    <br> MySQL-foutnummer: ". mysqli_errno($db) .
    "<br>MySQL-melding: " . mysqli_error($db));
  }
  else {
    return $result;
  }
  }
  else{
  if (!$result = @mysqli_query($db, $query)){
    die ($ERRORS ['QUERY_ERROR_USER']);
  }
  else {
    return $result;
  }
  }


Melding op mijn scherm:

Warning: mysqli_errno() expects parameter 1 to be mysqli, string given in /public/sites/mijnsite/php/Gastenboek/functions.php on line 40

Warning: mysqli_error() expects parameter 1 to be mysqli, string given in /public/sites/mijnsite /php/Gastenboek/functions.php on line 41
Er is een fout opgetreden bij het werken met de database
)
uitgevoerde query: null .
MySQL-foutnummer:
MySQL-melding:
Gewijzigd op 28/12/2016 19:51:21 door Rubensky PHP starter
 
PHP hulp

PHP hulp

12/12/2024 16:11:39
 
- Ariën  -
Beheerder

- Ariën -

28/12/2016 20:31:40
Quote Anchor link
Waar komt $db vandaan? En haal ook de @-jes weg, want foutmeldingen wil je niet verbergen.
 
Ben van Velzen

Ben van Velzen

28/12/2016 21:29:25
Quote Anchor link
Is het de bedoeling dat deze code onderdeel is van de functie safe_query? Want die functie heb je al afgesloten tegen de tijd dat je met de code begint.
 
Rubensky PHP starter

Rubensky PHP starter

28/12/2016 21:31:03
Quote Anchor link
@tjes weggehaald.

Die $db staat in mijn config file bij het verbinden met de database.

Ziet er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$db = 'null';
 
Marthijn Buijs

Marthijn Buijs

28/12/2016 21:44:40
Quote Anchor link
Ten eerste je zou een MySQLi-connectie moeten geven met de functie mysqli_connect(). Wat jij nu hebt is een string met 'null' als inhoud.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

28/12/2016 21:51:24
Quote Anchor link
Rubensky PHP starter op 28/12/2016 21:31:03:
Die $db staat in mijn config file bij het verbinden met de database.

Ziet er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$db = 'null';


Ook dit lijkt niet goed te gaan. Waarschijnlijk bedoel je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$db
= null;
?>


en waar gebruik je mysqli_connect() dan?
Gewijzigd op 28/12/2016 21:52:14 door Frank Nietbelangrijk
 
Rubensky PHP starter

Rubensky PHP starter

28/12/2016 22:19:47
Quote Anchor link
in die $db zit het probleem niet denk ik. Het is namelijk het laatste stuk wat ik heb toegevoegd waar het probleem zit.
 
Bart V B

Bart V B

28/12/2016 22:29:42
Quote Anchor link
Want? Waarom denk je dat het niet in $db zit?
Zit daar de connectie in van je database?
Welk stuk heb je toegevoegd toen het nog wel werkte?
En waarom werkt het nu dan niet meer?
 
Rubensky PHP starter

Rubensky PHP starter

29/12/2016 09:59:41
Quote Anchor link
Ik heb alleen de code uit bericht 1 toegevoegd daarvoor werkte alles naar behoren.

O ja, dit deel heb ik bovenaan de file toegevoegd

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
define ('DEBUG_MODE', true);
$ERRORS ['QUERY_ERROR_USER'] = 'Onze excusus er is iets mis gegaan met de database neem eventueel contact op met de beheerder';
$ERRORS ['QUERY_ERROR_ADMIN'] = 'Er is een fout opgetreden bij het werken met de database<br>';

?>


Waarom het nu niet meer werkt dat vraag ik nu juist. Het idee is het beveiligen van de query's in de database. Zodat de gebruiker niet een of andere vreemde melding te zien krijgt. Maar ook dat de hacker dat niet ziet en daar dus niets mee kan.
Gewijzigd op 29/12/2016 10:00:02 door Rubensky PHP starter
 
- Ariën  -
Beheerder

- Ariën -

29/12/2016 10:01:32
Quote Anchor link
Waar is nu je database-connectie?
 
Rubensky PHP starter

Rubensky PHP starter

29/12/2016 10:50:55
Quote Anchor link
Die zit in het config bestand. Die include ik aan het begin van de file waar ik bovenstaande functie heb geschreven.

Die ziet er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
  $host = 'localhost';
  $gebruiker = 'root';
  $wachtwoord = 'gaikhiernietplaatsen';
  $database = 'gastenboek';
  $query = 'null';
  $db = 'null';


Ik wil hier wel de gehele code plaatsen maar dat is niet zo gewenst denk ik.
 
- Ariën  -
Beheerder

- Ariën -

29/12/2016 11:05:18
Quote Anchor link
Wat heeft een connectie met een config-file te maken?

Laat eens zien hoe hij eruit ziet?
 
Rubensky PHP starter

Rubensky PHP starter

29/12/2016 12:00:23
Quote Anchor link
Ik meld alleen dat de connectie in zo'n config file zit. Bovenstaande is de connectie met de database dat is ook het enige wat in die file zit.
 
- Ariën  -
Beheerder

- Ariën -

29/12/2016 12:15:04
Quote Anchor link
Dat zijn gedeclareerde variabelen,en is geen connectie.

Zie ook http://php.net/mysqli_connect
 
Rubensky PHP starter

Rubensky PHP starter

29/12/2016 15:47:18
Quote Anchor link
Ik heb dit daarvoor in mijn schrijfbestand staan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
  if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)) {
    echo '<h2>Het openen van de database is mislukt</h2>';
    echo 'De MySQL-foutmelding luidt: ' . mysqli_connect_error();
    exit;


Moet ik anders voor de duidelijkheid de files even uploaden?
 
- Ariën  -
Beheerder

- Ariën -

29/12/2016 15:58:00
Quote Anchor link
Maar daarna zet je $db op NULL, en wordt je connectie weer weggegooid. Dat hoort niet.
 
Rubensky PHP starter

Rubensky PHP starter

29/12/2016 16:24:35
Quote Anchor link
Maar kan je mij eens duidelijk uitleggen wat dat te maken heeft met de query controle? Het ging allemaal prima tot ik de code uit bericht #1 toevoegde.

Ik ben het aan het leren he dus ik wil graag begrijpen hoe en wat.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/12/2016 16:28:02
Quote Anchor link
Het schrijven van een wrapper (een collectie van hulpfuncties of -methoden) voor database-gerelateerde handelingen kan handig zijn, maar ik denk dat er hier teveel dingen worden gecombineerd.

Het gebruiken van die() kan resulteren in een half HTML-document wat andere webpagina-functionaliteit kan breken dus dit lijkt mij (in dit geval, het hangt natuurlijk af van wat je bouwt) geen goed idee. Dit is trouwens prima geschikt voor ontwikkeling maar waarschijnlijk niet zo'n fantastische keuze voor een productie-omgeving.

Overigens kun je het "moment van foutafhandeling" uitstellen (dit is vooral handig voor live-omgevingen). En de manier waarop de fout afgehandeld wordt hoeft geen onderdeel uit te maken van je wrapper functionaliteit. Dit doe je met exceptions. Een exception beschrijft een (semi-)onvoorziene situatie die optreedt. Hiermee geeft de wrapper in feite aan "kan iemand mij vertellen wat ik hiermee moet doen". Vervolgens moet een ander proces deze exception oppikken (anders resulteert dit alsnog in een fatal error) en verder afhandelen. Dit doe je met een try-catch blok.

Anyway, het lijkt mij handiger om een wrapper te schrijven in OOP-code (te meer omdat mysqli zelf ook object-georiënteerd is en) omdat dit (ook) beter past in het try-catch stramien.

Daarnaast is het gebruik van een @ niet per definitie taboe, zolang je maar iets met mogelijk opgetreden fouten doet.
Gewijzigd op 29/12/2016 16:31:52 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

29/12/2016 16:28:11
Quote Anchor link
Geen idee precies, maar ik denk dat er een variabele verkeerd stond.

@Thomas: Ik hoop dat een beginner als Rubensky je snapt. Je draaft een beetje door.
Gewijzigd op 29/12/2016 16:31:26 door - Ariën -
 
Rubensky PHP starter

Rubensky PHP starter

29/12/2016 16:35:06
Quote Anchor link
Tomas ik begrijp maar voor een heel klein deel wat je hier neer zet. En daarnaast heb ik geen idee hoe ik met de door jou geschreven zaken verder moet om de fout weg te krijgen.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/12/2016 16:36:47
Quote Anchor link
@Ariën het is te allen tijde zowel voor beginners als gevorderden belangrijk om verschillende taken en verantwoordelijkheden in code te scheiden om zo het overzicht te bewaren.

Maakt niet uit of dit beginnerscode of geavanceerd spul is: wanneer je teveel combineert resulteert dit in een onoverzichtelijke brei waarin weinig tot niets aangepast kan worden zonder dat de hele toren instort.

@Rubensky mysqli_error() en mysqli_errno() verwachten één parameter: het database-object. Deze is van de klasse mysqli. Je roept dit aan met iets wat niet van het type (de klasse) mysqli is.
Gewijzigd op 29/12/2016 16:40:42 door Thomas van den Heuvel
 

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.