$arr = str_split($str,10);

René Weber

Legendäres Mitglied
Der Titel sagt es ja schon:

Ich verwende die Funktion "$arr = str_split($str,10);".

Auf meinem Compi funktioniert es, aber von meinem Provider erhalte ich:
"Fatal error: Call to undefined function: str_split()..."

Es ist ja bekannt, dass str_split() in PHP4.0 noch nicht vorhanden war und mein Hoster hat nur PHP 4.4.0.

Was nun? Ich habe bei SelfHTML reingeschaut, aber keine der Lösungen für 4.0-Verdammte scheint zu funktionieren.

Hat jemand unter den PHP Gurus eine Lösung?

Cheers (rather crying), René
 
So schwer ist das nun auch wieder nicht:

CODE // str_split for PHP < 5
if(!function_exists('str_split')) {
function str_split($str, $len = 1) {
if(strlen($str) < $len || $len < 1)
return false;
$ret = array();
while(strlen($str) > 0) {
$ret[] = substr($str, 0, $len);
$str = substr($str, $len);
}
return $ret;
}
}
 
Ciao David,

Merci für dein Feedback. Ich hatte die Lösung auch schon gesehen, aber nicht in Betracht gezogen. Dank deiner Antwort bin ich noch einmal über die Bücher (den Code) gegangen und es funktioniert. Herzlichen Dank.

Nur wegen der Vollständigkeit. Der komplete Ersatzcode ist:
CODE if(!function_exists('str_split')) {
function str_split($str, $len = 1) {
if(strlen($str) < $len || $len < 1)
return false;
$ret = array();
while(strlen($str) > 0) {
$ret[] = substr($str, 0, $len);
$str = substr($str, $len);
}
return $ret;
}
}
else
$arr = str_split($str,10);


Ich will ja in PHP5 das Rad nicht neu erfinden.

Merci und cheers, René
 
QUOTE (David T. @ Fr 15.9.2006, 9:54) In PHP 5 wird das Rad nicht neu erfunden. Siehe Manual zu function_exists().
Dein Code stimmt also nicht ganz.

Gruß,
David

Irgendwie seh ich nicht was du meinst...

Bis auf das "else", was wohl eher ein Flüchtigkeitsfehler war hätte ich nicht's dran auszusetzen.
 
QUOTE (Maik @ Fr 15.9.2006, 12:48)
QUOTE (David T. @ Fr 15.9.2006, 9:54) In PHP 5 wird das Rad nicht neu erfunden. Siehe Manual zu function_exists().
Dein Code stimmt also nicht ganz.

Gruß,
David

Irgendwie seh ich nicht was du meinst...

Bis auf das "else", was wohl eher ein Flüchtigkeitsfehler war hätte ich nicht's dran auszusetzen.

Genau das hab ich gemeint. Sorry falls das nach "dein Code ist schlecht" oder Ähnlichem geklungen hat. Es ist natürlich nur das else, was nicht passt, und so ein Fehler passiert halt manchmal.

Gruß,
David
 
Hey keep cool.
David's Antwort hat mich auf die Lösung gebracht. Herzlichen Dank.

In der Zwischenzeit hat mein Hoster auf PHP-5 aufgerüstet (keine 2 Stunden nach meinem Telefonanruf!).

Jetzt habe ich aber doch noch ein Problem. Auf meinem lokalen WAMp-Server funktioniert alles bestens, aber auf dem Remote Host erhalte ich folgende Fehler:

1) mysql_fetch_array(): supplied argument is not a valid MySQL result resource
2) mysql_num_rows(): supplied argument is not a valid MySQL result resource
3) mysql_num_fields(): supplied argument is not a valid MySQL result resource
4) mysql_free_result(): supplied argument is not a valid MySQL result resource

Die entsprechenden Codezeilen sind:
CODE
$sql = "SELECT * FROM schueler WHERE id = '".$_REQUEST['id']."'";
$inquiry = mysql_query($sql);
$daten = mysql_fetch_array($inquiry);


und

CODE
$sql = "SELECT * FROM schueler WHERE id = '".$_REQUEST['id']."'";
$resultat = mysql_query($sql);
$person = mysql_fetch_array($resultat);
$nb_lines = mysql_num_rows($resultat);
$nb_colonnes = mysql_num_fields($resultat);




Cheers, René
 
Die Hinweise deuten darauf hin, dass der Select keine Ergebnisse geliefert hat. Also einfach mal überprüfen, was die Tabelle für Inhalte hat. Kann auch sein, dass die Connection zur Datenbank nicht zustande kam. Das müsste man dann genauer untersuchen.

Noch was: schicke nicht die REQUEST-Variablen direkt per mysql-query... die musst du auf jedenfall er überprüfen bzw. escapen... zB. mit mysql_escape_string
 
QUOTE (Maik @ Fr 15.9.2006, 15:15)Die Hinweise deuten darauf hin, dass der Select keine Ergebnisse geliefert hat. Also einfach mal überprüfen, was die Tabelle für Inhalte hat. Kann auch sein, dass die Connection zur Datenbank nicht zustande kam. Das müsste man dann genauer untersuchen.

Wenn ein SELECT keine Ergebnisse zurückgibt, dann gibt mysql_fetch_* meines Wissens nur false zurück und löst keinen Fehler aus. Bin mir aber nicht ganz sicher...


CODE // Entweder so...
$result = mysql_query(...) or trigger_error('mySQL-Error: ' . mysql_error(), E_USER_WARNING); // Soll das Script angehalten werden, E_USER_ERROR statt E_USER_WARNING verwenden

// ...oder auch mit if-Abfrage
$result = mysql_query($sql);
if(!$result) {
$template->assign('errorMsg', mysql_error());
$template->assign('errorQuery', $sql);
$template->display('mySQL_error.tpl');
die();
}
 
@edit: sorry hat mein vorposter schon beantwortet
wink.gif
.. nimm sein code
tongue.gif


QUOTE
Wenn ein SELECT keine Ergebnisse zurückgibt, dann gibt mysql_fetch_* meines Wissens nur false zurück und löst keinen Fehler aus. Bin mir aber nicht ganz sicher...


Ja das ist so!


Um eine genauere Fehlermeldung zu bekommen, folgendes machen:


CODE
mysql_query( $sql ) or die( 'MySQL-Fehler in Datei '.__FILE__.' auf Zeile '.__LINE__.':'.mysql_error() );

 
Nope, die Daten werden sauber ausgelesen. Das heisst ich kann den Inhalt von "daten" und "person" anzeigen. Also liegt's wo anders...

Was macht das Script? Im ersten Arbeitsgang zeigt es die Daten in einer Maske an.
In der Maske kann man Aenderungen vornehmen und dann senden.

Erst jetzt klemmt das ganze Ding.

Das Script 247 Linien. Soll ich es mal posten?

Cheers, René

 
QUOTE Nope, die Daten werden sauber ausgelesen. Das heisst ich kann den Inhalt von "daten" und "person" anzeigen. Also liegt's wo anders...

Glaube nicht, dass es an etwas anderem liegen kann, schließlich meldet mysql ja einen Fehler. Es könnte sich höchstens um einen anderen Query als dem von Dir herausgesuchten handeln. Stimmen Zeilennummer UND Dateiname? (Ja, is mir schon mal passiert dass ich nen Fehler ewig gesucht habe bis ich bemerkt hab dass es die falsche Datei war
laugh.gif
)


QUOTE Das Script 247 Linien. Soll ich es mal posten?

Am besten du verwendest einen Pastebin-Service, z.B. pastebin.com.


Gruß,
David
 
das mit dem Fetch stimmt....habe das wohl verwechselt mit dem Fall, wenn die Tabelle nicht existiert. Übrigens ist die Meldung kein Fehler sondern eine Warnung, daher macht das Script einfach so weiter.

Es kann für die Meldung noch unzählige andere Möglichkeiten geben, wie gesagt, wenn die Tabelle nicht existiert kommt sie. Wenn ein Benutzer für eine Tabelle/Datenbank keine Rechte hat kommt sie. Wenn man mehrere Datenbanken verwendet und vergißt die Datenbanken in der Query anzugeben und man vorher kein USE gemacht hat.

Was auch sein kann in deinem Fall: Die REQUEST-Variable enthält quotes, und da du nicht escapest, gelangen die direkt an mysql...
 
QUOTE Noch was: schicke nicht die REQUEST-Variablen direkt per mysql-query... die musst du auf jedenfall er überprüfen bzw. escapen... zB. mit mysql_escape_string


Das war die Lösung. Besten Dank Maik.

Im Hntergrund: Der Record-ID hat irgendwo einen ' verpasst bekommen und so wurde aus ID=10 ein ID=10'. Da hat MySQL gebockt.

Cheers, René
biggrin.gif
biggrin.gif
biggrin.gif


 
Zurück
Oben