Redirect script [PHP]

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
Plaats reactie
Salomon
Berichten: 3878
Lid geworden op: 14 feb 2006, 16:15

Redirect script [PHP]

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&eacute;!";
		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...)

Gebruikersavatar
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&eacute;!";

  mysql_close();
}

exit();
?>
Greetz,

MindPrison

Gebruikersavatar
Paul
Beheerder
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...

Gebruikersavatar
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! ;)

Gebruikersavatar
Paul
Beheerder
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? :P

Gebruikersavatar
Paul
Beheerder
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] :oops:

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, 13:41

Bedankt hiervoor!

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

Gebruikersavatar
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

Gebruikersavatar
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...

Gebruikersavatar
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 :roll:

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?

Gebruikersavatar
Paul
Beheerder
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?

Plaats reactie