Praat mee over van alles en nog wat!
Forumregels
Dit forum is voor alle zinnige gesprekken buiten phpBB om. Discussies en gesprekken over interessante onderwerpen.
Een nieuw onderwerp moet..:
- uiteraard voldoen aan de algemene voorwaarden
- niet passen in de gewone supportfora
- interessante zijn voor het overgrote deel van onze gebruikers
- een neutrale of positieve ondertoon hebben
- anders zijn dan bestaande onderwerpen
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 11 feb 2007, 17:28
Hallo,
Ik ben bezig met een redirect script.
Dit script:
Code: Selecteer alles
<?php
error_reporting(E_ALL);
// Configuratie:
$dbserver = "localhost"; // De database server, standaard localhost
$dbgebr = "root"; // Database gebruikersnaam
$dbgebrww = ""; // Bijbehorende wachtwoord
$dbnaam = "test";
// EIND configuratie
$verbinding = mysql_connect($dbserver, $dbgebr, $dbgebrww)
or die("Sorry, het verbinden met de database is mislukt: " . mysql_error());
mysql_select_db($dbnaam, $verbinding)
or die("Sorry, we konden de database niet selecteren: " . mysql_error());
if(!isset($_GET['l'])) {
$melding = "U heeft geen URL opgegeven";
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\n" . $melding . "\n</body>\n</html>";
exit;
}
elseif(isset($_GET['l'])) {
$l = $_GET['l'];
$sql = 'SELECT `url` FROM `redirect` WHERE `id` = ' . $l;
if(is_numeric($l)) {
$resultaat = mysql_query($sql);
}
else {
echo "Niet gaan hacken hé!";
exit;
}
if(array_key_exists($l, $resultaat)) {
header("Location: $resultaat");
}
else {
$melding = "De opgegeven URL bestaat niet";
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\n" . $melding . "\n</body>\n</html>";
exit;
}
}
mysql_free_result($resultaat);
mysql_close($verbinding);
?>
Heeft het volgende resultaat:
De opgegeven URL bestaat niet
Terwijl id 1 is gekoppeld aan
http://www.probleemoppc.com, en dus wel bestaat.
Oja, ik gebruik l=1
Weet iemand wat ik fout doe?
(Trouwens, dit script heeft toch een kleinere kans op een SQL injectie? Door is_numeric...)
-
MindPrison
- Berichten: 430
- Lid geworden op: 10 okt 2005, 20:47
- Locatie: Waasmunster (België)
-
Contacteer:
Bericht
door MindPrison » 11 feb 2007, 17:50
Een beetje verandert:
Code: Selecteer alles
<?php
error_reporting(E_ALL);
// Configuratie:
$dbserver = "localhost"; // De database server, standaard localhost
$dbgebr = "root"; // Database gebruikersnaam
$dbgebrww = ""; // Bijbehorende wachtwoord
$dbnaam = "test";
// EIND configuratie
if(!isset($_GET['l']))
{
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\nU heeft geen URL opgegeven\n</body>\n</html>";
exit;
}
else
{
mysql_connect($dbserver, $dbgebr, $dbgebrww) or die("Sorry, het verbinden met de database is mislukt: " . mysql_error());
mysql_select_db($dbnaam) or die("Sorry, we konden de database niet selecteren: " . mysql_error());
if(ctype_digit($_GET["l"]))
{
if(!$res = mysql_query("SELECT `url` FROM `redirect` WHERE `id` = '" . $_GET["l"] . "' LIMIT 1") || mysql_num_rows($res) != 1)
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\nDe opgegeven URL bestaat niet\n</body>\n</html>";
else
{
$row = mysql_fetch_array($res);
header("Location: " . $row[url]);
}
}
else
echo "Niet gaan hacken hé!";
mysql_close();
}
exit();
?>
Greetz,
MindPrison
-
Paul
- Beheerder

- Berichten: 20316
- Lid geworden op: 23 okt 2003, 11:38
- Locatie: Utrecht
-
Contacteer:
Bericht
door Paul » 11 feb 2007, 18:16
en nu nog wat netter
Code: Selecteer alles
<?php
error_reporting(E_ALL);
// Configuratie:
$dbserver = "localhost"; // De database server, standaard localhost
$dbgebr = "root"; // Database gebruikersnaam
$dbgebrww = ""; // Bijbehorende wachtwoord
$dbnaam = "test";
// EIND configuratie
if(!isset($_GET['l']))
{
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\nU heeft geen URL opgegeven\n</body>\n</html>";
exit;
}
mysql_connect($dbserver, $dbgebr, $dbgebrww) or die("Sorry, het verbinden met de database is mislukt: " . mysql_error());
mysql_select_db($dbnaam) or die("Sorry, we konden de database niet selecteren: " . mysql_error());
$res = @mysql_query("SELECT url FROM redirect WHERE id = " . (int)$_GET["l"]);
if(!$res || mysql_num_rows($res) != 1)
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\nDe opgegeven URL bestaat niet\n</body>\n</html>";
else
{
$row = mysql_fetch_array($res);
header("Location: " . $row[url]);
die;
}
}
}
?>
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 12 feb 2007, 08:22
Moet je de resultaatset niet vrijgeven en de verbinding sluiten?
Zo stond het in mijn PHP boek...
-
Bas
- Berichten: 2741
- Lid geworden op: 02 dec 2003, 17:38
- Locatie: Omgeving Goslar (Duitsland)
-
Contacteer:
Bericht
door Bas » 12 feb 2007, 09:25
Je hebt maar 1 result, en een erg klein script, en beide worden gesloten als het script is afgelopen.

-
Coen
- Berichten: 5387
- Lid geworden op: 03 aug 2004, 10:25
Bericht
door Coen » 12 feb 2007, 09:28
Salomon schreef:Moet je de resultaatset niet vrijgeven en de verbinding sluiten?
Zo stond het in mijn PHP boek...
Dat is inderdaad een nettere manier, maar bij een dergelijk script is het niet van belang!

Dingen vrijgeven en verbindingen sluiten, is van belang bij grote scripts, om het wat sneller te houden!

-
Paul
- Beheerder

- Berichten: 20316
- Lid geworden op: 23 okt 2003, 11:38
- Locatie: Utrecht
-
Contacteer:
Bericht
door Paul » 12 feb 2007, 09:31
Prophecy schreef:Salomon schreef:Moet je de resultaatset niet vrijgeven en de verbinding sluiten?
Zo stond het in mijn PHP boek...
Dat is inderdaad een nettere manier, maar bij een dergelijk script is het niet van belang!

Dingen vrijgeven en verbindingen sluiten, is van belang bij grote scripts, om het wat sneller te houden!

Niet sneller, hooguit minder memory gebruik. En zowiezo enkel bij bepaalde querys. Bij een query net voor die; hoef je de result echt niet te vrijgeven, dat doet de gc wel.
-
Coen
- Berichten: 5387
- Lid geworden op: 03 aug 2004, 10:25
Bericht
door Coen » 12 feb 2007, 09:34
Minder memory gebruik, staat toch zo goed als gelijk aan snelheid?
Als een computer minder memory hoeft op te slaan, is hij toch sneller?

-
Paul
- Beheerder

- Berichten: 20316
- Lid geworden op: 23 okt 2003, 11:38
- Locatie: Utrecht
-
Contacteer:
Bericht
door Paul » 12 feb 2007, 09:35
Niet persee, memory vrijgeven kan ook tijd kosten, en het wordt al automatische opgruimd aan einde van het script, dus hoef je het niet persee zelf te doen.
[size=0]Oke, verkeerde mentaliteit[/size]

-
Coen
- Berichten: 5387
- Lid geworden op: 03 aug 2004, 10:25
Bericht
door Coen » 12 feb 2007, 09:39
Dat is ook weer waar!

Het maakt ook niet direct uit wanneer het leeg gemaakt word, het zal toch moeten. Of het nou in stukjes gedaan word of aan het einde van het script!
Klein beetje offtopic discussie trouwens... Heeft er wel mee te maken, maar is niet van belang voor dit scriptje! 
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 12 feb 2007, 16:41
Alleen, het script werkt niet...
Trouwens, wat is er mis met deze db_update.php?
Code: Selecteer alles
<?php
error_reporting(E_ALL);
// Configuratie:
$dbserver = "localhost"; // De database server, standaard localhost
$dbgebr = "root"; // Database gebruikersnaam
$dbgebrww = ""; // Bijbehorende wachtwoord
$dbnaam = "test"; // Database naam
// EIND configuratie
$verbinding = mysql_connect($dbserver, $dbgebr, $dbgebrww)
or die("Sorry, het verbinden met de database is mislukt: " . mysql_error());
mysql_select_db($dbnaam, $verbinding)
or die("Sorry, we konden de database niet selecteren: " . mysql_error());
$sql = "CREATE TABLE `redirect` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`url` VARCHAR( 60 ) NOT NULL
) ENGINE = MYISAM ;";
$sql = "INSERT INTO `redirect` ( `id` , `url` )
VALUES (
'1', 'http://www.probleemoppc.com'
);";
$gelukt = mysql_query($sql) or die("Helaas, er is iets misgegaan: <br />\n" . mysql_error());
if ($gelukt) {
echo "Gefeliciteerd! Dit systeem is succesvol geïnstalleerd!";
}
mysql_close($verbinding);
?>
Hij geeft een error, maar ik heb deze query gekopiëerd uit phpmyadmin, en daar lukte het prima.
De error schreef:Helaas, er is iets misgegaan:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `redirect` (`id`, `url`) VALUES ('', '
http://www.probleemoppc.com')' at line 1
-
Bee
- Berichten: 13403
- Lid geworden op: 29 aug 2004, 10:30
Bericht
door Bee » 12 feb 2007, 16:55
Je overschrijft de query om de tabel aan te maken meteen door een query die iets in de tabel moet invoeren. Zo wordt de query om de tabel te maken dus nooit uitgevoerd, en levert de andere query een fout op, want die moet iets doen met een niet bestaande tabel.
... Maar ik modereer (nog) niet.
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 12 feb 2007, 16:56
Oeps, een punt vergeten...
EDIT: Dit:
Code: Selecteer alles
$sql = "CREATE TABLE `redirect` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`url` VARCHAR( 60 ) NOT NULL
) ENGINE = MYISAM \r\n";
$sql .= "INSERT INTO `redirect` ( `id` , `url` )
VALUES (
'1', 'http://www.probleemoppc.com'
);";
Geeft de fout:
Helaas, er is iets misgegaan:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `redirect` ( `id` , `url` ) VALUES ( '1', '
http://www.probleemopp' at line 5
:S
-
Bee
- Berichten: 13403
- Lid geworden op: 29 aug 2004, 10:30
Bericht
door Bee » 12 feb 2007, 16:59
Lees nu eens echt wat ik schreef?
... Maar ik modereer (nog) niet.
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 12 feb 2007, 17:16
Gedaan...
Maar dit is toch goed?
Eerst wordt de tabel aangemaakt, en daarna wordt er iets ingevoegd...
-
Bee
- Berichten: 13403
- Lid geworden op: 29 aug 2004, 10:30
Bericht
door Bee » 12 feb 2007, 17:25
Je hebt mijn bericht nog steeds niet goed gelezen
Maar ik zal het wel even uitleggen:
Je hebt een query geplaatst in $sql, die de tabel moet maken. Op de volgende regel vervang je de inhoud van die variabele al met een query waarmee je informatie in een tabel invoert.
Echter, de eerste query is dan nog niet uitgevoerd, en zal ook nooit uitgevoerd worden, want de query is weer uit het geheugen gewist.
Daarom bestaat de tabel niet waarin je gegevens in wil toevoegen.
... Maar ik modereer (nog) niet.
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 12 feb 2007, 18:55
Ah, bedankt, aangepast en nu werkt het wel.
Maarre... Nog even over dat script:
Dit:
Geeft de volgende melding:
Notice: Use of undefined constant url - assumed 'url' in D:\Program Files\Xampp\xampp\htdocs\zend\redirect.php on line 23
Code: Selecteer alles
<?php
error_reporting(E_ALL);
// Configuratie:
$dbserver = "localhost"; // De database server, standaard localhost
$dbgebr = "root"; // Database gebruikersnaam
$dbgebrww = ""; // Bijbehorende wachtwoord
$dbnaam = "test";
// EIND configuratie
if(!isset($_GET['l']))
{
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\nU heeft geen URL opgegeven\n</body>\n</html>";
exit;
}
mysql_connect($dbserver, $dbgebr, $dbgebrww) or die("Sorry, het verbinden met de database is mislukt: " . mysql_error());
mysql_select_db($dbnaam) or die("Sorry, we konden de database niet selecteren: " . mysql_error());
$res = @mysql_query("SELECT url FROM redirect WHERE id = " . (int)$_GET["l"]);
if(!$res || mysql_num_rows($res) != 1)
echo "<html>\n<head>\n<title>Redirecting failed</title>\n</head>\n<body>\nDe opgegeven URL bestaat niet\n</body>\n</html>";
else
{
$row = mysql_fetch_array($res);
header("Location: " . $res[url]);
die;
}
?>
Warning: Cannot modify header information - headers already sent by (output started at D:\Program Files\Xampp\xampp\htdocs\zend\redirect.php:23) in D:\Program Files\Xampp\xampp\htdocs\zend\redirect.php on line 23
Die notice snap ik niet, en die warning: de output is started in lijn 23 en de fout is in lijn 23?
-
Paul
- Beheerder

- Berichten: 20316
- Lid geworden op: 23 okt 2003, 11:38
- Locatie: Utrecht
-
Contacteer:
Bericht
door Paul » 12 feb 2007, 19:03
Het klopt toch wat hij geeft? Jij hebt gewoon een foute array aanduiding gebruikt.
-
Salomon
- Berichten: 3878
- Lid geworden op: 14 feb 2006, 16:15
Bericht
door Salomon » 12 feb 2007, 19:32
Wat zou het dan moeten zijn?