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 (2) Themen-Optionen Bewertung: Bewertung: 15 Stimmen, 5,00 durchschnittlich.
  2 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 21-02-2012, 12:35
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard preg_match in while schleife

Hallo,

eine schleife liest mir einen content aus einer datenbank.
der string $content enthaelt bilder, welche ich mit preg_match innerhalb der schleife rausfilter im dritten argument speicher und dann mit einer foreach() zur ausgabe vorbereite.
das klappt soweit.
allerdings, in der ausgabe, welche innerhalb der schleife erfolgt, werden die aufbereiteten bilder der aktuellen schleife in die nächste while schleife mitgenommen und angezeigt, will sagen, die bilder des vorangegengenden schleifendurchlaufs summieren ich in der nächsten schleife, und zwar so:

schleife 0, content hat bild 1 $imagen_hyper in der ausgabe -> bild 1
schleife 1 , content hat bild 2 und 3 $imagen_hyper in der ausgabe -> bild 1, bild 2, bild 3


WARUM???

script:
PHP-Code:
...
$sql_hyper_news=mysql_query("SELECT
id, asunto, DATE_FORMAT(datum,'%d.%m.%Y') AS datum, content
FROM news ORDER BY datum"
);
echo 
mysql_error();
while(
$zeile_hyper_news=mysql_fetch_array($sql_hyper_news,MYSQL_BOTH))
{
preg_match('|<img src="/imagen/imagen_news/[^>]+>|',$zeile_hyper_news["content"],$treffer);
foreach(
$treffer AS $img_tag)
{
$imagen_hyper.= str_replace('>',' width=50px>',str_replace('src="/','src="../',$img_tag)).'&nbsp;';
}

echo
'
<strong>Modificar mensajes</strong><br><br>
<div style="
padding:5px;
border:solid 1px black;
margin-bottom:5px;
width:350px;
">
<strong>ID:</strong> '
.$zeile_hyper_news["id"].'<br>
<strong>Asunto:</strong> '
.$zeile_hyper_news["asunto"].'<br>
<strong>Escrito en:</strong> '
.$zeile_hyper_news["datum"].'<br>
<strong>Imagen/es:</strong><br>'
.$imagen_hyper.'<hr>
<div align="right"><a href="admin_news.php">
modificar</a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="">
eliminar</a></div></div>'
;
}} 
danke für jegliche hilfe
Mit Zitat antworten
  #2 (permalink)  
Alt 21-02-2012, 13:13
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Crossposting: preg_match in while schleife - php.de

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #3 (permalink)  
Alt 21-02-2012, 13:27
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard

wie schliesse ich das thema???
Mit Zitat antworten
  #4 (permalink)  
Alt 21-02-2012, 13:31
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn Du schon Crossposting machst, dann weiße darauf hin! Jeder hat ein Thema wo er nicht weiter kommt, oder das wichtig ist - durch öfteres posten in mehreren Bereichen wird das nicht besser!

Lass doch die entsprechenden Variablen in der Schleife ausgeben! Mach richtiges Debugging!

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #5 (permalink)  
Alt 21-02-2012, 14:13
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard

war ja nicht in verschiedenen bereichen, sondern auf verschiedenen foren, aber ich habs ja verstanden und entschuldige mich...
im allgemeinen, wenn ich ein problem habe, schau ich ja auch in verschiedene bücher oder frage unterschiedliche personen, das war mein ansatz, ok geht ja nun mal nicht, falsch gedacht...

wenn es dann doch möglich wäre, auf das eigentliche problem zurückzukommen,
also, wie ich dich verstehe, soll ich die geformte variable in der schleife ausgeben lassen. ich meine, ich mach das doch:

while-schleife sucht eintrag in der datenbank -> gefunden, $zeile_hyper_news -> in der while-schleife preg_match des gefundenen content ($zeile_hyper_news) -> variable gebildet ($imagen_hyper) und ausgegeben -> while durchlauf beendet und neu betreten...
das $imagen_hyper soll ja nur für die aktuelle while-schleife existieren und in der folgenden neu gebildet werden auf der grundlage der neuen $zeile_hyper_news...
auch das zurücksetzen der variablen $imagen_hyper mit unset() oder $imagen_hyper='' am ende der while-schleife gibt nicht das gewünschte ergebniss, da jetzt nur noch das erste match ausgegeben wird...

danke rammi
Mit Zitat antworten
  #6 (permalink)  
Alt 21-02-2012, 14:34
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Lass Dir doch die $treffer variable mal ausgeben und schau mal, was da alles drin steckt!

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #7 (permalink)  
Alt 21-02-2012, 15:31
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard

hab es jetzt ein weinig umgebaut, ohne wirkliches zufriedenstellendes ergebniss

PHP-Code:

while($zeile_hyper_news=mysql_fetch_array($sql_hyper_news,MYSQL_BOTH))
{
echo 
'<strong>ID:</strong>'.$zeile_hyper_news['id'].'<br>'.
'<strong>Fecha:</strong>'.$zeile_hyper_news['datum'].'<br>'.
'<strong>Asunto:</strong>'.$zeile_hyper_news['asunto'].'<br>';
preg_match('|<img src="/imagen/imagen_news/[^>]+>|',$zeile_hyper_news["content"],$treffer);
foreach(
$treffer AS $img_tag)
{
$img.=str_replace('>',' width=50px>',str_replace('src="/','src="../',$img_tag)).'&nbsp;';
{echo 
$img;}
}

echo 
'<hr>';
}} 

PHP-Code:
foreach($treffer AS $img_tag)
{echo 
$img_tag;} 
Ergebniss: jede schleife mit(!) bild zeigt korrekt 1. match

PHP-Code:
foreach($treffer AS $img_tag)
{
$img.=$img_tag;
echo 
$img;

Ergebniss: schleifen ohne Bild ($treffer) bleiben leer, Schleifen mit Bild ($treffer) werden mit dem alten $img ausgegeben...

-> 1. Schleife Content hat kein bild, $img leer
-> 2. Schleife Content hat 1 bild,
- error_reporting: Notice: Undefined variable: img in C:\xampp\htdocs\puertadelsol1\admin\admin_general.php on line 31
- $img zeigt bild

glaube hier wirds schon klar das problem, die erste foreach sagt das variable img nicht definiert ist...
woher kommt die den? die schleife wurde doch neu angefangen...
zweite foreach zeigt das bild, und dieses bild wird nun in den nächsten schleifen ausgegeben und der eigentliche match der aktuellen schleife in der ausgabe angehangen, allerdings nur bei schleifen mit einem match (sprich bild)...
es bleibt alles beim selben problem, die variable wird an die neue schleife übergeben, und wenn ich sie anuliere mit unset() oder $img='' wird nur noch das erste match ausgegeben

rammi
Mit Zitat antworten
  #8 (permalink)  
Alt 21-02-2012, 15:55
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
es bleibt alles beim selben problem, die variable wird an die neue schleife übergeben, und wenn ich sie anuliere mit unset() oder $img='' wird nur noch das erste match ausgegeben
ist ja auch logisch! Wenn das Problem nur bei Schleifendurchgängen ohne Bild ist, solltest Du das mit einem If Statement abgreifen/prüfen.

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #9 (permalink)  
Alt 21-02-2012, 16:08
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Moin,

Zitat:
Zitat von rammi22 Beitrag anzeigen
glaube hier wirds schon klar das problem, die erste foreach sagt das variable img nicht definiert ist...
woher kommt die den? die schleife wurde doch neu angefangen...
Ebentuell solltest Du Dich noch mal im PHP Manual umschauen und Dich über die Definition einer Variablen erkundigen. Hier mal ein kleines Beispiel, wie es sauber funktioniert.
PHP-Code:
$meineVariableIstEinString '';
foreach (
$datenContainer as $rowset) {
    
$meineVariableIstEinString .= $rowset['irgendEtwas'];

Dein Problem ist doch ganz offensichtlich. Zunächst definierst Du Deine Variable $img nicht außerhalb der Schleife. PHP weiß überhaupt nicht, woher diese Variable kommt und schmeißt somit eine Notice.

Darüber hinaus erweiterst Du in Deinem Code Deine $img Variable immer wieder um das neu gefundene Bild. Alte Daten werden nicht gelöscht. Nehme einfach mein obiges Beispiel und schau Dir das hier an:
PHP-Code:
foreach ($pdo->fetchAll(PDO::FETCH_ASSOC) as $row) {
    
$meineDaten '';
    foreach (
$verschatelteDaten as $daten) {
        
$meineDaten .= $daten;
    }

Du musst PHP schon sagen, dass Dein String, den Du ermitteln willst, immer wieder neu beginnen muss, wenn ein neues Rowset aus der Datenbank ausgelesen wird. Das machst Du nämlich nicht und deswegen hängt PHP alle neuen Strings an den bereits vorhandenen an.

Ein eigentlich einfaches Logikproblem.
__________________
MM Newmedia | MeinBlog

Geändert von ezkimo (21-02-2012 um 16:10 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 21-02-2012, 16:13
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Darüber hinaus solltest Du ebentuell Deine Datenbankstruktur überdenken. Bilder aus einem HTML Text zu suchen, der aus der Datenbank kommt, ist zwar machbar, aber nicht gerade Performance schonend. Normalisiere Deine Daten und speichere die Bilder eventuell schon vorher in einer separaten Datenbanktabelle. Das macht alles sehr viel einfacher.
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten
  #11 (permalink)  
Alt 21-02-2012, 16:24
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard

jetzt wirds unübersichtlich für mich...
was wäre logisch?

Zitat:
variable wird an die neue schleife übergeben
wenn ja warum, wenn sie doch erst im preg_match gebildet wird...

oder
Zitat:
wenn ich sie anuliere mit unset() oder $img='' wird nur noch das erste match ausgegeben
oder beides???
könnte auch sein, das ich den wald vor baumen nicht mehr sehe, meine sitze an diesem teil schon einige stunden...

im jeden fall versuchte ich
PHP-Code:
if(isset($treffer))
{foreach(
$treffer AS $img_tag
selbes fehlerhaftes ergebniss

PHP-Code:
foreach($treffer AS $img_tag)
{if(isset(
$img_tag)) 
selbes fehlerhaftes ergebniss

und egal ob ich unset() oder $img='' mit einbaue, alles provoziert dasselbe verhalten wie ohne if prüfung...

trotzdem danke für deine ratschläge
Mit Zitat antworten
  #12 (permalink)  
Alt 21-02-2012, 16:38
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Darüber hinaus solltest Du ebentuell Deine Datenbankstruktur überdenken. Bilder aus einem HTML Text zu suchen, der aus der Datenbank kommt, ist zwar machbar, aber nicht gerade Performance schonend. Normalisiere Deine Daten und speichere die Bilder eventuell schon vorher in einer separaten Datenbanktabelle. Das macht alles sehr viel einfacher.
ja, das könnte mir gefallen und alles vereinfachen. aber der content wird mit js über einem editor, welcher das upload von bildern erlaubt, aufbereitet , und der komplette html code in die db gespeichert.
jetzt will ich die möglichekeit geben, auf einer benutzeroberfläche den tabellen eintrag zu löschen und damit auch das bild aus der dem entsprechenden archiv zu tilden...
dafür brauch ich halt den pfad zum bild, deshalb versuche ich ihn aus dem string herrauszufiltern.
gut, das mal ein wenig worum es im allgemeinen geht, und jetzt werde ich mal schauen, wie und ob ich deine tipps für ein positives ergebniss umsetzen kann...
rammi
Mit Zitat antworten
  #13 (permalink)  
Alt 21-02-2012, 17:31
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Thumbs up problem gelöst...

nach schweren stunden des nichts verstehens, ist dann doch die Lösung aufgetaucht, ist auf einem Parralellboard und nachdem ich hier ja drauf hinmgewiesen wurde, weiss ich nicht ob ich den link dahin veröffentlichen darf, wenn es keine probleme verusracht, würde ich es gerne machen, damit nutzer von hier davon auch nutzen tragen können.

Danke an alle beteiligten

gruss rammi
Mit Zitat antworten
  #14 (permalink)  
Alt 21-02-2012, 17:50
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke nicht, dass jemand damit ein Problem hat (falls ich mich irre, bitte korrigieren!).

mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
Mit Zitat antworten
  #15 (permalink)  
Alt 21-02-2012, 18:05
rammi22
 Registrierter Benutzer
Links : Onlinestatus : rammi22 ist offline
Registriert seit: Feb 2012
Beiträge: 8
rammi22 befindet sich auf einem aufstrebenden Ast
Standard

na dann...
Lösung
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
preg_match, while schleife


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/102679-preg_match-in-while-schleife.html
Erstellt von For Type Datum
preg_match in while schleife - PHP Forum: phpforum.de This thread Refback 21-02-2012 13:26
preg_match in while schleife - PHP Forum: phpforum.de This thread Refback 21-02-2012 13:19

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Smarty: while in while schleife Rudelwolf PHP Developer Forum 7 23-07-2007 11:48
for schleife in While schleife andygyr PHP Developer Forum 3 15-07-2007 16:11
while schleife Toxico SQL / Datenbanken 9 29-11-2005 21:13
While-Schleife deschmiddi PHP Developer Forum 8 16-02-2004 16:47
problem mit while schleife in while schleife Benny-one PHP Developer Forum 6 09-07-2002 18:56

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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:21 Uhr.