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. |
 |

05-08-2012, 11:52
|
Blackbenji
Registrierter Benutzer
|
|
Registriert seit: Aug 2012
Beiträge: 7
|
|
Problem bei der Durchsuchung eines Strings
Hallo zusammen,
aus der Datenbank hole ich folgenden Wert:
Nun wollte ich mittels: PHP: strpos - Manual das Ergebnis durchsuchen lassen, ob ein mein Wert enthalten ist:
PHP-Code:
$meinString = '1,2,3,78,11,17'; $findMich = '1'; $pos = strpos($meinString, $findMich);
if ($pos === false) { echo "Der String '$findMich' wurde nicht im String '$meinString' gefunden"; } else { echo "Der String '$findMich' wurde im String '$meinString' gefunden"; echo " und befindet sich an Position $pos"; }
Als ergebnis erhalte ich aber:
Code:
Der String '1' wurde im String '1,2,3,78,11,17' gefunden und befindet sich an Position 0
ich nehme an, er findet jede 1, also auch 11 und 17.
gibt es eine möglichkeit eindeutig zu eritteln, ob meine zahl enthalten ist?
danke schonmal und einen schönen sonntag
|

05-08-2012, 12:07
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.611
|
|
Das Problem sind schon die Daten in der Datenbank. Kommaseparierte Werte haben in der Datenbank nichts verloren. Du solltest dein Datenbankdesign reparieren.
|

05-08-2012, 12:15
|
Blackbenji
Registrierter Benutzer
|
|
Registriert seit: Aug 2012
Beiträge: 7
|
|
mein gedanke war der:
ich habe eine kategorie-tabelle mit den folgenden werten:
id | name
1 | google
2 | heise
3 | intern
usw.
nun schreibe ich in meine content tabelle einen eintrag ala
id | headline | datetime | content | categorys
1 | testeintrag | 2012-08-06 11:13 | blabla | 1,3
1,3 sind dabei die ids, der kategorien aus der anderen tabelle.
wenn mein vorgehen falsch ist, kann mir jemand sagen, wie es richtig wäre? es sollte aber erhalten bleiben, dass man den wert von 1 aus kategorie tabelle anpassen kann, den namen in die content tabelle zu schreiben macht also keinen sinn.
|

05-08-2012, 12:23
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.611
|
|
Du brauchst noch eine Tabelle content_category mit den Spalten content_id und category_id. Du hättest dann zwei Datensätze:
content_id | category_id
1 | 1
1 | 3
|

05-08-2012, 12:24
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Warum ignorierst du meine Links?
Das ist eine klassische "N:M Relation"
Googel wird dich mit Ergebnissen erschlagen.
|

05-08-2012, 13:26
|
Blackbenji
Registrierter Benutzer
|
|
Registriert seit: Aug 2012
Beiträge: 7
|
|
@combie: ich ignoriere deine links nicht, mein problem ist nur, das ich kein großer theoretiker bin, sondern gerne mit praxisnahen beispielen arbeite.
ich werde mich bei zeiten schlau machen.
@h3ll: danke, ich habe das versucht nun umzusetzen:
die sql habe ich erstellt. mittels:
PHP-Code:
public function categoryFetchData($id) { $category_array = ""; $db_result = $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_CATEGORY_CONTENT_DB." WHERE content_id = '".$id."' "); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $category_name_sql = $this->database->runSQLQuery("SELECT category_name FROM ".GLOBAL_CATEGORY_DB." WHERE id = '".$row['category_id']."' "); $category_name = mysql_fetch_array($category_name_sql, MYSQL_ASSOC); $category_array[] = array( 'id' => $id, 'content_id' => $row['content_id'], 'category_name' => $category_name['category_name'], ); } return $category_array; }
bekomme ich nun die benötigten informationen.
jetzt stehe ich vor einem neuen problemen.
die ganze abfrage ist an ein template gebunden.
mein problem ist nun, wie kombiniere ich die abfrage des contents, welches ein array erzeugt, mit dem array, welches ich von den categorys zurück erhalte?
PHP-Code:
public function fetchContenData($id = false) { $content_array = array();
$db_result = $this->database->runSQLQuery(" SELECT *, DATE_FORMAT(date, '%d.%m.%Y') AS date_format, DATE_FORMAT(date, '%H:%i:%s') AS time_format FROM ".GLOBAL_CONTENT_DB." ".($id !== false ? ' WHERE id = ' . $id : '')." ORDER by date DESC"); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $comments_count = mysql_num_rows($this->database->runSQLQuery("SELECT * FROM ".GLOBAL_COMMENTS_DB." WHERE id_content LIKE '".$row['id']."' AND state = '1' ")); $state_name = $this->state->Pull_State_Name($row['state']); $author_name = $this->user->Pull_Author_Name($row['id_author']); $content_array[] = array( 'id' => $row['id'], 'author_name' => $author_name, 'headline' => $row['headline'], 'date' => $row['date_format'], 'time' => $row['time_format'], 'content' => $row['content'], 'state' => $row['state'], 'state_name' => $state_name, 'comments' => $comments_count, ); } return $content_array; }
das template dazu:
HTML-Code:
<div id="content">
<div id="testimonials">
<? for($x=0; $x<count($TPL['content_array']); $x++): ?>
<? if($TPL['content_array'][$x]['state'] > "0") { ?>
<h3><?=$TPL['content_array'][$x]['headline']?></h3>
<div class="testimonial">
<p>
<em><?=$TPL['content_array'][$x]['date']?> <?=$TPL['content_array'][$x]['time']?> | Author: <?=$TPL['content_array'][$x]['author_name']?></em><br />
<span class="author"><?=nl2br($this->linker->Change_Links($TPL['content_array'][$x]['content']))?></span>
<br />
<em>Kommentare: <a href="?nav=comments&id=<?=$TPL['content_array'][$x]['id']?>"> <?=$TPL['content_array'][$x]['comments']?> </a></em><br />
Tags: <br />
</p>
</div>
<? } ?>
<? endfor; ?>
</div>
</div>
|

05-08-2012, 14:24
|
 |
steffomia
Registrierter Benutzer
|
|
Registriert seit: Aug 2012
Beiträge: 40
|
|
Verstehe ich das Richtig?
Du willst die Spalten von der Content ID haben UND die Spalten von der Category ID, UND das ganze möglichst zusammen passend in jeweils einer Zeile?
Also:
ContentId, Content Spalten... CategoryId, Category Spalten...
in einer Zeile
__________________
Wer keine Arbeit hat, der macht sich welche
XAMPP + NetBeans + XDebug(Xampp included) + SVN == FUN
|

05-08-2012, 14:29
|
Blackbenji
Registrierter Benutzer
|
|
Registriert seit: Aug 2012
Beiträge: 7
|
|
mein projekt ist ein cms. eine art blog.
ich wollte nun zu meinen cms-einträgen entsprechende kategorien zum filtern anlegen. und diese meinen content-einträgen zuweisen.
mein problem konnte ich im template wie folgt lösen:
PHP-Code:
Kategorien: <? foreach($TPL['content_array'][$x]['category'] as $t)echo " ".$t['category_name'];?>
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|