code om fouten die php weergeeft te verbergen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
beste mensen,

ik heb eens een code gehad dat de fouten die php weergeeft als er iets fout is, die dan als je die code invoert niet weergeven worden, weet iemand die code misschien?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:52
Waarom wil je dat doen?
Fouten zijn er om op te lossen, niet om te verbergen.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 11:43

HenkS

Da_king alias HenkS

inderdaad,

helemaal met whoami eens

en anders eens hier kijken denk ik:

http://www.php.net/manual/en/function.set-error-handler.php

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
whoami schreef op 11 May 2003 @ 19:15:
Waarom wil je dat doen?
Fouten zijn er om op te lossen, niet om te verbergen.
Weet ik, maar dit is een onzin fout, en verder werkt alles toch goed, kijk dit is het script dat ik heb om nieuwe berichtjes te posten, die later in een ander bestand worden opgevraagd:

code:
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
<?php

include_once("ipadresverbangegevens.php");
if(mysql_result(mysql_query("SELECT * FROM berichten WHERE IPadres = '$REMOTE_ADDR' AND Verbannen = '1'"),0)) {

?>
<!-- Laat de code hierboven staan. -->


Plaats hier de melding die moet komen als bezoekers verbannen zijn.


<!-- Laat de code hieronder staan. -->
<?php exit; } ?>
<?
// nieuw.php

require("configber.php");

if(!$new){
?>

<form method="POST" action="?new=1">
  Naam:<br>
  <input type="text" name="naam" size="30"><br>
  Email:<br>
  <input type="text" name="email" size="30"><br>
  Bericht:<br>
  <textarea rows="6" name="bericht" cols="27"></textarea><br>
  <input type="submit" value="Submit"><input type="reset" value="Reset">
</form>

<?
}
if($new){
if($naam AND $email AND $bericht){

$query = mysql_query("SELECT * FROM berichten");
$id = mysql_num_rows($query) + 1;

$query = mysql_query("INSERT INTO berichten (naam,email,bericht,ip,id) VALUES ('$naam','$email','$bericht','$REMOTE_ADDR','$id')");
echo "Bericht succesvol toegevoegd";
}
else{
echo "Alle velden zijn verplicht om in te vullen.";
}
}
?>


Nou heb ik het 1ste gedeelte, het gedeelte om Ip's te bannen van het Nieuwe berichten plaatsen er zelf ingevoegd, maar nu geeft ie steeds deze error:


Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 4 in /home/patrick1/public_html/nieuw.php on line 4

maar met of zonder die fout, alles werkt toch goed :)
Vandaar dat ik dat script zocht, maar misschien dat een van jullie de fout zo ziet?

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

da's écht heel erg ranzig weet je dat?

maar je kan het zo doen:

PHP:
1
error_level('E_NONE');


edit:

dat betekent niet dat je eigenlijk niet eerst een mysql_num_rows aan moet roepen om te checken hoeveel rows er teruggestuurd worden, maarja.

[ Voor 47% gewijzigd door SchizoDuckie op 11-05-2003 19:22 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja als iemand weet hoe ik de error op kan lossen hoor ik het natuurlijk liever

Acties:
  • 0 Henk 'm!

  • jurri@n
  • Registratie: Maart 2000
  • Laatst online: 12:06
Wat ook werkt: voor de het commando waarvan je de error wilt verbergen een @ zetten. Om b.v. een MySQL-connectie te maken gebruit ik altijd:
PHP:
1
@mysql_connect("hostname","username","password") or die("Database connection failed");

Dan krijg je alleen de zelf gemaakte fotumelding als het mis gaat en wordt de PHP-error onderdrukt.

Overigens al eens gehoord van een auto_increment voor je ID? dan hoef je niet op deze ranzige wijze een ID te berekeken vooraf. Je laat het ID-veld leeg en MySQL bepaald zelf het eerstvolgende ID. Dit voorkomt problemen als je een record verwijderd. Op jouw manier worden dan alle records geteld, 1 bij opgeteld, maar dan is het gelijk aan het laatst ingevoegde ID in je database.

Die error kun je overigens oplossen door het te veranderen in het volgende:
PHP:
1
if(mysql_numrows(mysql_query("SELECT * FROM berichten WHERE IPadres = '$REMOTE_ADDR' AND Verbannen = '1'"))<>0) {

[ Voor 56% gewijzigd door jurri@n op 11-05-2003 19:41 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt, de foutmelding is weg en alles werkt weer perfect _/-\o_

Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Ik hoop dat je hier nog wat checks op de ingevoerde informatie loslaat. Probeer even uit te vinden wat er gebeurd als ik in de var $berichten het volgende zet: :+
PHP:
1
$bericht = "bla';'123.123.123.123';'99999'); DROP TABLE berichten";


Wat hints kun je op google en de bekende documentatiepagina's vinden, een mogelijk keyword SQL injection.
Lees ook even dit hier:
http://www.php.net/manual...n.mysql-escape-string.php

Je moet dus goed kijken wat je een je database voert voordat je de parameters uit de request zo maar gebruikt, denk bij elke variabele die je gebruikt over de volgende dingen goed na:

- moet ik deze wel via de request verkrijgen?
- Welke waardes mag deze variabele hebben, welke waardes zijn zinvol?
- In hoeverre kun je voorspellen wat de input moet zijn?

Als je de request variabele ook in je scriptje kunt genereren, doe dat dan.
Bouw checks in je code die alleen de zinvolle opties voor de variabele toelaten.
De derde vraag doelt er een beetje op dat je niet direct de variabele uit de request gebruikt, maar er een soort wrapper voor gebruikt, bijvoorbeeld op zo'n manier:

PHP:
1
2
3
4
5
6
7
$id = $_GET['id'];

$a[1] = 'alpha';
$a[2] = 'beta';
$a[3] = 'gamma';

doeiets($a[$id]);


Op deze manier weet je zeker dat er alleen alpha, beta of gamma aan doeiets() gevoerd wordt, en geen waardes die je code breken of exploiten.

Het is trouwens ook aan te raden je code zo te schrijven dat die ook met register_globals off werkt, dat betekent wel wat meer code, maar het is waarschijnlijk veiliger en voorkomt dat je code op server met defaultinstellingen en nieuwere php versies ook werkt.

Everyone complains of his memory, no one of his judgement.

Pagina: 1