Pagina 1 van 1
Redirect script [PHP]
Geplaatst: 11 feb 2007, 17:28
door Salomon
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...)
Geplaatst: 11 feb 2007, 17:50
door MindPrison
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();
?>
Geplaatst: 11 feb 2007, 18:16
door Paul
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;
}
}
}
?>
Geplaatst: 12 feb 2007, 08:22
door Salomon
Moet je de resultaatset niet vrijgeven en de verbinding sluiten?
Zo stond het in mijn PHP boek...
Geplaatst: 12 feb 2007, 09:25
door Bas
Je hebt maar 1 result, en een erg klein script, en beide worden gesloten als het script is afgelopen.

Geplaatst: 12 feb 2007, 09:28
door Coen
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!

Geplaatst: 12 feb 2007, 09:31
door Paul
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.
Geplaatst: 12 feb 2007, 09:34
door Coen
Minder memory gebruik, staat toch zo goed als gelijk aan snelheid?
Als een computer minder memory hoeft op te slaan, is hij toch sneller?

Geplaatst: 12 feb 2007, 09:35
door Paul
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]

Geplaatst: 12 feb 2007, 09:39
door Coen
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! 
Geplaatst: 12 feb 2007, 13:41
door Salomon
Bedankt hiervoor!
Geplaatst: 12 feb 2007, 16:41
door Salomon
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
Geplaatst: 12 feb 2007, 16:55
door Bee
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.
Geplaatst: 12 feb 2007, 16:56
door Salomon
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
Geplaatst: 12 feb 2007, 16:59
door Bee
Lees nu eens echt wat ik schreef?
Geplaatst: 12 feb 2007, 17:16
door Salomon
Gedaan...
Maar dit is toch goed?
Eerst wordt de tabel aangemaakt, en daarna wordt er iets ingevoegd...
Geplaatst: 12 feb 2007, 17:25
door Bee
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.
Geplaatst: 12 feb 2007, 18:55
door Salomon
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?
Geplaatst: 12 feb 2007, 19:03
door Paul
Het klopt toch wat hij geeft? Jij hebt gewoon een foute array aanduiding gebruikt.
Geplaatst: 12 feb 2007, 19:32
door Salomon
Wat zou het dan moeten zijn?