Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP Funktion Mysql Hilfe
Dirk Offline
Software Archäologe

Beiträge: 14.738
Registriert seit: Jul 2008
Beitrag #11
RE: PHP Funktion Mysql Hilfe
Ich habe auch ein kleines nebenprojekt mit PHP und Mysql am laufen. Anfangs habe ich auch sehr viel in funktionen gekapselt, später weniger. Anfangs habe ich auch nur versucht alles in eine Seite mit Parameter zu Packen, später lieber eigene Seite mit viel Copy & Paste. Beides nicht einfach. Kein Ansatz scheint so richtig übersichtlich. Vor allem schafft man es nie so ganz Redudanzenfrei. Wenn man zu viele Ifs braucht oder zu viele Funktionen nimmt, ist das auch nicht übersichtlicher als riesige minimal unterschiedliche Varianten. PHP hat auch soviel organisch gewachsenes und viele Lösungsmöglichkeiten und fiesheiten.

ich kann nur sagen, das wenn ich funktionen schreibe, die meist größer mache. Eher so als komplette Sinnabschnitte. mysqli kenn ich nicht, aber die abfragen in sql sind weitestgehend bei allen die selben. Das heißt im idealfall muss man da nicht ran und die Datenbankart bleibt transparent.

30.03.2016 05:44
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
CHRiSNEW Offline
Internetblasensammler

Beiträge: 2.864
Registriert seit: Jul 2008
Beitrag #12
RE: PHP Funktion Mysql Hilfe
Bitte lesen und befolgen: http://www.phptherightway.com/

30.03.2016 06:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
winfreak Offline
アンゲシュテルタ

Beiträge: 10.499
Registriert seit: Aug 2008
Beitrag #13
RE: PHP Funktion Mysql Hilfe
Habe im Moment keine Zeit mir das genauer anzuschauen, aber wenn ich mal dazu komme Schau ich mal.

Ich würde erst mal empfehlen gleich auf PDO umzustellen.

@Der Doktor: es gibt fast immer nur schlechte Entwickler und keine schlechten sprachen (klar, manche Sprachen sind besser für manches als andere und jede Sprache hat so ihre Tücken und Murks, aber das ist noch mal was anderes). Gerade das aktuelle PHP ist doch sehr angenehm und gut nutzbar.

@Chrisnew: kannte ich selber noch nicht, danke. Hätte ich so was früher gehabt hätte mir das einiges erspart.

[Bild: winfreak_32972_14.png]
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2016 09:53 von winfreak.)
30.03.2016 09:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.219
Registriert seit: Jul 2008
Beitrag #14
RE: PHP Funktion Mysql Hilfe
Das erste Beispiel hat nicht funktioniert, da die doppelten Anführungszeichen nicht rekursiv Variablen ersetzen. "$html_code" gibt dir nur einen String, der den Inhalt der Variable $html_code enthält, aber nicht Platzhalter in diesem ersetzt. Einziger Hack an dieser Stelle wäre eval, von dem ich aber dringend abrate.

PHP-Code:
function global_query($string$html_code) {
    
//$resultset = mysql_query($string);
    //while ($field = mysql_fetch_object($resultset)) {
    // Platzhalter-Objekt an Stelle von DB-Ergebnis
    
$field = (object) array('name' => 'Test');
    if (eval(
"\$formatted = \"$html_code\";") !== FALSE) {
        return 
$formatted;
    }
    
//}
}
// Dollarzeichen muss auch hier escaped werden, da PHP sonst hier schon
// Variablenersetzung versucht
echo global_query("SELECT 1""<b>\$field->name</b>"); 

Nicht nur fällt dieser Code schon auseinander, wenn man Parameter nicht korrekt ausklammert (zudem müssen durch die doppelte Auswertung z. B. Anführungsstriche als \\\" geschrieben werden), sondern man müsste auch erheblichen Aufwand betreiben, um seinen Vorlage-String sauber zu bekommen, wenn dieser bereits zum Teil aus Benutzerinhalt besteht, da man ansonsten leicht Opfer des Äquivalents einer SQL-Injection wird, bei der beliebiger PHP-Code ausgeführt werden kann.
Außerdem hast du noch das Problem, dass deine Datenbank-Inhalte u. U. keine gültigen HTML-Textliterale sind (wenn sie z. B. spitze Klammern oder Entitäten enthalten).

CCITTグループ4またはZIP圧縮のモノクロ300dpiで最高の再現性
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2016 10:28 von DosAmp.)
30.03.2016 10:25
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #15
RE: PHP Funktion Mysql Hilfe
Korrektur, es muss heißen

Code:
function global_query_fetch_object($herewego) {
return mysql_fetch_object($herewego);
}


So funktioniert es.
Kann mir vielleicht noch jemand helfen eine Blätterfunktion einzubauen?

Code:
$result = global_query("SELECT name FROM bbxx".$installnumber."_boards WHERE id = '1'", custom);
while($field = global_query_fetch_object($result))
{  
print("
<table class='tableb'>
<tr>
<td width='100%'>$field->name</td>
</tr>
</table>
");
}


lg
Michael
30.03.2016 15:51
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #16
RE: PHP Funktion Mysql Hilfe
Hab den Rest vom Thread nicht gelesen, aber wenn du die SQL-Ergebnisliste einschränken willst, um Unterseiten zu kriegen, kannst du in der Query einfach LIMIT nutzen.
30.03.2016 15:57
Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #17
RE: PHP Funktion Mysql Hilfe
Ich will das man nach X ergebnissen umblättern muss auf die nächste seite.
Wie hier im Thread auch Seite 1, 2, 3, 4, 5 usw.

lg
Michael
30.03.2016 16:18
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #18
RE: PHP Funktion Mysql Hilfe
Und genau dafür kannst du LIMIT einsetzen in der Query.

Beispiel:
LIMIT 0, 10 -> Zeilen 0 bis 10
LIMIT 5, 5 -> Zeilen 5 bis 10

Als erster Parameter wird immer der Startwert gesetzt und als zweiter dann, wie viele von dort aus.
30.03.2016 16:30
Diese Nachricht in einer Antwort zitieren
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.219
Registriert seit: Jul 2008
Beitrag #19
RE: PHP Funktion Mysql Hilfe
Dabei ist es sinnvoll immer eine bestimmte Sortierung per ORDER BY zu bestimmen, damit die Reihenfolge der Ergebniszeilen vorhersagbar bleibt.

Das MyBB fragt zum Beispiel die Posts für die erste Seite dieses Threads wie folgt ab, wenn man 50 Posts pro Seite in den Benutzereinstellungen konfiguriert hat:
Code:
SELECT pid
FROM mybb_posts
WHERE tid = '14391'
AND visible = '1'
ORDER BY dateline
LIMIT 0, 50

dateline ist dabei das Datum des Posts. Deine Boards willst du vermutlich eher nach ID oder einem dafür bestimmten Sortierschlüssel sortieren.

CCITTグループ4またはZIP圧縮のモノクロ300dpiで最高の再現性
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2016 17:26 von DosAmp.)
30.03.2016 17:23
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Michael_ Offline
Bier aus Hawaii

Beiträge: 1.510
Registriert seit: Feb 2011
Beitrag #20
RE: PHP Funktion Mysql Hilfe
Hi,

okay dann weiß ich jetzt wie ich diesbezüglich den Query gestalten muss
aber wie muss der zugehörige PHP Code aussehen?

Kann mir jemand meinen Code mal dementsprechend anpassen?
Ich habe das noch nicht gemacht und würde mich daher sehr darüber freuen.

Code:
$threads = global_query("SELECT id, title, username, time FROM bbxx".$installnumber."_threads WHERE boardid = '5' ORDER BY time ASC LIMIT 0, 5", threads);
while($field = global_query_fetch_object($threads))
{  
print("
<table class='tableb'>
<tr>
<td width='80%'><a href='thread.php?id=$field->id'>$field->title</a></td>
<td width='20%'>Thread started by <b>$field->username</b>, $field->time</td>
</tr>
</table>
");
}


Außerdem habe ich hier eine kleine Funktion geschrieben um SQL Injections bei Get und Post Daten zu vermeiden:

Code:
function safe($guard) {
mysql_real_escape_string($guard);
}


Nun meinte man zu mir

Zitat:Bringt dir so gar nichts, denn damit werden nur Strings escaped.
Habe ich einen Integer Wert, dann geht dieser so durch.

Da brauchst du schon eine Funktion die dann auch noch unterscheidet ob es eine String oder Integer ist.

Ähm ja, ich habe keine Ahnung davon um ehrlich zu sein.
Kann mir einer diese Funktion so anpassen das es sicher ist? Nutze das so überall bei allen Querys.

lg
Michael
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2016 23:45 von Michael_.)
30.03.2016 23:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste