Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

php opdateret

6 views
Skip to first unread message

Erik Ginnerskov

unread,
Dec 11, 2016, 10:13:14 AM12/11/16
to
Jeg har i mange år haft en velfungerende gæstebog baseret på
php/phpMySql, men efter seneste opdatering på serveren fungerer det ikke
længere. Jeg får en fejlmelding:

/var/www/ginnerskov.dk/***/***/mysql-funktioner.php on line 8

Jeg har lagt skriptet (omdøbt til '.txt) her:

http://ginnerskov.dk/temp/phpmysqlgb_php.txt

... og den fejlende kodelinje er dette:

phpmysqlgb_php.txt

--
Med venlig hilsen
Erik Ginnerskov
http://ginnerskov.dk

scootergrisen

unread,
Dec 11, 2016, 12:11:11 PM12/11/16
to
Den 11-12-2016 kl. 16:13 skrev Erik Ginnerskov:
> Jeg har i mange år haft en velfungerende gæstebog baseret på
> php/phpMySql, men efter seneste opdatering på serveren fungerer det ikke
> længere. Jeg får en fejlmelding:
>
> /var/www/ginnerskov.dk/***/***/mysql-funktioner.php on line 8
>
> Jeg har lagt skriptet (omdøbt til '.txt) her:
>
> http://ginnerskov.dk/temp/phpmysqlgb_php.txt
>
> ... og den fejlende kodelinje er dette:
>
> phpmysqlgb_php.txt
>

"This extension was deprecated in PHP 5.5.0, and it was removed in PHP
7.0.0"
http://php.net/manual/en/function.mysql-connect.php

Så hvis du har opdateret til PHP 7 eller nyere så er det sikkert derfor
men du kunne havde set deprecated fejl siden PHP 5.5.0 hvis du ellers
har slået det til og går op i sådan noget.

"Instead, the MySQLi or PDO_MySQL extension should be used".

Hvis ikke du går op i at opdatere din kode så kan du bare bruge den
gamle PHP version hvor det virkede.

Jan Hansen

unread,
Dec 11, 2016, 12:13:26 PM12/11/16
to
Erik Ginnerskov skrev Sun, 11 Dec 2016 16:13:14 +0100:

> Jeg har i mange år haft en velfungerende gæstebog baseret på
> php/phpMySql, men efter seneste opdatering på serveren fungerer det ikke
> længere. Jeg får en fejlmelding:
>
> /var/www/ginnerskov.dk/***/***/mysql-funktioner.php on line 8
>
> Jeg har lagt skriptet (omdøbt til '.txt) her:
>
> http://ginnerskov.dk/temp/phpmysqlgb_php.txt
>
> ... og den fejlende kodelinje er dette:
>
> phpmysqlgb_php.txt

Jeg gætter på serveren er opdateret til php7, så skal linie 8-14 i dit
script udskiftes med:

if (!mysqli_connect("$server","$bruger","$kodeord","$database")) {
udskriv_fejl("php7 sucks.");
}

På linie 24 skal "mysql_fetch_array" udskiftes med "mysqli_fetch_row"

Andre forekomster af "mysql_" skal blot udskiftes med "mysqli_", så burde
det virke igen, til næste gang php bliver "forbedret", så internettet
skal skrives om på ny.


--
mvh Jan.
Help Microsoft stamp out piracy. Give
Linux to a friend today!

Erik Ginnerskov

unread,
Dec 11, 2016, 12:31:20 PM12/11/16
to
Den 11-12-2016 kl. 18:11 skrev scootergrisen:
> "This extension was deprecated in PHP 5.5.0, and it was removed in PHP
> 7.0.0"
> http://php.net/manual/en/function.mysql-connect.php
>
> Så hvis du har opdateret til PHP 7 eller nyere så er det sikkert derfor
> men du kunne havde set deprecated fejl siden PHP 5.5.0 hvis du ellers
> har slået det til og går op i sådan noget.
>
> "Instead, the MySQLi or PDO_MySQL extension should be used".
>
> Hvis ikke du går op i at opdatere din kode så kan du bare bruge den
> gamle PHP version hvor det virkede.

Jeg foretrækker nu, at det bliver bragt til at virke med den nye
php-version. Men tak alligevel

Erik Ginnerskov

unread,
Dec 11, 2016, 12:39:58 PM12/11/16
to
Den 11-12-2016 kl. 18:13 skrev Jan Hansen:

>
> Jeg gætter på serveren er opdateret til php7, så skal linie 8-14 i dit
> script udskiftes med:
>
> if (!mysqli_connect("$server","$bruger","$kodeord","$database")) {
> udskriv_fejl("php7 sucks.");
> }
>
> På linie 24 skal "mysql_fetch_array" udskiftes med "mysqli_fetch_row"
>
> Andre forekomster af "mysql_" skal blot udskiftes med "mysqli_", så burde
> det virke igen, til næste gang php bliver "forbedret", så internettet
> skal skrives om på ny.

Det bragte mig lidt videre, men det fungerer ikke endnu:

http://ginnerskov.dk/temp/mysql-funktioner_php.txt

Jeg får følgende fejlmeldinger:

Warning: mysqli_query() expects at least 2 parameters, 1
given in /var/www/ginnerskov.dk/***/***/mysql-funktioner.php on
line 14

Kunne ikke udføre: select id, navn, epost, date_format(tid,
'%e/%c %Y, %H:%i:%s') as tiden, subject, besked from gaestebog
order by tid desc limit 0, 10
Warning: mysqli_error() expects exactly 1 parameter, 0 given in
/var/www/ginnerskov.dk/***/***/mysql-funktioner.php on line 44

scootergrisen

unread,
Dec 11, 2016, 1:03:27 PM12/11/16
to
Der står i fejlbeskeden hvad problemet er:
mysqli_query() expects at least 2 parameters

Kig på linket jeg gav dig og læs om du vil bruge MySQLi eller PDO_MySQL.

Derudover kan MySQLi koden skrives på to måder:
objekt orienterede syntaks
og
procedural syntaks

procedural syntaksen er bare aliasser for den objekt orienterede syntaks.

Jeg valgte at lære MySQLi objekt orienterede syntaks men skal ikke kunne
sige om PDO måden er bedre.

Se også:
https://netkoder.dk/netkoder/test10.php

Og nu hvor du ikke har været opmærksom på at koden er har været
deprecated længde og først finde ud af det når du det blevet fjernet fra
PHP så kunne du slå fejlbeskeder til på den hjemmeside (lokalt) så får
du sikkert besked om andet kode der er deprecated osv.:
https://netkoder.dk/netkoder/kode_error.php

Men undlad og vise fejlbeskeder på hjemmesiden til brugerne så er det
bedre at gemme fejlbeskederen til en logfil.

Hvis du vil kan du også lægge alt din kode ud så vi kan se den og komme
med forslag.

Jan Hansen

unread,
Dec 11, 2016, 1:08:39 PM12/11/16
to
Erik Ginnerskov skrev Sun, 11 Dec 2016 18:40:00 +0100:

> Jeg får følgende fejlmeldinger:
>
> Warning: mysqli_query() expects at least 2 parameters, 1 given in
> /var/www/ginnerskov.dk/***/***/mysql-funktioner.php on line 14
>
> Kunne ikke udføre: select id, navn, epost, date_format(tid, '%e/%
c %Y,
> %H:%i:%s') as tiden, subject, besked from gaestebog order by tid
desc
> limit 0, 10 Warning: mysqli_error() expects exactly 1 parameter, 0
> given in /var/www/ginnerskov.dk/***/***/mysql-funktioner.php on
line 44

Det var en fejl, jeg glemte at de bytter om på rækkefølgen, så
mysql_query ($query,$connection)
bliver til
mysqli_query ($connection,$query)

Det er lidt vanskelligt at overføre, når det er inde i funktiner, men med
$connection defineret udenfor funktionerne, og referencerne indenfor bruger
global udgave, skulle det kunne lade sig gøre:

<?php
$connection = '';

function aabn_forbindelse_og_vaelgdb() {
$server = "mysql-server";
$bruger = "brugernavn";
$kodeord = "password";
$database = "databasenavn";
global $connection;
if (!$connection=mysqli_connect("$server","$bruger","$kodeord","$database")) {
udskriv_fejl("Kunne ikke oprette en forbindelse til MySQL.");
}
}

function sql_spoerg_og_faa_svar($query) {
global $connection;
$resultat = mysqli_query($connection,$query);

if(!$resultat) {
udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
}

while($raekke = mysqli_fetch_row($resultat)) {
$resultat_array[] = $raekke;
}

return $resultat_array;
}

function sql_spoerg($query) {
global $connection;
$resultat = mysqli_query($connection,$query);

if(!$resultat) {
udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
}
}

function luk_forbindelse() {
global $connection;
if(!mysqli_close($connection)) {
udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
}
}

function udskriv_fejl($fejl) {
echo "<p>$fejl";

if ($mysql_fejl = mysqli_error()) {
echo "<br>Fejlen er: <em>$mysql_fejl</em>";
}

exit;
}
?>

Erik Ginnerskov

unread,
Dec 11, 2016, 1:41:46 PM12/11/16
to
Den 11-12-2016 kl. 19:08 skrev Jan Hansen:

> Det var en fejl, jeg glemte at de bytter om på rækkefølgen, så
> mysql_query ($query,$connection)
> bliver til
> mysqli_query ($connection,$query)

Det sted kan jeg slet ikke finde i scriptet.

> Det er lidt vanskelligt at overføre, når det er inde i funktiner, men med
> $connection defineret udenfor funktionerne, og referencerne indenfor bruger
> global udgave, skulle det kunne lade sig gøre:
>
> <?php
> $connection = '';

Skal der stå noget mellem anførselstegnene?

> function aabn_forbindelse_og_vaelgdb() {
> $server = "mysql-server";
> $bruger = "brugernavn";
> $kodeord = "password";
> $database = "databasenavn";

Dette pillede jeg ikke ved, det er som mit eget
Satte dette i stedet for resten af mit. Nu får jeg følgende fejlmelding:

Fatal error: Uncaught Error: Call to undefined function ereg()
in /var/www/ginnerskov.dk/***/***/guestbook.php:123 Stack
trace: #0 {main} thrown in /var/www/ginnerskov.dk/***/***
/guestbook.php on line 123

... i denne fil:

http://ginnerskov.dk/temp/guestbook_php.txt

Erik Ginnerskov

unread,
Dec 11, 2016, 1:51:02 PM12/11/16
to
Den 11-12-2016 kl. 19:03 skrev scootergrisen:


> Der står i fejlbeskeden hvad problemet er:
> mysqli_query() expects at least 2 parameters

Det kan godt være, jeg er ved at blive gammel. Men jeg tæller 4 parametre

> Kig på linket jeg gav dig og læs om du vil bruge MySQLi eller PDO_MySQL.

Undskyld, men det fatter jeg hat af.

> Hvis du vil kan du også lægge alt din kode ud så vi kan se den og komme
> med forslag.

http://ginnerskov.dk/temp/phpmysqlgb.zip

... er det, som fungerede indtil min host opdaterede php til 7 i løbet
af sommeren.

Erik Ginnerskov

unread,
Dec 11, 2016, 1:52:38 PM12/11/16
to
Den 11-12-2016 kl. 19:03 skrev scootergrisen:

> Men undlad og vise fejlbeskeder på hjemmesiden til brugerne så er det
> bedre at gemme fejlbeskederen til en logfil.

Jeg har byttet gæstebogen ud med en midlertidig side, som bare
fortæller, at det ikke dutter lige pt.

scootergrisen

unread,
Dec 11, 2016, 2:00:31 PM12/11/16
to
> Satte dette i stedet for resten af mit. Nu får jeg følgende fejlmelding:
>
> Fatal error: Uncaught Error: Call to undefined function ereg()
> in /var/www/ginnerskov.dk/***/***/guestbook.php:123 Stack
> trace: #0 {main} thrown in /var/www/ginnerskov.dk/***/***
> /guestbook.php on line 123
>
> ... i denne fil:
>
> http://ginnerskov.dk/temp/guestbook_php.txt
>

Det er bedst hvis du går in på http://php.net/ og slår tingene op.

Søg efter ereg så står der:
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.

Alternatives to this function include:

preg_match()

Erik Ginnerskov

unread,
Dec 11, 2016, 2:08:02 PM12/11/16
to
Den 11-12-2016 kl. 20:00 skrev scootergrisen:

> Det er bedst hvis du går in på http://php.net/ og slår tingene op.
>
> Søg efter ereg så står der:
> This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
>
> Alternatives to this function include:
>
> preg_match()

Det er hebraisk for mig

Jan Hansen

unread,
Dec 11, 2016, 2:41:10 PM12/11/16
to
Erik Ginnerskov skrev Sun, 11 Dec 2016 19:41:48 +0100:


> Satte dette i stedet for resten af mit. Nu får jeg følgende fejlmelding:
>
> Fatal error: Uncaught Error: Call to undefined function ereg()
> in /var/www/ginnerskov.dk/***/***/guestbook.php:123 Stack
> trace: #0 {main} thrown in /var/www/ginnerskov.dk/***/***
> /guestbook.php on line 123
>
> ... i denne fil:
>
> http://ginnerskov.dk/temp/guestbook_php.txt

Du skal bare udskifte linien:
if(ereg("@", $epost)) {
med:
if(preg_match("/@/", $epost)) {
eller med:
if(strpos($epost,"@")) {

Det kan nok ikke betale sig at bruge for meget tid på ligefrem at sætte
sig ind i php, om kort tid er der kommet en ny "forbedret" udgave igen,
og man kan begynde helt forfra.

scootergrisen

unread,
Dec 11, 2016, 2:53:27 PM12/11/16
to
>> Der står i fejlbeskeden hvad problemet er:
>> mysqli_query() expects at least 2 parameters
>
> Det kan godt være, jeg er ved at blive gammel. Men jeg tæller 4 parametre

Her er kun en parameter:
$resultat = mysqli_query($query);

>> Kig på linket jeg gav dig og læs om du vil bruge MySQLi eller PDO_MySQL.
>
> Undskyld, men det fatter jeg hat af.

Heller ikke let men sådan er det hvis du vil bruge nye versioner.

Alternativt kan du måske skift PHP version på dit webhotel (unoeuro).
Prøv og log ind på deres side og se om der er en indstilling til at
skifte tilbage til en ældre version, eller skriv til dem og spørg.

Men altså det vil jo være 100 gange bedre at lære de nye ting i stedet
for at gøre ting for at få gammel kode til at virke længere og længere tid.

Men det kræver selvfølgelig du har en interesser i at lære mere PHP.

>> Hvis du vil kan du også lægge alt din kode ud så vi kan se den og komme
>> med forslag.
>
> http://ginnerskov.dk/temp/phpmysqlgb.zip

Du blive ved med at dele loginoplysninger ud.

Du må nok hellere ændre alle de adgangskoder du har udleveret nu så der
ikke er nogen der misbruger det (andre end mig selvfølgelig).

Jeg kigger på din kode og sender nogen forslag.

> ... er det, som fungerede indtil min host opdaterede php til 7 i løbet
> af sommeren.

Hvad bilder de sig også ind og opdatere.

>> preg_match()
>Det er hebraisk for mig

preg_match er vel ikke mere hebraisk end ereg.
Læs på php.net og tjek forskellen på ereg og preg_match.

Der står:
Tip Do not use preg_match() if you only want to check if one string is
contained in another string. Use strpos() instead as it will be faster.

Så slå strpos op og tjek eksemplerne.

Jan Hansen

unread,
Dec 11, 2016, 3:15:51 PM12/11/16
to
Jeg fandt lige et par fejl mere, på linie 23 og 24 står "$HTTP_GET_VARS",
det virker (heller ikke) mere, de skal udskiftes med "$_GET"

scootergrisen

unread,
Dec 11, 2016, 4:12:08 PM12/11/16
to
Her er nogen forslag til dine filer som du kan arbejde med så kigger jeg
på filen med mysql funktioner imens.
Du kan bare starte med at rette de letter ting først så kan vi se hvad
der er tilbage.

Hvis du har lyst kan du eventuelt gemme dine filer med UTF-8 encoding. I
stedet for ISO-8859-1
Det giver mulighed for at man kan skrive flere tegn på hjemmesiden
direkte f.eks. hvis du har brug for at indsætte noget kinesisk eller
andre sjove ting.
Så skal du også rette:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Den her funktion giver vist ikke meget mening i design-funktioner.php:
function top($titel) {

$html = "";

return $html;

}

Din kode kunne godt bruge noget indrykning så det er lettere er
overskue/læse f.eks.:

<?php
session_start();
?>
<?php
require("mysql-funktioner.php");
?>
<? $strTitle="Administrer gæstebogen";?>
<? include("head.inc"); ?>
</head>

Kunne være:

<?php
session_start();
?>

<?php
require("mysql-funktioner.php");
?>

<? $strTitle="Administrer gæstebogen";?>
<? include("head.inc"); ?>
</head>

Eller noget i den stil. Jeg bruger 4 mellemrumstegn som indrykning. Det
kan man vælge i det tekstredigeringsprogram man bruger hvor mange
mellemrum der skal indrykkes med og om det skal være tabulatortegn

Samme med andre koder som CSS:

body{
background:white;
color:black;
margin:0px;
}

Mod:

body{
background:white;
color:black;
margin:0px;
}

Eller:

body {
background: white;
color: black;
margin: 0px;
}

Det gør det lettere for andre at kigge og hjælpe med koden hvis det er
let at overskrue.

I stedet for require() kan du bruge require_once() som en sikkerhed for
at filen ikke indlæses mere end én gang.
Se også https://netkoder.dk/netkoder/kode_includeogrequire.php

if(is_array($HTTP_POST_VARS)) {
$navn = $HTTP_POST_VARS['navn'];
$epost = $HTTP_POST_VARS['epost'];
$subject = $HTTP_POST_VARS['subject'];
$besked = $HTTP_POST_VARS['besked'];

http://php.net/manual/en/reserved.variables.post.php
4.1.0 Introduced $_POST that deprecated $HTTP_POST_VARS.

Brug blot $_POST
Det er godt nok noget gammel kode du kunne havde fjerne for længst.
Version 4.1.0. blev udgivet 10 Dec 2001.

Samme med HTTP_GET_VARS
http://php.net/manual/en/reserved.variables.get.php
Brug $_GET

Du har en kommentar (måske flere?) hvor ø er skrevet som oe. Du kan
sagtens skriv æøå direkte.
* Foerst napper vi variablerne fra miljoet.

Her står:
# Dette var en simpel gæstebog, konstrueret af cl...@webclaus.com #

Ved ikke hvem det er men hvis du tidligere har fået hjælp kunne det
måske tænkes at den person vil opdatere koden for dig.

Istedet for at t og f:
$html_p = "f";

Så kan du skrive:
$html_p = true;
$html_p = false;

Det er de rigtige sand/falsk værdier. "f" og "t" det er strenge.

Samme med:
$epost_p = "f";

$admin_epost = "dit.navn@ditdomæne.dk";
Ved ikke hvorfor der står den e-mail-adresse. Så er det blevet blevet
sendt en e-mail til den addresse hver gang nogen skrev i gæstebogen?

Ligesom der står i loginbeskyttelse.txt så er det sikkert en god ide at
flytte alle dine loginoplysninger ud i en seperat fil.
På den måde er det lidt lettere når du for eksempel vil vide din kode
til mig at du skal kun skal huske på at dine adgangskoder kun er i én
fil så du kan fjerne den fil når du sender noget til andre.
Så vil være en god ide at gå alle dine adgangskoder igennem og ændre dem
og samle dem ét sted.

Hvis du har lyst kan du opdatere din HTML-kode til HTML 5.
Det handler mest om headeren med <!DOCTYPE...> men det kan du jo lige så
godt når du er ved at opdatere.
Se også: https://netkoder.dk/netkoder/kode_skabeloner.php

Log mærke til "subject varchar(100) not null," hvor du kalder det subject.
Det kunne du ændre til "emne" men du skal så også gøre det i databasen
ved at logge ind osv.
Tænker bare det vel lige så godt kan være på dansk når de andre er det.

Krabsen

unread,
Dec 11, 2016, 4:13:35 PM12/11/16
to
Den 11-12-2016 kl. 16:13 skrev Erik Ginnerskov:
> Jeg har i mange år haft en velfungerende gæstebog baseret på
> php/phpMySql, men efter seneste opdatering på serveren fungerer det ikke
> længere. Jeg får en fejlmelding:

Som andre har skrevet skyldes det at i nyere php-versioner skal der
bruges mysqli i stedet for mysql.

Men der er naturligvis dovne mennesker, der har lavet et migration-tool :-)

Søg på MySQLConverterTool. Det er et tool, der løber gennem hele dit
sites php-filer og ændrer koden, så den fremover anvender mysqli.

Der er naturligvis ingen garanti for, at de virker 100% i alle sites,
men dem jeg har konverteret har funket vupti...

Erik Ginnerskov

unread,
Dec 13, 2016, 12:59:25 PM12/13/16
to
Den 11-12-2016 kl. 21:15 skrev Jan Hansen:
> Du skal bare udskifte linien:
> if(ereg("@", $epost)) {
> med:
> if(preg_match("/@/", $epost)) {
> eller med:
> if(strpos($epost,"@")) {
>
> Jeg fandt lige et par fejl mere, på linie 23 og 24 står "$HTTP_GET_VARS",
> det virker (heller ikke) mere, de skal udskiftes med "$_GET"

Jamen så kom vi da et skridt videre (og undskyld min tavshed i går - jeg
havde slet ikke tid til at tænde computeren).

Nu får jeg ikke nogen fejlmeldinger, når jeg indlæser gæstebogen online.
Jeg får bare en række tomme felter, hvor gæsternes indlæg plus datotid
m.m. skulle stå.

http://ginnerskov.dk/gb/gaestebog.php

Hvis jeg hjemmefra (lokal host koblet op på MySql-serveren, får jeg
denne fejl i hvert felt:

Notice: Undefined variable: tiden in C:\Dokumenter
\html\ginnerskov\kladde\gb\gaestebog.php on line 135

... denne linje:

<p class="mb15">Den <?php echo $tiden; ?> skrev <?php echo
$navn; ?></p>

http://ginnerskov.dk/temp/gaestebog_php.txt

Når vi får systemet til at læse gæstebogen, er der også et problem med
at få lov til at skrive i den, mere om det til den tid.
0 new messages