Author Topic: Frage zum Umstieg auf mysqli  (Read 1542 times)

Offline gks

  • Posts: 44
  • Gender: Male
Frage zum Umstieg auf mysqli
« on: August 18, 2016, 09:02:19 PM »
Hallo Websitebakers,

nachdem mir hier schon mehrfach geholfen wurde, wende ich mich erneut mit einer Frage an euch.

Das Problem: nach Update auf WB2.8.3 SP7 (von SP1) funktionieren einige uralte mysql-Scripte nicht mehr, welche speziell für unsere Webseite geschrieben wurden. Der Autor ist nicht mehr „greifbar“. Bei einen der Scripte hat mir jacobi22 hier aus dem Forum vor etlichen Monaten schon sehr geholfen. Nun habe ich versucht, mich in die Thematik einzuarbeiten, habe auch schon kleinere Teile umgeschrieben, komme jetzt aber an einigen Stellen nicht weiter.
Beim aktuellen Problem geht es um ein Formular, über welches man drei unterschiedliche Aktionen auslösen kann: Einträge in der Datenbank "mailscript" (E-Mail-Adresse und dazugehörige Beschreibung) löschen, hinzufügen oder ändern. Der betreffende Teil des alten Code sieht so aus:

Code: [Select]
if( isset($_POST['ok']) ){
        if( isset($_GET['act']) ){
                if( $_GET['act'] == "rm" ){
               if( mysql_query("DELETE FROM mailscript WHERE id=".$_POST['id']." LIMIT 1") )
                                echo '<p>Eintrag gelöscht.</p>';
                        }
                ...
                }
        }

Meine Frage: Wie schreibt man Zeilen 4+5 so um, dass sie unter der o.g. WB-Version funktionieren. Wenn ich da einen Hinweis bekäme, könnte ich mir den Rest selbst umschreiben, denke ich.

Vielen Dank für Euer Interesse,
Gruß GKS
« Last Edit: August 18, 2016, 09:12:01 PM by gks »
WB Version 2.8.3+SP7 (r1646)
PHP5.4.45
SQL Server: 5.5.49-log ( NON STRICT )

Offline jacobi22

  • Posts: 5842
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Frage zum Umstieg auf mysqli
« Reply #1 on: August 19, 2016, 12:48:47 PM »
einfachste Lösung wäre mysqli_query(), sollte noch gehen, nimmt aber keiner mehr

was mich wundert, ist der Mix zwischen POST und GET, entscheide dich für eine Variante

Bedingungen wie hier kann man zusammenfassen und mit einer UND-Bedingung belegen

dein Code
Code: [Select]
if( isset($_GET['act']) ){
                if( $_GET['act'] == "rm" ){

mein Code
Code: [Select]
if( isset($_POST['act']) && ($_POST['act'] == "rm") ){
die POST-ID (und eigentlich alle anderen ankommenden Werte!) sollte man vorher prüfen auf den erwarteten Wert, z.b. so
(Prüfung auf Vorhandensein und numerischen Wert)
Code: [Select]
if(isset($_POST['id']) && is_numeric($_POST['id'])) {
keine POST- oder GET-Variablen direkt in das SQL-Statement, also vorher definieren, etwa so
Code: [Select]
$sPostID = (isset($_POST['id']) ? ($_POST['id']) : '');
der eigentliche SELECT dann z.b. so

Code: [Select]
$sql  = 'DELETE FROM `mailscript` '
                  . 'WHERE `id` = '.(int)$sPostID.' ';
            // Delete droplet
            $database->query($sql);

if(!$database->is_error()) {
                echo '<p>Eintrag gel&ouml;scht.</p>';
            }

zusammensetzen schaffst du allein, denk ich  :wink:
schau aber, das nur eine Versandmethode verwendet wird, POST oder GET

P.S.: alles, was du brauchst, steht in den verschiedenen WB-Dateien, abgucken erlaubt  :wink:
Probleme sind da, um sie zu lösen, nicht, um nach Ausreden zu suchen.

Offline gks

  • Posts: 44
  • Gender: Male
Re: Frage zum Umstieg auf mysqli
« Reply #2 on: August 19, 2016, 01:22:31 PM »
Vielen Dank für Deine Mühe, jacobi22!!!

Ich sehe es mir jetzt gleich mal an und werde Bericht erstatten, ob alles geklappt hat.

Gruß, GKS
WB Version 2.8.3+SP7 (r1646)
PHP5.4.45
SQL Server: 5.5.49-log ( NON STRICT )

Offline gks

  • Posts: 44
  • Gender: Male
Re: Frage zum Umstieg auf mysqli
« Reply #3 on: August 20, 2016, 04:39:33 PM »
Hallo,

ich hab eine ganze Weile probiert, bekomme es aber nicht hin. Mein derzeitiger code sieht so aus:
Code: [Select]
$sPostID = (isset($_POST['id']) ? ($_POST['id']) : '');
if( isset($_POST['act']) && ($_POST['act'] == "rm") ){
if(isset($_POST['id']) && is_numeric($_POST['id'])){
$sql  = 'DELETE FROM `mailscript` ' . 'WHERE `ID` = '.(int)$sPostID.' ';
            // Delete droplet
            $database->query($sql);
if(!$database->is_error()) {
echo '<p>Eintrag gel&ouml;scht.</p>';
}
}
}

Selbst das klappt schon nicht (es kommt keine Fehlermeldung, aber der ausgewählte Eintrag wird nicht gelöscht), an das Umschreiben der beiden anderen Varianten (Einfügen oder ändern) war gleich gar nicht zu denken.  :cry:
Der Eintrag „ID“ in der Tabelle „mailscript“ wird übrigens wirklich groß geschrieben, dürfte daher nicht die Fehlerursche sein (s.o. Zeile 4).

Außerdem geht auch - wie ich erst gestern bemerkte - die Forumsuche seit dem WB-Update auf SP7 nicht mehr, was viel schlimmer ist, weswegen ich erst einmal dort versucht habe, die Ursache zu finden.  :|

Falls jemand den Fehler entdecken kann, wäre ich sehr dankbar.

Gruß, GKS
WB Version 2.8.3+SP7 (r1646)
PHP5.4.45
SQL Server: 5.5.49-log ( NON STRICT )

Offline gks

  • Posts: 44
  • Gender: Male
Re: Frage zum Umstieg auf mysqli
« Reply #4 on: August 20, 2016, 06:01:53 PM »
So, das Problem mit der Suche hat sich erledigt. Leider kann ich den vorherigen Beitrag nicht mehr ändern, gemeint war die Suche auf der Webseite, die nicht mehr funktionierte, und keine Forumsuche, sorry.

Nach einer Suche hier im Forum fand ich diesen Beitrag:
http://forum.WebsiteBaker.org/index.php/topic,28948.msg203079.html#msg203079
Also unter Optionen „URL Umleitung zur Homepage“ ausgeschaltet, und nun geht die Suche wieder. Endlich mal ein Lichtblick   :-)

Das Problem, für welches ich den Thread eröffnet habe besteht leider immer noch, s.o.

Gruß und „Danke!“ für Euer Interesse.
GKS

« Last Edit: August 20, 2016, 06:09:48 PM by gks »
WB Version 2.8.3+SP7 (r1646)
PHP5.4.45
SQL Server: 5.5.49-log ( NON STRICT )

Offline jacobi22

  • Posts: 5842
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Frage zum Umstieg auf mysqli
« Reply #5 on: August 20, 2016, 11:56:05 PM »
mach dir mal oberhalb deines Scripts diesen Code rein

Code: [Select]
<?php
echo "<pre>";
print_r$_POST );
echo 
"</pre>";
echo 
"<pre>";
print_r$_GET);
echo 
"</pre>";
?>

Als Resultat bekommst du auf der Seite eine Ausgabe des übermittelten POST-Array's. Zur Sicherheit habe ich den GET-Array auch noch mit rein geschrieben. Sind in beiden Array's Werte drin, die du unten verarbeiten möchtest, weißt du, wo was Problem liegt.
Die ID solltest du in die erste Zeile der if-Abfrage mit einschließen, damit er den Teil nicht durchrattert, wenn mal nichts ankommt .

Um mögliche Datenbank-Fehler sehen zu können, ändere den Teil mit dem is_error bitte so
Code: [Select]
<?php
if(!$database->is_error()) {
    echo 
'<p>Eintrag gel&ouml;scht.</p>';
}else{
    
$admin->print_error($database->get_error());
}

wobei mir einfällt: läuft das ganze Script denn überhaupt über das WB-System???
Diese Abfragen mit der $database laufen nur, wenn es einmal (wie ein Modul) durch den Core läuft, also die üblichen WB-Methoden benutzt, z.b. Einbindung class.admin.php usw

Ist es ein eigenständiges Script, das Stand-Alone läuft, ist alles oben genannte natürlich Quatsch
  :oops:

P.S. solltest du nicht klar kommen, schick mir den Kram mal inklusive min. einem Datensatz von jeder benutzten DB-Tabelle
« Last Edit: August 21, 2016, 12:07:43 AM by jacobi22 »
Probleme sind da, um sie zu lösen, nicht, um nach Ausreden zu suchen.

Offline gks

  • Posts: 44
  • Gender: Male
Re: Frage zum Umstieg auf mysqli
« Reply #6 on: August 21, 2016, 12:52:35 PM »
Erst einmal vielen Dank für die Tipps!

Habe den oberen Code eingetragen, dabei zeigte sich, dass er die ID irgendwie nicht übergibt:
Code: [Select]
rray
(
    [id] =>
    [ok] => Löschen
)

Array
(
    [act] => rm
)
Daran könnte es liegen.

Zu der Frage
Quote
Läuft das ganze Script denn überhaupt über das WB-System???
kann ich nur sagen, dass auf der Seite auch der aktuelle Datensatz ausgelesen und in Tabellenform angezeigt wird. Das funktionert, weswegen ich davon ausgehe, dass es über das WB-System läuft.

Wahrscheinlich habe ich schon an der Stelle einen Fehler, wo u.a. die ID ausgelesen wird einen/den Fehler drin:
alter Code (andere Stelle, die soll das Formular erzeugen):
Code: [Select]
echo '<p><form action="?act=rm" method="post">
        <select name="id">';
        $query = mysql_query("SELECT ID,mail FROM mailscript");
        while( $assoc = mysql_fetch_assoc($query) ){
                echo '<option value="'.$assoc['ID'].'">'.$assoc['mail'].'</option>';
                }
        echo '</select><br><input type="submit" value="Löschen" name="ok">
        </form></p>';

mein neuer Code
Code: [Select]
echo '<p><form action="?act=rm" method="post">
        <select name="id">';
        $result_mailscript = 'SELECT `ID` `mail` FROM `mailscript`';
        $oMailscript = $database->query($result_mailscript);
        while ($aMailscript = $oMailscript->fetchRow(MYSQLI_ASSOC)){
                echo '<option value="'.$aMailscript['ID'].'">'.$aMailscript['mail'].'</option>';
                }
        echo '</select><br><input type="submit" value="Löschen" name="ok">
        </form></p>';

Das SELECT muss irgendwie falsch sein, denn in der Auswahlbox erscheint nur die ausgelesene ID, nicht aber die Mailadresse, die sollte eigentlich noch dahinter stehen.

Ich hoffe, du kannst damit etwas anfangen.
Gruss uund wiedermal Danke! GKS

PS: Ich hatte dir schon einmal Zugang zur Seite gegeben und hätte kein Problem damit, das wieder zu tun. Ich glaub sonst geht das scheibchenweise hin und her und ist viel umständlicher.
WB Version 2.8.3+SP7 (r1646)
PHP5.4.45
SQL Server: 5.5.49-log ( NON STRICT )

Offline jacobi22

  • Posts: 5842
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Frage zum Umstieg auf mysqli
« Reply #7 on: August 21, 2016, 01:12:03 PM »
hier fehlt ein Komma

Quote
$result_mailscript = 'SELECT `ID`, `mail` FROM `mailscript`';

Quote
PS: Ich hatte dir schon einmal Zugang zur Seite gegeben
bin nicht sicher, ob ich da weit mit komme. Man bräuchte die Datenbankstruktir dieser Tabelle oder deine Garantie, das Tabelle und Felder genau so heißen (Groß-/Kleinschrift usw)

Nur allgemein: vermeide, Umlaute im Code in "Reinschrift" einzusetzen. Hier eine Liste, der wichtigsten Entities im deutschen Sprachraum -> https://wiki.selfhtml.org/wiki/Referenz:HTML/Zeichenreferenz
Probleme sind da, um sie zu lösen, nicht, um nach Ausreden zu suchen.

Offline gks

  • Posts: 44
  • Gender: Male
Re: Frage zum Umstieg auf mysqli
« Reply #8 on: August 21, 2016, 01:14:06 PM »
Hallo jacobi22, das hatte ich mit und ohne komma probiert, beides wollte nicht.

Nun habe ich die oben erwähnte Select-Zeile geändert, auf
Code: [Select]
$result_mailscript = 'SELECT * FROM `mailscript`';
Nun werden beide Variablen übergeben:
Code: [Select]
Array
(
    [id] => 39
    [ok] => Löschen
)

Array
(
    [act] => rm
)
allerdings wurde nichts (hier hätte es der Eintrag mit der ID 39 sein sollen) gelöscht.

Füge ich das hier an:
Code: [Select]
}else{
    $admin->print_error($database->get_error());
}
wird die Seite nicht vollständig angezeigt.

Gruß, GKS
PS: Wie macht man das syntax-Highlighting hier? Ist ja deutlich besser lesbar.
WB Version 2.8.3+SP7 (r1646)
PHP5.4.45
SQL Server: 5.5.49-log ( NON STRICT )

Offline jacobi22

  • Posts: 5842
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Frage zum Umstieg auf mysqli
« Reply #9 on: August 21, 2016, 01:17:52 PM »
Quote
PS: Wie macht man das syntax-Highlighting hier? Ist ja deutlich besser lesbar.

einfach in die erste Zeile eines Code-Block, den man einfügt, ein <?php rein setzen
Probleme sind da, um sie zu lösen, nicht, um nach Ausreden zu suchen.

Offline jacobi22

  • Posts: 5842
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Frage zum Umstieg auf mysqli
« Reply #10 on: August 21, 2016, 01:19:04 PM »
P.S.: ich warte auf die PN mit den Zugangsdaten  ;-)
Probleme sind da, um sie zu lösen, nicht, um nach Ausreden zu suchen.

Offline jacobi22

  • Posts: 5842
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Frage zum Umstieg auf mysqli
« Reply #11 on: August 21, 2016, 06:12:13 PM »
die Auflösung: Ursache waren die kleinen Anweisungen im Formular wie hier
Quote
echo '<p><form action="?act=rm" method="post">
diese werden per GET übertragen, der Rest kommt dann per POST, damit stimmten aber obige Abfragen nicht   :oops:

Ist alles repariert und läuft nun
Probleme sind da, um sie zu lösen, nicht, um nach Ausreden zu suchen.