pumpel Skrevet 19. oktober 2018 Del Skrevet 19. oktober 2018 (endret) Jeg har en rekke operative PHP-løsninger (php_5.6), mot MySql database. Men nå opplever jeg problem med å endre eksisterende PHP-kode slik at systemene også fungerer under PHP v.7.2PHP 5.6 blir om kort tid dessverre faset ut (av min "provider") - og jeg har ekstrem tidsnød i forhold til å få mine eksisterende PHP-baserte systemer til å fungere - OGSÅ under 7.2: 1)I php 5.6 vil følgende "INC-fil", som opprette forbindelse til MySql-databasen, fungere: <?php$dbcnx =@mysql_connect("xxxxx.com.mysql","database_com", "passord"); mysql_query("SET NAMES utf8");if (!$dbcnx) { echo mysql_errno().":".mysql_error(); die('<p> Det er for øyeblikket ikke mulig å opprette forbindelse med databaseserveren </br> Prøv igjen senere </p>'); }?> SPØRSMÅL1:Hvordan skal en "INC-fil" under PHP 7.2 se ut - for å oppretet kontakt med databasen?2)Selve programkodingen kan under php 5.6 f.eks. se ut som følger: include ("cgi-bin/filnavn.INC"); $fornavn=ucfirst(strtolower(trim($inndata['fornavn']))); $etternavn=ucfirst(strtolower(trim($inndata['etternavn']))); $tlf=$inndata['tlf']; $mail=$inndata['mail']; /*mysql_select_db() er en innebygget funksjon for å kommunisere med MySQL-database */ if (! @mysql_select_db('database_com') ) { die ('Unable to locate the database at this time') } $result=mysql_query("select * from tabell where ((fornavn='$fornavn') and (fornavn !='')) and etternavn='$etternavn' and mail='$mail'"); if (mysql_num_rows($result)>0) { echo("<b>Du har allerede svart</b>"); exit(); } $query="insert into tabell SET fornavn='$fornavn', etternavn='$etternavn', tlf='$tlf' , mail='$mail' , paameldingsdato=CURDATE()"; $result=mysql_query($query); if($result) { . bla bla bla . } SPØRSMÅL2:Hvordan må ovennevnte lille kodeeksempel pkt2. omskrivesfor å fungere under PHP 7.2? Jeg er takknemlig for tilbakemelding - med konkret kodeeksempel, fra alle PHP-programmereremed erfaring med php 5.6 / php 7.2 - kode.mvh Jarle Endret 19. oktober 2018 av pumpel Lenke til kommentar
Emsal Skrevet 19. oktober 2018 Del Skrevet 19. oktober 2018 Tror mysql er faset ut av php 7. Du må over på mysqli eller PDO. Her var det en som kom med en quickfix: function mysql_connect($host, $username, $password, $db) { return mysqli_connect($host, $username, $password, $db); } function mysql_query($query){ return $mysqli_query($query); } Kilde: https://stackoverflow.com/questions/50057193/mysql-support-in-php-7 Lenke til kommentar
Ernie Skrevet 20. oktober 2018 Del Skrevet 20. oktober 2018 Jeg ville vel kanskje sagt at dette er mye mer relevant siden det er en fullverdig erstatning https://github.com/dshafik/php7-mysql-shim Lenke til kommentar
Crowly Skrevet 21. oktober 2018 Del Skrevet 21. oktober 2018 Koden din er usikker, vid åpen for sql injections. Les deg opp på validering, sanitering og database escaping av data, og bruk dette før noe av den data-en kommer i nærheten av en SQL setning, ALDRI stol på data fra en bruker / utenfra. Prepared statements kan også være lurt å se på for bedre beskyttelse mot sql injections. https://en.wikipedia.org/wiki/SQL_injection https://secure.php.net/manual/en/mysqli.real-escape-string.php https://secure.php.net/filter_input https://secure.php.net/manual/en/mysqli.prepare.php Ellers er det stort sett bare å bytte ut mysql_* funksjonene med mysqli_* 1 Lenke til kommentar
pumpel Skrevet 22. oktober 2018 Forfatter Del Skrevet 22. oktober 2018 (endret) Takk for nyttig tilbakemelding, som har hjulpet et godt stykke på vei med oppgradering av PHP 5.6-kode til fungerende PHP 7.2-kode.Ett problem gjenstår. Det gjelder DATAGRID, som jeg ikke er får på lufta.Følgende INC-fil fungerte under PHP 5.6, men fungerer ikke under PHP 7.2.<?ini_set("display_errors", true);define ("DATAGRID_DIR", "datagrid/");define ("PEAR_DIR", "datagrid/pear/");require_once(DATAGRID_DIR.'datagrid.class.php');require_once(PEAR_DIR.'PEAR.php');require_once(PEAR_DIR.'DB.php');$DB_USER='xxxxx_com'; /* usually like this: prefix_name */$DB_PASS='xxxxxxx'; /* must be already enscrypted (recommended) */$DB_HOST='xxxx.mysql'; /* usually localhost */$DB_NAME='xxxxxx_com'; /* usually like this: prefix_dbName */$db_conn = DB::factory('mysql');$db_conn -> connect(DB::parseDSN('mysql://'.$DB_USER.':'.$DB_PASS.'@'.$DB_HOST.'/'.$DB_NAME)); ?> Følgende feilmelding kommer som følge av ovennevnte:"Parse error: syntax error, unexpected 'new' (T_NEW) in /customers/9/b/8/xxxx.com/httpd.www/xxxx/datagrid/pear/DB.php on line 387"SPØRSMÅL:Hvordan må koden over konkret se ut for at datagrid skal få connection til mysqldatabasen, og/ellerslik at variabelen $db_conn får det innhold DATAGRID forlanger at den skal ha? Er takknemlig for forslag til konkret kode. Endret 22. oktober 2018 av pumpel Lenke til kommentar
Crowly Skrevet 22. oktober 2018 Del Skrevet 22. oktober 2018 Hvordan ser linje 387 (og gjerne noen linjer før) ut denne fila: /customers/9/b/8/xxxx.com/httpd.www/xxxx/datagrid/pear/DB.php? Lenke til kommentar
pumpel Skrevet 23. oktober 2018 Forfatter Del Skrevet 23. oktober 2018 379 $classname = "DB_${type}";380 if (!class_exists($classname)) {381 $tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null,382 "Unable to include the DB/{$type}.php file for `$dsn'",383 'DB_Error', true);384 return $tmp;385 }386387 @$obj =& new $classname;388389 foreach ($options as $option => $value) {390 $test = $obj->setOption($option, $value);391 if (DB::isError($test)) {392 return $test;393 }394 } Lenke til kommentar
pumpel Skrevet 23. oktober 2018 Forfatter Del Skrevet 23. oktober 2018 (endret) Det er fortsatt et PROBLEM å få oppkoblet DATAGRID til en MYSQL-database etter at PHP 5.6 ble prompte byttet ut. Siden PHP7.2 derfor MÅ benyttes, skaper dette store problemer for de mange systemer som kjører DATAGRID.SPØRSMÅL:Kjenner noen til et domene/web-hotell som er villig til å IKKE slå av PHP 5.6?Dette ville i såfall løse problemet Endret 23. oktober 2018 av pumpel Lenke til kommentar
Ernie Skrevet 23. oktober 2018 Del Skrevet 23. oktober 2018 Sitter på mobilen, så får ikke testet det selv, men referanse til et objekt du lager? Det høres utrolig ulogisk ut. Hva skjer om du fjerner & i den linja? Lenke til kommentar
Crowly Skrevet 23. oktober 2018 Del Skrevet 23. oktober 2018 (endret) Kjenner noen til et domene/web-hotell som er villig til å IKKE slå av PHP 5.6?Det er fordi 5.6 ikke lenger er vedlikeholdt (ingen sikkerhets patcher osv) etter 31.12.2018. Så jeg tviler på at du vil finne noen (seriøse) aktører som vil tilby en usikker php versjon.Php 7 er vesentlig raskere enn 5.x, i tillegg til en del andre hyggelig forbedringer. Er ingen grunn til å bli værende på 5.6. @$obj =& new $classname; Å bruke @ for å ikke vise evt (feil)meldinger er sløv koding. Skriv god kode som ikke generer eller håndterer slik ting på en skikkelig måte.Alle ny klasser blir henvist til med en referanse uansett, dropp &. Til info: PHP 7 er en del strengere på en del ting enn PHP 5, se på det som en mulighet til å forbedre koden og lære. Endret 23. oktober 2018 av Crowly Lenke til kommentar
Ernie Skrevet 23. oktober 2018 Del Skrevet 23. oktober 2018 Det er fordi 5.6 ikke lenger er vedlikeholdt (ingen sikkerhets patcher osv) etter 31.12.2018. Så jeg tviler på at du vil finne noen (seriøse) aktører som vil tilby en usikker php versjon. Php 7 er vesentlig raskere enn 5.x, i tillegg til en del andre hyggelig forbedringer. Er ingen grunn til å bli værende på 5.6. Uten at jeg vil spore av tråden helt her, men dette er totalt feil. RHEL 7 kommer med PHP 5.4 og støttes til ut i 2024. Selv RHEL 7.5 som ble sluppet ut tidligere i år leveres med PHP 5.4 på tross av at EOL for PHP 5.4 var i 2015 en gang. Det betyr selvsagt ikke at PHP levert i RHEL 7 er utrygt, men skyldes noe så banalt som at Red Hat tar ansvar for å fikse opp PHP-versjonen de leverer. Det er fordelen med åpen kildekode Selvsagt ikke uenig i at det er fordeler å få hvis man hopper over på PHP 7, men å fortsatt leve i PHP 5.x-verden er altså på ingen måte useriøst eller usikkert. Lenke til kommentar
Ernie Skrevet 23. oktober 2018 Del Skrevet 23. oktober 2018 Sitter på mobilen, så får ikke testet det selv, men referanse til et objekt du lager? Det høres utrolig ulogisk ut. Hva skjer om du fjerner & i den linja? Har testet dette lokalt nå, og selvsagt fungerer ikke den linjen du refererer til. Hva er det egentlig du prøver på i den linja? Referanse til et temporært objekt går jo på ingen måter. Hva er det egentlig du forventer å få en referanse til? Lenke til kommentar
pumpel Skrevet 24. oktober 2018 Forfatter Del Skrevet 24. oktober 2018 Et annet spørsmål: Jeg har en mistanke om at problemet kan ligge i at jeg benytter en IKKE oppdatert DATAGRID. Har du/dere en anbefalt link til der jeg kan laste ned/kjøpe nyeste versjon av DATAGRID?(DATAGRID 8.2.7 er visst den nyeste). Lenke til kommentar
Ernie Skrevet 25. oktober 2018 Del Skrevet 25. oktober 2018 Jeg er ikke kjent med det produktet. Hvor har du fått tak i den i utgangspunktet? Det nettstedet burde jo ha siste versjonen nå Lenke til kommentar
pumpel Skrevet 25. oktober 2018 Forfatter Del Skrevet 25. oktober 2018 Min konklusjon er at det er DATAGRID som må oppgraderes. Nyeste versjon er 8.2.7, og forslag til link kan være følgende, og så får vi se hvordan det går videre:https://www.apphp.com/php-datagrid/index.php Lenke til kommentar
pumpel Skrevet 25. oktober 2018 Forfatter Del Skrevet 25. oktober 2018 HeiJeg prøver å få den siste versjonen DATAGRID 8.2.7 til å fungere sammen emd PHP 7.2.Det er oppstått et nytt problem som ikke var der tidligere, som har med PHP 7.2 og "include_path" å gjøre.I nedenstående feilmeling går det frem at include_path er standard satt til følgende"(include_path='.:/usr/share/php')".Og dette har vel med hvordan include_path i PHP 7.2 er satt på server, eller?Problemet er (i å få PHP 7.2) å definere en variabel 'DATAGRID_DIR' til å peke på katalogen "DATAGRID", som altså ligger (må ligge) rett under katalogen der scriptet ligger eller kjøres fra.Følgende kode lar seg altså ikke vellykket utføre:<?define('DATAGRID_DIR', "..datagrid/"); require_once(DATAGRID_DIR.'datagrid.class.php');?>Følgende feilmeling gir en pekepinn på hva som er problemet:"Warning: require_once(..datagrid/datagrid.class.php): failed to open stream: No such file or directory in /customers/9/b/8/tromsoo.com/httpd.www/baattur/test.php on line 23Fatal error: require_once(): Failed opening required '..datagrid/datagrid.class.php' (include_path='.:/usr/share/php') in /customers/9/b/8/tromsoo.com/httpd.www/baattur/test.php on line 23 "Kan dere antyde løsning på dette problemet i PHP 7.2 ? Lenke til kommentar
Crowly Skrevet 25. oktober 2018 Del Skrevet 25. oktober 2018 Problemet er (i å få PHP 7.2) å definere en variabel 'DATAGRID_DIR' til å peke på katalogen "DATAGRID", som altså ligger (må ligge) rett under katalogen der scriptet ligger eller kjøres fra Nei den må ikke ligge rett under den katalogen. Alt du trenge å gjøre er å sette rett path i DATAGRID_DIR definen. Hvor det er en feil i koden, det mangler en slash define('DATAGRID_DIR', "../datagrid/"); // ligger datagrid ett annet sted kan man gjøre define('DATAGRID_DIR', "/en/eller/annen/path/til/datagrid/"); En enda bedre løsning er å ta i bruk en autoloader. Composer sin autoloader er bransje standard (så vidt jeg vet). Lenke til kommentar
Ernie Skrevet 25. oktober 2018 Del Skrevet 25. oktober 2018 Det har nok ingenting med PHP 7.2 å gjøre, men sikkert fordi du skriver ..datagrid og ikke ../datagrid Lenke til kommentar
pumpel Skrevet 26. oktober 2018 Forfatter Del Skrevet 26. oktober 2018 (endret) Jeg har testet ulike plasseriner av datagrid-katalogen og endret setningen deretter. Har testet både define('DATAGRID_DIR', "../datagrid/"); og define('DATAGRID_DIR', "datagrid/");Syntaksen jeg bruker - f.eks.define('DATAGRID_DIR', "../datagrid/"); er rett, MEN den gir feilmelding - som tidligere antydet.Feilmeldingen er som følger:"Fatal error: Uncaught Error: Call to a member function DataSource() on null in /customers/9/b/8/tromsoo.com/httpd.www/baattur/test2.php:79 Stack trace: #0 {main} thrown in /customers/9/b/8/tromsoo.com/httpd.www/baattur/test2.php on line 79" Nei, sikkert ikke noe feil med selve PHP 7.2, MEN PHP 7.2 må jo f.eks.være riktig satt opp på providerens server...Lurer på at det kan være problemet?. Endret 26. oktober 2018 av pumpel Lenke til kommentar
j-- Skrevet 26. oktober 2018 Del Skrevet 26. oktober 2018 Tviler på at PHP ikke er "riktig" satt opp. Du får jo i klartekst hva som er feil. No such file or directory in /customers/9/b/8/tromsoo.com/httpd.www/xxx/xxx.php on line 51 Finnes den eksakte stien /customers/9/b/8/tromsoo.com/httpd.www/datagrid/datagrid.class.php? Er den lesbar for HTTP-serveren? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå