1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $uploaddir = "/var/www/puzzlingworld.nl/v2/upload/"; echo $uploadfile = $uploaddir . $_FILES['afbeelding']['name']; $do_insert = true; if(!empty($_POST['afbeelding'])){ if(move_uploaded_file($_FILES['afbeelding']['tmp_name'], $uploadfile)) { $do_insert = true; } else{ echo ""; $do_insert = false; } } ?> |
Haha, dat had ik niet eens gezien. Soms is 't zo simpelquote:Op zaterdag 30 juli 2005 16:36 schreef DionysuZ het volgende:
ik weet niet zo snel uit mijn hoofd, maar als je een file doorpasst, is $_POST['afbeelding'] dan niet gewoon leeg? En moet je dat veranderen in $_FILES['afbeelding'] ?
Met error reporting op 0 geeft hij nog geen errors of warnings. Als ik is_dir gebruik geef deze functie 1 terug, dus de directory is goed. var_dump(); geeft de volgende array terug:quote:Op zaterdag 30 juli 2005 16:34 schreef SuperRembo het volgende:
Zet eens error_reporting(0) bovenin je script, dan weer je zeker dat je alle errors/warnings te zien krijgt.
Met is_dir($dir) kan je controleren of een directory bestaat.
Met is_writable($fullfilename) kan je controleren of je naar een file mag schrijven.
Staat er misschien een error in $_FILES['afbeelding']['error']? Doe eens een var_dump($_FILES).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php array(1) { ["afbeelding"]=> array(5) { ["name"]=> string(7) "006.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpK3payU" ["error"]=> int(0) ["size"]=> int(62564) } } ?> |
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?php if($_SERVER[QUERY_STRING]) { $file = str_replace("../", "", $_SERVER[QUERY_STRING]); $filename = 'movie/'.htmlspecialchars(addslashes($file)); $file_extension = strtolower(substr(strrchr($file,"."),1)); if (! file_exists( $filename ) ) { $error = '<b style="color:#ff0000">File does not exist!</b>'; } else { switch( $file_extension ) { case "avi": $ctype="application/avi"; break; case "wmv": $ctype="application/wmv"; break; case "mpeg": $ctype="application/mpeg"; break; default: $ctype="application/force-download"; } header("Pragma: public"); // required header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); // required for certain browsers header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=".basename($filename).";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".@filesize($filename)); @readfile("$filename") or die("File not found."); } } ?> |
en als je het gedownloade bestand opent in notepad..quote:Op zondag 31 juli 2005 14:58 schreef Darkomen het volgende:
oke dat is idd raar, er komen geen warinings, je download het bestand steeds he.
Hij is gewoon niet te openen.
Die avi begint met een lading htmlquote:Op zondag 31 juli 2005 22:25 schreef Darkomen het volgende:
Deze bijvoorbeeld, en hij staat echt goed op de ftpserver.http://www.peugeot405club.nl/video.php?Peugeot405-1.avi
1 2 3 4 5 6 7 8 9 10 | <?php $url = "http://forum.fok.nl/user/profile/74523"; //dit snap ik dit is vanaf welke url $contents = file_get_contents($url); // hier vraagtie als het goed is alle content ? *alleen alle text?? *op $contents = substr($contents, strpos($contents, 'posts:')+6); $contents = substr($contents, 0, strpos($contents, 'per dag')+7); $contents = str_replace('(', 'posts, ', $contents); echo 'Ik heb '.strip_tags($contents); // hier echo't ie het ?> |
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 | <?php // Lees pagina $url = "http://forum.fok.nl/user/profile/74523"; $contents = file_get_contents($url); // $contents = '...Aantal posts:</span> </td><td class="msgbody2" width="65%">6224 (gemiddeld 10 per dag)</td>...' // Verwijder begin $contents = substr($contents, strpos($contents, 'posts:')+6); // $contents = '</span> </td><td class="msgbody2" width="65%">6224 (gemiddeld 10 per dag)</td>...' // Verwijder eind $contents = substr($contents, 0, strpos($contents, 'per dag')+7); // $contents = '</span> </td><td class="msgbody2" width="65%">6224 (gemiddeld 10 per dag' // Vervang '(' door 'posts, ' $contents = str_replace('(', 'posts, ', $contents); // $contents = '</span> </td><td class="msgbody2" width="65%">6224 posts gemiddeld 10 per dag' // Verwijder html tags $contents = strip_tags($contents); // $contents = ' 6224 posts gemiddeld 10 per dag' // Toon resultaat echo 'Ik heb '.$contents; // Ik heb 6224 posts gemiddeld 10 per dag' ?> |
1 2 3 4 5 6 7 8 9 10 | <?php $url = "http://forum.fok.nl/user/profile/74523"; $contents = file_get_contents($url); $contents = substr($contents, strpos($contents, 'Username:')+9); $contents = substr($contents, 0, strpos($contents, '</a>')+4); $contents = trim(strip_tags($contents)); echo 'Ik ben '.$contents; ?> |
hoe zou je het met regexp doen dan ?quote:Op dinsdag 2 augustus 2005 22:05 schreef SuperRembo het volgende:
Bij mij print dat scriptje netjes "Ik heb 6224 posts, gemiddeld 10 per dag"
[ code verwijderd ]
[ code verwijderd ]
Dit werkt, al zou ik 't zelf met een regexp doen.
1 2 3 4 5 6 7 8 9 10 11 | <?php $url = "http://forum.fok.nl/user/profile/3677"; $contents = file_get_contents($url); if (preg_match('#Username:.*?<a.*?>(.*?)</a>#i', $contents, $matches)) { $username = $matches[1]; echo "Ik ben $username."; } else { echo "Ik weet niet wie ik ben ;)"; } ?> |
heb jij dezelfde manier je avatar gemaakt?quote:Op dinsdag 2 augustus 2005 22:23 schreef SuperRembo het volgende:
Zoiets
[ code verwijderd ]
Dit haalt de tekst op in de eerste link na 'Username:'.
Roönaän heeft dacht ik dat scriptje met substr() gemaakt. Hij zal over mijn scriptje wel beginnen over performance enzo
Nope, die gebruikt een SOAP (XML) source.quote:Op dinsdag 2 augustus 2005 22:25 schreef BaggerUser het volgende:
[..]
heb jij dezelfde manier je avatar gemaakt?
Dat gaat om de regels met de sterretjes ******* er voor (kan zijn dat de regelnrs niet helemaal meer kloppen..)quote:Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/home/jeroen/www/upload.php on line 8
Warning: move_uploaded_file(users/upload/Abstract.JPG): failed to open stream: Permission denied in /usr/home/jeroen/www/upload.php on line 18
Warning: move_uploaded_file(): Unable to move '/var/tmp/phpwHvoH7' to 'users/upload/Abstract.JPG' in /usr/home/jeroen/www/upload.php on line 18
Er is een fout opgetreden tijdens het uploaden
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 49 | <?php if(!empty($_POST)){ include("pf.php"); $gebruiker = $_POST['gebruiker']; $wachtwoord = md5($_POST['wachtwoord']); $sql_query = "SELECT * FROM users WHERE naam='" . $_POST["gebruiker"] ."' AND wachtwoord= md5('" . $_POST["wachtwoord"] ."');"; $result = mysql_query($sql_query); *******if(mysql_num_rows($result) > 0) { $text = "Wachtwoord en/of gebruikersnaam onjuist. Probeer nogmaals."; die($text); } else{ $bestnaam = $_POST['bestnaam']; $uploaddir = "users/upload/"; $uploadfile = $uploaddir.basename($_FILES['foto']['name']); ******* if(move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile)) { { die ("De afbeelding is geupload. Deze vindt je terug op http://www.pestforum.nl/users/upload/".$bestnaam.""); } } else { die ("Er is een fout opgetreden tijdens het uploaden"); } } } ?> <LINK HREF="white.css" TYPE="text/css" REL="stylesheet"> <form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <table> <tr> <td><h1> Pestforum.nl jpeg uploader.</h1><p>Je kan enkel jpeg (.jpg) afbeeldingen uploaden.</p></td> </tr> <tr> <td><p>Selecteer je bestand:</p></td><td><input type="file" name="foto"></td> </tr> <tr> <td><p>Gebruikersnaam:</p></td><td><input type="text" name="gebruiker"></td> </tr> <tr> <td><p>wachtwoord:</p></td><td><input type="password" name="wachtwoord"><p></td> </tr> <tr> <td><input type="submit" value="Afbeelding uploaden"></td> </table> </form> |
waarom variablen defineren als jje ze niet gebruiktquote:$gebruiker = $_POST['gebruiker'];
$wachtwoord = md5($_POST['wachtwoord']);
$sql_query = "SELECT * FROM users WHERE naam='" . $_POST["gebruiker"] ."' AND wachtwoord= md5('" . $_POST["wachtwoord"] ."');";
1 | "SELECT * FROM users WHERE naam='" .$gebruiker."' AND wachtwoord='". $wachtwoord |
Maar hij doet et nietquote:Op woensdag 3 augustus 2005 16:39 schreef mschol het volgende:
[..]
waarom variablen defineren als jje ze niet gebruikt
voor de rest ziet het script er imo goed uit...
je query was in iedergeval niet goed zie boven..quote:
moet denk ik worden:quote:$bestnaam = $_POST['bestnaam'];
$uploaddir = "users/upload/";
$uploadfile = $uploaddir.basename($_FILES['foto']['name']);
******* if(move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile))
als je even op php.net kijkt zie je dant bij is_uploaded_file maar 1 parameter hoort...quote:Op woensdag 3 augustus 2005 17:01 schreef LeeHarveyOswald het volgende:
Dus
if(move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile))
Moet
if(is_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile))
Worden?
Het werkte nu nl nog nietal een stuk minder foutmeldingen, maar hij roept nu:
Warning: Wrong parameter count for is_uploaded_file() in /usr/home/jeroen/www/upload.php on line 16
Er is een fout opgetreden tijdens het uploaden
En lijn 16 is zeg maar de gekopieerde lijn..
Dus zoiets:quote:Op woensdag 3 augustus 2005 16:47 schreef mschol het volgende:
een move_uploaded_file() in een if.. dat kan denk ik niet
eerst moven pas daarna gaan checken of hij idd is geupload
1 2 3 | move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile) if(is_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile)) { |
als je e code zo hebt staan krijg je problemen zet een ; neerquote:Op woensdag 3 augustus 2005 17:05 schreef LeeHarveyOswald het volgende:
[..]
Dus zoiets:
[ code verwijderd ]
dit werkt trws ook niet... maar ik weet niet hoe ik kan controlleren of het bestand daadwerkelijk is gekopieerd?
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 | <?php if(!empty($_POST)){ include("pf.php"); $gebruiker = $_POST['gebruiker']; $wachtwoord = md5($_POST['wachtwoord']); $sql_query = "SELECT * FROM ibf_members WHERE name='".$gebruiker."' AND password='".$wachtwoord."'"; $result = mysql_query($sql_query); if(mysql_num_rows($result) < 0) { $text = "Wachtwoord en/of gebruikersnaam onjuist. Probeer nogmaals."; die($text); } else{ $uploaddir = "users/upload/"; $uploadfile = basename($_FILES['foto']['name']); move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile); if (is_uploaded_file(".$uploadfile.")) { die ("De afbeelding is geupload. Deze vindt je terug op http://www.pestforum.nl/users/upload/".$uploadfile.""); } else{ die ("Er is een fout opgetreden tijdens het uploaden"); } } } ?> |
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 | <?php php if(!empty($_POST)){ include("pf.php"); $gebruiker = $_POST['gebruiker']; $wachtwoord = md5($_POST['wachtwoord']); $sql_query = "SELECT * FROM ibf_members WHERE name='".$gebruiker."' AND password='".$wachtwoord."'"; $result = mysql_query($sql_query); if(mysql_num_rows($result) < 0) { $text = "Wachtwoord en/of gebruikersnaam onjuist. Probeer nogmaals."; } else{ $uploaddir = "users/upload/"; $uploadfile = basename($_FILES['foto']['name']); if (is_uploaded_file(".$_FILES['foto']['tmp_name'].")) { move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile); echo("De afbeelding is geupload. Deze vindt je terug op www.pestforum.nl/users/upload/".$uploadfile.""); } else{ echo ("Er is een fout opgetreden tijdens het uploaden"); } } } ?> |
Ja dat is zo. Dan moet je die rijen weer optellen. Een count van aantal moet volgens mij dan lukken.quote:Maar hier heb je dus het aantal voorkomen pér merk, het aantal geretourneerde rijen is dan het aantal unieke merken.
Jup, dat zou moeten lukkenquote:Op woensdag 3 augustus 2005 18:51 schreef TechXP het volgende:
Vanuit: [PHP/MySQL] Aantallen weergeven van een tabel
@autocue
[..]
Ja dat is zo. Dan moet je die rijen weer optellen. Een count van aantal moet volgens mij dan lukken.
1 | SELECT COUNT(DISTINCT merk) FROM autonaam |
1 2 3 4 5 6 7 8 9 | <?php $res = mysql_query("SELECT COUNT(merk) as aantal FROM tabel GROUP BY merk"); while ($obj = mysql_fetch_object($res)) { (" Aantal:$obj->aantal "); } mysql_free_result($res); ?> |
Hij moet inderdaad alles tellen, dus 5 zoals in jouw voorbeeldquote:Op woensdag 3 augustus 2005 19:21 schreef TechXP het volgende:
Ok, dus dan hoeft group by niet, omdat je van bijvoorleed:
merk x
merk x
merky
merky
merkz
dus niet wilt:
Aantal merken: 3 maar gewoon aantal in totaal: 5?
Dan kan group by gewoon weg. En dan moet je gewoon COUNT(*) doen.
Wat zegt de foutmelding?
Heb je PHPmyAdmin ofzo. Als je daar de query uitvoert, wat geeft die dan aan?quote:Op woensdag 3 augustus 2005 19:24 schreef The_Cyberspace het volgende:
En wat betreft de foutmelding: ik krijg gewoonweg niks te zien op m`n scherm.
Zo lijk je me niks te printen op het scherm. Tenzij dit een methode is die ik nog nooit gebruikt heb is?quote:("
Aantal:$obj->aantal
");
PHPmyAdmin geeft de query zonder problemen weer..quote:Op woensdag 3 augustus 2005 19:32 schreef TechXP het volgende:
[..]
Heb je PHPmyAdmin ofzo. Als je daar de query uitvoert, wat geeft die dan aan?
En heb je de query zo: select count(*) as aantal from tabel
?
Is er wel een database verbinding tot stand gekomen?
En doe eens zonder die while loop. Dus alleen $obj = mysql_fetch_object($res);
en wat is dit precies:
[..]
Zo lijk je me niks te printen op het scherm. Tenzij dit een methode is die ik nog nooit gebruikt heb is?
echo "Aantal:". $obj->aantal;
Misschien is dat gewoon het probleem
Probeer het op de andere manier eensquote:Op woensdag 3 augustus 2005 19:40 schreef The_Cyberspace het volgende:
En over dat laatste... Dit heb ik uit een andere code wat wel goed werkt. Ik heb geen idee of dit standaard zo word gebruikt. Ik vermoed nu van nie.. maar ik was van mening van wel maar ik kan het mis hebben natuurlijk
1 | echo "aantal: ".$obj->aantal; |
Ik heb inmiddels deze code:quote:Op woensdag 3 augustus 2005 20:00 schreef TechXP het volgende:
[..]
Probeer het op de andere manier eensDus met
[ code verwijderd ]
Die notatie kende ik niet. Maar php heeft wel meer manieren van iets op het scherm drukken dus... misschien was het iets wat ik nog niet wist
Maar ik gok dat het fout is
1 2 3 4 5 | <?php $res = mysql_query("SELECT COUNT(*) as aantal FROM autonamenboek"); echo "Aantal:".$obj->aantal; { } ?> |
1 2 3 4 5 | <?php $res = mysql_query("SELECT COUNT(*) as aantal FROM autonamenboek"); $obj = mysql_fetch_object($res); echo "Aantal:".$obj->aantal; ?> |
JA! het werktquote:Op woensdag 3 augustus 2005 21:07 schreef ikke_ook het volgende:
[ code verwijderd ]
Dit werkt al beter denk ik...
Nu doettie et weer niet :S ik krijg de volgende foutmelding:quote:Op woensdag 3 augustus 2005 17:54 schreef LeeHarveyOswald het volgende:
Overigens werkt nu ook de password controle niet meer? ik kan gewoon A B en C intikken, en dan krijg ik de melding dat afbeelding A is geupload
edit: Nadere inspectie: De bestanden zijn wél geupload. Ze staan alleen niet in de goede mapGister nacht trouwens ook al, maar toen met de goede map in de bestandsnaam (\users\upload\bestandsnaam.jpg als bestandsnaam)....
Hij spoort niet echt...
Deze code gebruik ik nu:quote:Warning: move_uploaded_file(/users/upload/Abstract.JPG): failed to open stream: No such file or directory in /usr/home/jeroen/www/upload.php on line 17
Warning: move_uploaded_file(): Unable to move '/var/tmp/phplcb0K5' to '/users/upload/Abstract.JPG' in /usr/home/jeroen/www/upload.php on line 17
De afbeelding is geupload. Deze vindt je terug op http://www.pestforum.nl/users/upload//users/upload/Abstract.JPG
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 | <?php php if(!empty($_POST)){ include("pf.php"); $gebruiker = $_POST['gebruiker']; $wachtwoord = md5($_POST['wachtwoord']); $sql_query = "SELECT * FROM ibf_members WHERE name='".$gebruiker."' AND password='".$wachtwoord."'"; $result = mysql_query($sql_query); if(mysql_num_rows($result) < 1) { $text = "Wachtwoord en/of gebruikersnaam onjuist. Probeer nogmaals."; die($text); } else{ $uploaddir = "/users/upload/"; $uploadfile = $uploaddir.basename($_FILES['foto']['name']); if (is_uploaded_file($_FILES['foto']['tmp_name'])) { move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile); die ("De afbeelding is geupload. Deze vindt je terug op http://www.pestforum.nl/users/upload/" color="#007700">.$uploadfile.""); } else{ die ("Er is een fout opgetreden tijdens het uploaden"); } } } ?> |
1 2 3 4 5 6 7 8 9 | <? $host = "hostip"; $Username = "username"; $Password = "WaChTwOoRd"; $Database = "databasenaam"; mysql_connect("$host","$Username","$Password") or die (mysql_error()); mysql_select_db("$Database") or die ("Database connection failed!"); ?> |
1 2 3 | <?php $text=preg_replace('#<table>(.*?)</table>#i','',$originele_text); ?> |
Dat kan niet in MySql. Je kan dus ook geen query maken die over meerdere databases gaan.quote:Op vrijdag 5 augustus 2005 11:18 schreef HaKeeM het volgende:
Ik weet dat je in je query kan werken met
databasenaam.tabelnaam om het onderscheid in je query's aan te geven
Als je query's op meerdere databases uit wil voeren dan moet je per database een verbinding maken. Bij mysql_connect moet je de parameter new_link = true opgeven. Bij elke query die je uitvoert moet je opgeven welke verbinding gebruikt moet worden.quote:maar hoe open je een connectie met twee databases tegelijk.
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 | // Config $db1 = array( 'server' => 'localhost', 'username' => 'sa', 'password' => '******', 'database' => 'test1' ); $db2 = array( 'server' => 'localhost', 'username' => 'sa', 'password' => '******', 'database' => 'test2' ); // Open connections $conn1 = mysql_connect($db1['server'], $db1['username'], $db1['password'], true); if (!$conn1) { die('Error: could not connect to server.'); } mysql_selectdb($db1['database']); $conn2 = mysql_connect($db2['server'], $db2['username'], $db2['password'], true); if (!$conn2) { die('Error: could not connect to server.'); } mysql_selectdb($db2['database']); // Execute queries $sql1 = 'SELECT * FROM table1'; $result1 = mysql_query($sql1, $conn1); if (!$result1) { die('Error: could not execute query.'); } $sql2 = 'SELECT * FROM table2'; $result2 = mysql_query($sql2, $conn2); if (!$result2) { die('Error: could not execute query.'); } |
Als <table> en </table> op dezelfde regel staan. Anders even de s modifier toevoegen. Dan matcht de punt elk teken, inclusief een newline.quote:Op vrijdag 5 augustus 2005 16:35 schreef Swetsenegger het volgende:
[ code verwijderd ]
Doet dit wat ik denk dat het doet, namelijk alles vanaf <table> tot </table> weghalen?
quote:Op vrijdag 5 augustus 2005 14:52 schreef Postman_Pat het volgende:
...
1 | SUM('AanwezigWinst') |
1 | SUM(`AanwezigWinst`) |
quote:Op vrijdag 5 augustus 2005 18:41 schreef SuperRembo het volgende:
[..]
Als <table> en </table> op dezelfde regel staan. Anders even de s modifier toevoegen. Dan matcht de punt elk teken, inclusief een newline.
1 2 3 | <?php $text=preg_replace('#<table>(.*?)</table>#is','',$originele_text); ?> |
1 2 3 4 | #<table>(.*?)</table>#is /<table>(.*?)<\/table>/is <\<table\>(.*?)\</table\>>is {<table>(.*?)</table>}is |
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 49 50 51 52 | class Database { var $host; var $user; var $pass; var $database; // constructor function Database() { // initialiseer hier bepaalde gegevens $this->host = 'localhost'; $this->user = 'mijnveelgebruikteusername'; $this->pass = 'mijnveelgebruiktepassword'; } // functie om de host te bepalen function Sethost($host) { $this->host = $host; } // functie om de user te bepalen function Setuser($user) { $this->user = $user; } // functie om de pass te bepalen function Setpass($pass) { $this->pass = $pass; } // functie om de database te bepalen function Setdatabase($database) { $this->database = $database; } // verbind met database function Connectdb() if($dbc=@mysql_connect($this->host,$this->user,$this->pass)){ if(!@mysql_select_db($this->database)){ die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } }else{ die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } |
1 2 3 4 5 | $db= new Database; $db->Setuser ('newuser'); $db->Setpass ('newpass'); $db->Setdatabase ('newdb'); $db->Connectdb (); |
1 2 3 4 5 6 7 | <?php function ConnectDB ($host,$user,$pass,$database){ //database connectie maken } ConnectDB('mijnhost','mijnuser','mijnpass','mijndatabase'); ?> |
ik ken dat probleemquote:Op zaterdag 6 augustus 2005 14:40 schreef Swetsenegger het volgende:
Het blijft me maar bezig houden...: OOP
Ik kom maar geen goede tutorial tegen welke me de fineses van OOP goed uitlegt. Tot op heden zie ik het meer als een uitgebreide functie, maar er zal best meer achter zitten.
Het kwartje wil dus maar niet vallen, en ik blijf op zoek naar goede heldere stap voor stap documentatie met duidelijke en nuttige voorbeelden. Dit mag bv ook een boek zijn (graag zelfs) welke OOP in PHP 4 en 5 helder beschrijft.
Iederen met tips voor nederlandstalig online tutorials of duidelijke boeken, ik hou me aanbevolen.
En nederlands omdat wanneer ik de techniek opzich niet begrijp, me ook nog niet druk wil maken of ik de vertaling wel juist interpreteer
Ja, zoiets heb ik ook. Een klasse ziet eruit als een verzameling functies. Dan kan ik net zo goed... een verzameling functies aanleggenquote:Op zondag 7 augustus 2005 17:06 schreef mschol het volgende:
[..]
ik ken dat probleem
maar OOP is , vind ik, eigenlijk een heel omslachtige manier om dingen te laten uitvoeren
volgens mij wilde ze gewoon iets hebben dat altijd een standaard opbouw had en hebben ze daarom OOP gekozen
Je kunt het ook iets anders doenquote:Op zondag 7 augustus 2005 16:47 schreef Swetsenegger het volgende:
Dan maar gewoon beginnen met OOP, al doende leert men
[ code verwijderd ]
Volgens mij is dit een werkende klasse, correct?
En die kan ik zou aanroepen?
[ code verwijderd ]
Indien correct (:P), wat is dan nu het grote voordeel van een klasse boven een functie.
Ik kan natuurlijk ook gewoon dit doen:
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Database { var $host; var $user; var $database; // constructor function Database($host, $user, $pass, $database) { // initialiseer hier bepaalde gegevens $this->host = $host; $this->user = $user; $this->database = $database; if( @mysql_connect($this->host, $this->user, $pass) ) { if(! @mysql_select_db($this->database)) { die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } } else { die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } } |
1 | $db = new Database('mijnhost', 'mijnuser', 'mijnpass', 'mijndb'); |
Die is wel netjes inderdaad. Maar kan ik hier nu ook zorgen dat de host al gedeclareerd is naar localhost, en indien nodig ik deze kan overschrijven?quote:Op zondag 7 augustus 2005 17:51 schreef Light het volgende:
[..]
Je kunt het ook iets anders doen
[ code verwijderd ]
Merk op dat ik $pass nergens opsla. Als je dan eens een print_r($db) gebruikt blijft het wachtwoord iig verborgen. En zo kun je in 1 keer verbinding maken:
[ code verwijderd ]
Je kunt je Database-klasse ook meer laten doen dan alleen het maken van een verbinding. Denk aan het tellen van queries, en bijhouden hoe lang de queries duren. Dan heeft zo'n klasse echt meerwaarde boven de standaard mysql_ functies. En het zijn dingen die een query-functie er wel bij kan doen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Database { var $host; var $user; var $database; // constructor function Database($host, $user, $pass, $database) { // initialiseer hier bepaalde gegevens $this->host='localhost'; $this->host = $host; $this->user = $user; $this->database = $database; if( @mysql_connect($this->host, $this->user, $pass) ) { if(! @mysql_select_db($this->database)) { die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } } else { die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } } |
1 | $db= new Database('mijnuser','mijnpass','mijndb'); |
...members... tuurlijk.quote:Al die properties helemaal uitschrijven met setters en getters daar heb je in php4 niet zo veel aan. Je hebt geen onderscheid in private en public members.
Uiteraard kan datquote:Op zondag 7 augustus 2005 19:11 schreef Swetsenegger het volgende:
[..]
Die is wel netjes inderdaad. Maar kan ik hier nu ook zorgen dat de host al gedeclareerd is naar localhost, en indien nodig ik deze kan overschrijven?
1 | function Database($user, $pass, $database, $host='localhost') |
Dat vind ik iig een voordeelquote:Het voordeel is dus behalve dat het misschien wat netter en overzichtelijker is, dat ik mijn variabelen bij de 'functie' hou. Geen risico op overschrijven zeg maar?
[..]
Functies en variabelen. Talen die meer OO zijn kennen public en private members. Van private members is buiten de class het bestaan niet eens te zien. Dat kan in PHP niet, daar zijn alle functies en variabelen van buitenaf te zien en aan te spreken.quote:...members... tuurlijk.
dus het voorbeeld wat ik gaf werkt niet?quote:Op zondag 7 augustus 2005 20:09 schreef Light het volgende:
[..]
Uiteraard kan dat
[ code verwijderd ]
Let wel op de gewijzigde volgorde van de argumentenAls je localhost wilt gebruiken dan geef je gewoon maar 3 argumenten.
In java wordt de term members gebruikt. Hoe dat is in andere OO-talen weet ik niet.quote:Op zondag 7 augustus 2005 20:10 schreef Roönaän het volgende:
members is de verkeerde naam voor attributen gok ik zo.
Je gaat een variabele 2 keer toewijzen, resultaat is dat de eerste eigenlijk wel weg kan. Je kunt wel iets doen dat als je een lege string opgeeft voor $host, dat dan localhost gebruikt wordt. Als je een variabele wilt weglaten dan moet het de laatste zijn.quote:Op zondag 7 augustus 2005 20:14 schreef Swetsenegger het volgende:
[..]
dus het voorbeeld wat ik gaf werkt niet?
Oh kut het is ook nooit goed.quote:Op zondag 7 augustus 2005 20:10 schreef Roönaän het volgende:
members is de verkeerde naam voor attributen gok ik zo.
Ok, dan is wat jij zei een stuk mooierquote:Op zondag 7 augustus 2005 20:20 schreef Light het volgende:
[..]
Je gaat een variabele 2 keer toewijzen, resultaat is dat de eerste eigenlijk wel weg kan. Je kunt wel iets doen dat als je een lege string opgeeft voor $host, dat dan localhost gebruikt wordt. Als je een variabele wilt weglaten dan moet het de laatste zijn.
Ok, maar hoe neem ik de link-identifier op in mijn object?quote:Op zondag 7 augustus 2005 20:04 schreef Roönaän het volgende:
De genoemde database class is bijvoorbeeld ietwat simplistisch. In de object attributen zou je bijvoorbeeld de link identifier moeten opslaan en deze consequent gebruiken bij alle methoden. Dan kan je namelijk op eenvoudige manier een connectie onderhouden met twee mysql servers, dmv twee verschillende db-objecten.
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 | function Connect($sHost = '', $sDatabase = '', $sUser = '', $sPassword = '') { $this->sHost = $sHost; $this->sDatabase = $sDatabase; $this->sUser = $sUser; $this->sPassword = $sPassword; // Establish connection and select database. if (! $this->iConnectionID) { $this->iConnectionID = @mysql_connect($this->sHost, $this->sUser, $this->sPassword); if (!$this->iConnectionID) { $this->iErrorNr = @mysql_errno($this->iConnectionID); $this->sError = @mysql_error($this->iConnectionID); $this->Error("No connection with host: " . $this->sHost); return 0; } if (!@mysql_select_db($this->sDatabase,$this->iConnectionID)) { $this->iErrorNr = @mysql_errno($this->iConnectionID); $this->sError = @mysql_error($this->iConnectionID); $this->Error("No connection with database: " . $this->sDatabase); $this->Disconnect(); return 0; } } return $this->iConnectionID; } |
Dat ga ik zeker doen (had al een en ander over PEAR gehoord, dacht eerst dat het een 'extra' pakket binnen php was, zoals GD2), maar ik wil het bergijpen zeg maar.quote:Op zondag 7 augustus 2005 20:49 schreef Roönaän het volgende:
Swets, kijk anders eens naar de PEAR libraries, dat zijn ook allemaal classes over het algemeen.
http://pear.php.net
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 | class Database { var $host; var $user; var $database; var $link; var $queries[]; // constructor function Database($user, $pass, $database, $host='localhost') { // initialiseer hier bepaalde gegevens $this->host = $host; $this->user = $user; $this->database = $database; if( @mysql_connect($this->host, $this->user, $pass) ) { if(! ($this->link=mysql_select_db($this->database))) { die('<p>Database niet te selecteren omdat: '.mysql_error().'</p>'); } } else { die('<p>Niet verbonden wegens '.mysql_error().'</p>'); } } function query($query) { $this->queries[] = $query; $result = mysql_query($query, $this->link); return $result; } |
stoer, ik was even vergeten dat je de link identifier optioneel kon meegeven met mysql_query (al mijn projecten hebben maar 1 DB. De hoster biedt er ook niet meer per pakketquote:Op zondag 7 augustus 2005 21:21 schreef Light het volgende:
[ code verwijderd ]
Zo is het nog steeds een hele simpele class, maar hij gebruikt wel de link identifier. Die wordt automatisch iedere keer door de functie query gebruikt. Uiteraard kan die functie nog veel meer doen tijdens voor en na het uitvoeren van de query. Vandaar ook dat ik $result gebruik als tussenstap
Je krijgt een array die bijvoorbeeld via $db->queries[] te benaderen is. Die beval alle uitgevoerde queries. En je kunt er nog meer bijzetten, zoals de tijd die nodig was voor het uitvoeren en de mysql foutcode. Dan kun je ook nagaan waar je verder kunt optimaliseren, om eens een zijstraat te noemen.quote:Op zondag 7 augustus 2005 21:44 schreef Swetsenegger het volgende:
[..]
stoer, ik was even vergeten dat je de link identifier optioneel kon meegeven met mysql_query.
Alleen betekent dit wel dat ik met veel queries een enorme array $query krijg.
-edit- o nee, alleen als ik een nieuwe DB connectie maak
Ja, hij zet dus wel elke query in een array.quote:Op zondag 7 augustus 2005 21:52 schreef Light het volgende:
[..]
Je krijgt een array die bijvoorbeeld via $db->queries[] te benaderen is. Die beval alle uitgevoerde queries. En je kunt er nog meer bijzetten, zoals de tijd die nodig was voor het uitvoeren en de mysql foutcode. Dan kun je ook nagaan waar je verder kunt optimaliseren, om eens een zijstraat te noemen.
Het lezen van gifs is er nooit uit geweest. Het maken van gifs zit er sinds vorig jaar weer inquote:Op zondag 7 augustus 2005 21:52 schreef Swetsenegger het volgende:
En nog een side remark. Ondersteunt GD2 nu wel of niet .gif files?
Dat geeft inderdaad 1 deel(het makkelijkste) van het vraagstuk weer.. maar nu nog hoe je de ene keer de ene en de andere keer een andere vervanging moet doen... zoals bijv in:quote:
1 2 3 4 5 6 | $text = "=== groot === ==kleiner== =nog kleiner= normaal"; $text = ereg_replace('===(.*)===','<h1>\\1</h1>',$text); $text = ereg_replace('==(.*)==','<h2>\\1</h2>',$text); $text = ereg_replace('=(.*)=','<h3>\\1</h3>',$text); echo $text; |
Dat komt doordat ereg_replace "greedy" is. Met preg_replace kan je het "greedy" gedrag van het * veranderen in "non-greedy" door er een ? achter te zetten:quote:Op maandag 8 augustus 2005 18:00 schreef Nevermind het volgende:
[ code verwijderd ]
-edit2- okay, dit werkt niet. als er meer dan 1x een match inzit fropt het. wie verbetert het even?
1 2 3 4 5 | $text = "=== groot === ==kleiner== ==kleiner== =nog kleiner= normaal"; $text = preg_replace('/===(.*?)===/', '<h1>\\1</h1>', $text); $text = preg_replace('/==(.*?)==/', '<h2>\\1</h2>', $text); $text = preg_replace('/=(.*?)=/', '<h3>\\1</h3>', $text); echo $text; |
1 2 3 4 5 6 7 8 | <?php $text = "===groot=== ==kleiner== =nog kleiner= normaal"; $text = preg_replace('#[=]{3}(.*)[=]{3}#','<h1>\\1</h1>',$text); $text = preg_replace('#[=]{2}(.*)[=]{2}#','<h2>\\1</h2>',$text); $text = preg_replace('#[=]{1}(.*)[=]{1}#','<h3>\\1</h3>',$text); echo $text; ?> |
quote:Op maandag 8 augustus 2005 19:01 schreef SuperRembo het volgende:
[..]
Dat komt doordat ereg_replace "greedy" is. Met preg_replace kan je het "greedy" gedrag van het * veranderen in "non-greedy" door er een ? achter te zetten:
[ code verwijderd ]
1 2 3 4 5 6 7 | <?php $text = "=nog kleiner= normaal ==kleiner== ===groot=== ==kleiner== =nog kleiner= normaal ===groot=== ====groot===="; $text = preg_replace('/===([^=<].*?)===/', '<h1>\\1</h1>', $text); $text = preg_replace('/==([^=<].+?)=={1}/', '<h2>\\1</h2>', $text); $text = preg_replace('/=([^=<].+?)=/', '<h3>\\1</h3>', $text); echo $text; ?> |
1 2 3 | $text = preg_replace('/(?<!=)===([^=]+?)===(?!=)/', '<h1>$1</h1>', $text); $text = preg_replace('/(?<!=)==([^=]+?)==(?!=)/', '<h2>$1</h2>', $text); $text = preg_replace('/(?<!=)=([^=]+?)=(?!=)/', '<h3>$1</h3>', $text); |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |