php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 27-06-2007, 15:35
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard query, ausgabe und variablen

Hallo,

ich habe zwei Fragen. Ich sitze gerade dabei ein Newssystem zu programmieren, bin aba blutiger Anfäger, aber lernbereit.

1. ich schreibe newskategorien und themen in die gleiche tabelle _news, unterscheide dabei nur mit art(int(1)) ob kategorie oder newstitel. ich weiß das es anders leichter ginge, aber ich will das eben auch aus lernzwecken so probieren. die direkte ausgabe mit echo(""); ist kein problem, zuerst werden mir die kategorien gemäß kriterien angezeigt, dann die newstitel der jeweiligen kategorie (Beides in einer Schleife). nun will ich aber beides gerne mit einer Variable ansprechen und im Dokument dort platzieren, wo es mir beliebt. da aber streikt mein vorhaben.

2. ich möchte gerne commentautoren in ein der tabelle _news schreiben, damit man die bisherigen kommentatoren extra auflisten kann (zusätzlich werden natürlich datensätze bei _comments angelegt). zwar geht auch das leichter, ist mir bekannt, aber auch hier der lerneffekt. im prinzip müsste man die autorenid der benutzertabelle in ein feld mittels kommatrennung einfügen können, danach bei der ausgabe wieder auseinander nehmen können, um daraus dann die benutzertabelle durchsuchen zu können

bspw:

UPDATE news SET autoren=autoren,".$neueid" WHERE [...]

(Der query muss höchstwahrscheinlich angepasst werden wie ich meine)

und ausgabe dann irgendwie den inhalt von news.autoren (bspw. 2,5,12,18,22 - alles benutzerid'S) wieder zerlegen in einzelne zahlen.

sind meine vorhaben irgendwie machbar? oda habe ich nen denkfehler?
Mit Zitat antworten
  #2 (permalink)  
Alt 27-06-2007, 16:08
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard Re: query, ausgabe und variablen

Zitat:
Original geschrieben von .raDDadil
1. ich schreibe newskategorien und themen in die gleiche tabelle _news, unterscheide dabei nur mit art(int(1)) ob kategorie oder newstitel. ich weiß das es anders leichter ginge, aber ich will das eben auch aus lernzwecken so probieren.
Also zu Lernzwecken erst mal den ungünstigeren - man könnte auch sagen, falschen - Weg gehen ...?
Zitat:
die direkte ausgabe mit echo(""); ist kein problem, zuerst werden mir die kategorien gemäß kriterien angezeigt, dann die newstitel der jeweiligen kategorie (Beides in einer Schleife). nun will ich aber beides gerne mit einer Variable ansprechen und im Dokument dort platzieren, wo es mir beliebt. da aber streikt mein vorhaben.
Wo liegt das Problem?

Statt direkt mit echo rauszupusten, hängst du den jeweiligen Eintrag an eine String-Variable an.

Zitat:
2. ich möchte gerne commentautoren in ein der tabelle _news schreiben, damit man die bisherigen kommentatoren extra auflisten kann (zusätzlich werden natürlich datensätze bei _comments angelegt). zwar geht auch das leichter, ist mir bekannt, aber auch hier der lerneffekt. im prinzip müsste man die autorenid der benutzertabelle in ein feld mittels kommatrennung einfügen können, danach bei der ausgabe wieder auseinander nehmen können, um daraus dann die benutzertabelle durchsuchen zu können
Also schon wieder zu "Lernzwecken" einen blödsinnigen Ansatz verfolgen ...?

Mein Rat: Lass den Quark.

Beschäftige dich gleich von Anfang an mit vernünfitger Normalisierung.
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 27-06-2007, 16:30
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hallo, ich werde deine ratschläge mit sicherheit befolgen. und doch bin ich ein typ, der gerne auch komplexe dinge verstehen möchte, um lernen zu können.

zu 1:
leider ist dem nicht so, wenn ich das mache, werden mir von den newstitle's nur jeweils ein eintrag der jeweiligen kategorie angezeigt.

folgender aufbau:

query kategorie
fetch kategorie
while
{
query newstitel
fetch newstitel
while
{
newstitel
}
kategorie
}

habe ich hier einen denkfehler?

zu 2:

wie sähe aber denn mein beispiel aus, um das zu begreifen?

vielen dank bisher
Mit Zitat antworten
  #4 (permalink)  
Alt 27-06-2007, 17:28
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
query kategorie
fetch kategorie
while
{
query newstitel
fetch newstitel
while
{
newstitel
}
kategorie
}
Was ?

Poste doch lieber deinen richtigen Quelltext. Gerne in [PHP]-Tags, aufs Wesentliche gekürzt und ohne Überbreite.

Zu deinen Tabellen: Beschäftige dich mal mit dem Stichwort "Normalisierung". Auch, wie man die Tabellen richtig aufbaut, was man in welche schreibt usw. muss man erst lernen. Daher ist es schon sinnvoller, es beim Lernen gleich richtig zu machen.

Zu deinem Beispiel: Ich würde eine Tabelle für die Kommentatoren, eine für die News und eine mit Comments (Comment-id, Kommentator id, News id, Text, Zeitpunkt) machen.

Edit:
Zitat:
die autorenid der benutzertabelle in ein feld mittels kommatrennung einfügen können, danach bei der ausgabe wieder auseinander nehmen können, um daraus dann die benutzertabelle durchsuchen zu können
Wenn du das Zerlegen von Strings üben möchtest, dann such dir lieber ein anderes Beispiel. Das was du da beschreibst, ist sicher kein guter Stil und anders viel besser zu lösen, das ist mit dem Lerneffekt nicht zu rechtfertigen.
__________________
ich glaube

Geändert von ministry (27-06-2007 um 17:32 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 27-06-2007, 17:28
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von .raDDadil
zu 1:
leider ist dem nicht so, wenn ich das mache, werden mir von den newstitle's nur jeweils ein eintrag der jeweiligen kategorie angezeigt.
Dann hast du in der Schleife vermutlich den jeweils aktuellen Wert nicht an eine Variable angehangen, sondern die Variable überschrieben.
Zitat:
zu 2:

wie sähe aber denn mein beispiel aus, um das zu begreifen?
Dazu müsste erst mal eine Problembeschreibung kommen, die man "begreifen" kann. Bei dem, was du ursprünglich als zweite Frage gepostet hast, gelang mir das mit vertretbar erscheinender Anstrengung leider nicht.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #6 (permalink)  
Alt 27-06-2007, 17:49
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

vielen dank vorab für die antworten.

zu 2: wie kann ich z.b. folgenden string zerlegen:

PHP-Code:
$string_inhalt $fetch['feld_einer_tabelle_mit_zahlen_von_kommata_getrennt'];
$string $string_inhalt// < diesen hier 
und zwar so, das nach jedem Komma mir eine Zahl zur Verfügung steht die ich weiter verarbeiten kann, die nach den Kommas eingetragen wurde. bspw. sieht der inhalt des felds so aus:

Code:
1,3,7,17,18,22,87
also, es soll auch die tatsächliche zahl erhalten bleiben, nicht das, 87 sich z.b. in einmal 7 und einmal 8 zerlegt, sondern wirklich 87 daraus macht.

zu 1:

PHP-Code:
$query mysql_query("SELECT * FROM inhalt WHERE art='1'");
while(
$fetch mysql_fetch_array($query)
{
$query_sub mysql_query("SELECT * FROM inhalt WHERE art='2' AND artid='".$fetch['id']."'");
while(
$fetch_sub mysql_fetch_array($query_sub)
{
echo(
"[...]sub[...]");
}
echo(
"[...]main[...]");

aus der gleichen tabelle sollen sowohl kategorien als auch news der kategorien ausgelesen werden. art=1 ist die kategorie, und zu dieser kategorie sollen dann in der zweiten schleife die news ausgesucht werden. mit echo klappt das anstandslos, in eine variable packen kann ich das jedoch nicht, da ich dann jeweils nur ein ergebnis der jeweiligen kategorie geliefert bekomme. nehmen wir an, ich habe drei kategorien und darunter teilen sich etwas 30 news / inhalte auf. und nochmal, ich weiß das es leichter und besser geht, ich versuche diesen weg zu lösen, um auch komplexe operationen verstehen zu können.
Mit Zitat antworten
  #7 (permalink)  
Alt 27-06-2007, 17:58
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zu 1.: explode()
Wie gesagt, das ist keine praktikable Lösung! Sobald du versuchst, mehr als einen Wert in ein Feld zu speichern, ist was an deinem db-design faul. Das String-Zerlegen kannst du mit anderen Sachen üben wenn es darum geht.


Zu 2: Das ist auch nicht ideal. Querys in Schleifen werden schnell zum Performancekiller. Und unterschiedliche Sachen gehören in verschiedene Tabellen.

Selektiere
Alles von News
LEFT JOIN kategorien
Ordne nach Kategorien.

Dann hast du eine Schleife mit allen News und den Kategorien dazu. Sobald sich die Kategorie ändert, bist du in der nächsten und kannst die Kategorieüberschrift ausgeben, ansonsten nur die News. Das nennt man Gruppenwechsel.
__________________
ich glaube
Mit Zitat antworten
  #8 (permalink)  
Alt 27-06-2007, 18:11
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von ministry
Zu 1.: explode()
Wie gesagt, das ist keine praktikable Lösung! Sobald du versuchst, mehr als einen Wert in ein Feld zu speichern, ist was an deinem db-design faul. Das String-Zerlegen kannst du mit anderen Sachen üben wenn es darum geht.


Wenn ich nun bspw. folgendes mache:

PHP-Code:
$string explode(","," "$string); 
dann habe ich meine zahlen hübsch zerlegt. nun stellt sich mir aber die frage, wie ich diese zahlen nun in einen string (array?) packen kann, der dann einen wert in einer anderen tabelle prüft; wenn ein wert der zahlen übereinstimmt mit einem wert von wasweißich, dann soll man machen dürfen, wenn nicht, dann access_error (ich drücke mich sicherlich n00bisch aus, aber versucht mich zu verstehen )

Zitat:
Original geschrieben von ministry
Zu 2: Das ist auch nicht ideal. Querys in Schleifen werden schnell zum Performancekiller. Und unterschiedliche Sachen gehören in verschiedene Tabellen.

Selektiere
Alles von News
LEFT JOIN kategorien
Ordne nach Kategorien.

Dann hast du eine Schleife mit allen News und den Kategorien dazu. Sobald sich die Kategorie ändert, bist du in der nächsten und kannst die Kategorieüberschrift ausgeben, ansonsten nur die News. Das nennt man Gruppenwechsel.
Vielen Dank für diesen Hint, ich werde das versuchen was mit sicherheit auch funktionieren wird. damit ich nun begreife, wo liegt denn der fehler in meinem code? warum, auch wenn er nicht wirklich gut ist, stellt er nicht dar was er darstellen soll?
Mit Zitat antworten
  #9 (permalink)  
Alt 27-06-2007, 18:19
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zu 1:

Dann kannst du es auch gleich so lassen.
PHP-Code:
"SELECT bla FROM blub WHERE blub_id IN(" $deinstringmitdenkommata ")" 
Ansonsten gibt es analog zu explode auch implode() , wer hätte das gedacht.

Zu 2.:

Was du mit der Variable machst zeigst du ja nicht. Du kannst doch einfach einen String nehmen $ausgabe = ''; und überall in den beiden Schleifen anstatt Ausgabe mit echo hängst du die Daten mit $ausgabe .= ... dran.

Außerdem: - Wenn du sowieso nur die ID brauchst, dann selektiere auch nur die, und nicht "*"
- Zahlen sollen nicht in Anführungszeichen. MySQL ist schlau genug, trotzdem zu kapieren was du meinst, aber richtig ist es ohne.
__________________
ich glaube
Mit Zitat antworten
  #10 (permalink)  
Alt 27-06-2007, 18:24
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zu 1:

kann ich ja eben nicht

diese zahlenfolge ändert sich und bleibt nicht immer die gleiche. lediglich eine zahl des tabellen-feldes, wo um (sagen mir mal) einlass gebeten wird, soll verglichen werden mit einer zahl eines benutzer_feldes (wo durchaus auch mehrere drin stehen können). wenn eine zahl davon übereinstimmt, mit einer eingetragenen zahl von _benutzer, dann soll user drauf zugreifen können, andernfalls nicht.

zu 2:

die variablen platziere ich in templates

$main
$sub



ihr wisst nicht wie dankbar ich bin, und das sollt ihr nicht schleimend interpretieren. ich weiß sehr wohl das es mühsam sein kann zu unterstützen, auch wenn das gegenüber sich nicht sehr kooperativ im verständnis zeigt. danke.

EDIT

kann ich zu 1 das z.b. so machen?

PHP-Code:
$array = array($fetch['feld_mit_zahlen_getrennt_durch_kommas']);
$string explode(","," "$array); 
so das ich dann prüfen kann:

PHP-Code:
if(in_array($string))==$einzahlenwert)
{
ausführen
}
else
{
error

?

Geändert von .raDDadil (27-06-2007 um 18:33 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 27-06-2007, 18:39
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
diese zahlenfolge ändert sich und bleibt nicht immer die gleiche. lediglich eine zahl des tabellen-feldes, wo um (sagen mir mal) einlass gebeten wird, soll verglichen werden mit einer zahl eines benutzer_feldes (wo durchaus auch mehrere drin stehen können). wenn eine zahl davon übereinstimmt, mit einer eingetragenen zahl von _benutzer, dann soll user drauf zugreifen können, andernfalls nicht.
Sorry, bitte nochmal neu erklären. Kein Wort verstanden.

Zitat:
..kann ich das so machen?
$array = array($fetch['feld_mit_zahlen_getrennt_durch_kommas']);
$string = explode(","," ", $array);
Ne, wo hast du das denn her? Mal im manual bei explode geguckt?

PHP-Code:
$array explode(","$fetch['feld...']); 
Was soll dann ausgeführt werden?

Zu 2: Und? Problem liegt wo?
__________________
ich glaube
Mit Zitat antworten
  #12 (permalink)  
Alt 27-06-2007, 18:44
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zu 1:

wenn der inhalt meines feldes bspw. so aussieht:

Code:
1,4,33,92,5
und ich folgenden code anwende:

PHP-Code:
$array explode(","$fetch[feld]); 
Habe ich dann jede zahl einzeln in diesem array drin? so das ich damit weiterarbeiten kann? z.b. soll in einer newskategorie gruppenID's stehen, die news verfassen können (bsp. oben: 1,4,33,92,5) diese fünf gruppen dürften also news verfassen. nun aber soll ein userquery prüfen, welche gruppen user angehört. nachdem soll mittels if geprüft werden, ob gruppenid's übereinstimmen und dementsprechend einlass gewähren.

code für weiterverarbeitung dann so?

PHP-Code:
if(in_array($array))==$einzahlenwert)
{
ausführen
}
else
{
error

zu 2:

problem liegt daran, das die kateogiren ausgegeben werden, aber zu jeder kategorie nur ein eintrag von news, obwohl sich mehrere news in den jeweiligen kategorien befinden.
Mit Zitat antworten
  #13 (permalink)  
Alt 27-06-2007, 18:49
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zu 1.:

Probiers halt aus - mit var_dump($array) siehst du ja, was drinsteht. Und im manual steht es auch richtig drin.
Wie die Syntax von in_array lautet, wolltest du dir bei dieser Gelegenheit auch gleich noch angucken. Ein bisschen Hausaufgaben müssen ja sein, schließlich willst du das ja lernen

Zu 2.:

Dann zeig mal her was du da machst. Es wird wohl so sein wie schon Wahsaga vermutet hat, dass du den String immer überschreibst.
__________________
ich glaube
Mit Zitat antworten
  #14 (permalink)  
Alt 27-06-2007, 19:05
.raDDadil
 Newbie
Links : Onlinestatus : .raDDadil ist offline
Registriert seit: Jun 2007
Beiträge: 16
.raDDadil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zu 1:

begriffen habe ich nun, dank deiner hilfe, folgendes:

PHP-Code:
$arrayvari = array("1","4","33","92","5");

if(
in_array("7"$arrayvari))
    {
    echo(
"kk");
    }
    else
    {
    echo(
"kackb00n");
    } 
ausgabe "kackb00n" (Weiß ja jeder wer gemeint ist damit).

nun habe ich jedoch das problem meinen feldwert von 1,4,33,92,5 so zu formatieren, das er dann auch vom array genommen und verarbeitet wird. wenn ich den feldwert wie er ist in den array packe, streikt das script. auf der anderen seite muss ich aber die zahlen mit irgendwas trennen, damit die ziffern nicht verschnelzen (sind ja individuelle gruppenid's).

zu 2:

es ist haargenau (bis auf die daten) so wie hier im bsp.

PHP-Code:
$query mysql_query("SELECT * FROM inhalt WHERE art='1'");
while(
$fetch mysql_fetch_array($query)
{
$query_sub mysql_query("SELECT * FROM inhalt WHERE art='2' AND artid='".$fetch['id']."'");
while(
$fetch_sub mysql_fetch_array($query_sub)
{
eval(
$main[...]templatename_main);
}
eval(
$sub[...]templatename_sub);

die beiden varis werfe ich dann in das template main_index bspw.
Mit Zitat antworten
  #15 (permalink)  
Alt 27-06-2007, 19:10
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zu 1.:
Zitat:
begriffen habe ich nun...
Wundervoll

- Integers gehören immer noch nicht in Anführungszeichen...
- explode, wie schon erwähnt ?

Zu 2: Was soll denn jetzt eval da noch drin? Was ist denn das für eine Templateengine? Kannst du der keine Arrays übergeben?
__________________
ich glaube
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:39 Uhr.